On 10/24/07, Mohammad M Molla <[EMAIL PROTECTED]> 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 [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ