1. /kernel/irq.c softirq_init 2.6.32.25 1.1 for_each_possible_cpu for ( ( ( cpu ) ) = - 1 ; ( ( cpu ) ) = cpumask_next ( ( ( cpu ) ) , ( cpu_possible_mask ) ) , ( ( cpu ) ) < nr_cpu_ids ; ) 1.2 per_cpu(tasklet_vec, cpu); //取per_cpu_tasklet_vec[cpu],即cpu的tasklet_vec结构。 per_cpu (tasklet_vec, cpu); ( * ( { unsigned long __ptr ; __ptr = ( unsigned long ) ( ( & per_cpu__tasklet_vec ) ) ; ( typeof ( ( & per_cpu__tasklet_vec ) ) ) ( __ptr + ( ( ( __per_cpu_offset [ cpu ] ) ) ) ) ; } ) ) ; 1.3 tasklet_vec / tasklet_hi_vec static DEFINE_PER_CPU( struct tasklet_head, tasklet_vec); static DEFINE_PER_CPU(