Re: how do tasklets queue?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Oct 12, 2009 at 12:24 PM, Joel Fernandes <agnel.joel@xxxxxxxxx> wrote:
> Hi Friends,
>
> I have a question about tasklets:
>
> I understand that they are used to defer work during interrupt
> handling. What I don't understand is - how do they handle queuing of
> deferred work?

via softirq mechanism:  look at kernel/softirq.c:

55 static struct softirq_action softirq_vec[NR_SOFTIRQS]
__cacheline_aligned_in_smp;
 56
 57 static DEFINE_PER_CPU(struct task_struct *, ksoftirqd);
 58
 59 char *softirq_to_name[NR_SOFTIRQS] = {
 60         "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "BLOCK_IOPOLL",
 61         "TASKLET", "SCHED", "HRTIMER",  "RCU"
 62 };


>From above, we can see that tasklet is just but one of the softirq
(software interrupt) todo list.   Tasklet are implement by "HI" for
HI_SOFTIRQ (high priority tasklet) and TASKLET.   To indicate a
software interrupt occurring u used raise_softirq() - then the action
will be executed later by softirqd (after wakeup_softirqd() is
called).

The loop to go through each item on the tasklet todo list is here:

398
399 static void tasklet_action(struct softirq_action *a)
400 {
401         struct tasklet_struct *list;
402
408
409         while (list) {

414                 if (tasklet_trylock(t)) {
415                         if (!atomic_read(&t->count)) {
416                                 if
(!test_and_clear_bit(TASKLET_STATE_SCHED, &t->state))
417                                         BUG();
418                                 t->func(t->data);
419                                 tasklet_unlock(t);
420                                 continue;
421                         }
422                         tasklet_unlock(t);
423                 }

> Specially with tasklets, if a tasklet is re-scheduled before the
> previous scheduling of the same tasklet has a chance to run, then the
> tasklet is executed only once - not twice. But what if the work that
> the tasklet was supposed to do in these 2 instances were different and
> that its function was supposed to be passed 2 different structures?
> Shouldn't the tasklet be executed twice with these 2 structures?
>
> I know that work queues are there for that, but how do device drivers
> that use tasklets cope with the above?
>
> Thanks,
> -Joel


-- 
Regards,
Peter Teoh

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux