On 10/24/07, Mohammad M Molla <merajuli@xxxxxxxxx> wrote: > Its a bit strange that the passed parameter is not used. > It is not really strange, as THIS particular tasklet_action() is NOT using the parameter passed in, but other tasklet_action() are: ./drivers/misc/lkdtm.c: void jp_tasklet_action(struct softirq_action *a) lkdtm.kp.symbol_name = "tasklet_action"; lkdtm.entry = (kprobe_opcode_t*) jp_tasklet_action; ./drivers/serial/serial_core.c: static void uart_tasklet_action(unsigned long data) tasklet_init(&state->info->tlet, uart_tasklet_action, ./kernel/softirq.c: static void tasklet_action(struct softirq_action *a) open_softirq(TASKLET_SOFTIRQ, tasklet_action, NULL); ./arch/ppc/4xx_io/serial_sicc.c: static void siccuart_tasklet_action(unsigned long data) tasklet_init(&info->tlet, siccuart_tasklet_action, >From above we can see that this particular tasklet_action() is a func ptr setup in open_softirq() call, whereas others will call tasklet_init() to setup the different tasklet_action func ptr. And who call all these different tasklet_action() via func ptr? It is in the kernel/softirq.c: __do_softirq() function: do { if (pending & 1) { h->action(h);===> func ptr is called here. rcu_bh_qsctr_inc(cpu); } h++; pending >>= 1; } while (pending); -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ