Re: Queries on bottom halves

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

 



Hi Abhinav,

On 09/02/2018 11:28 PM, Abhinav Misra wrote:
Hi Larry,

Based on your answers below are my further queries.

1. *Does softirq and tasklet will always runs in ksoftirqd thread context ?*
As it is mentioned in the LKD (by robert love Pg-138) that there are multiple places where pending softirq's are checked. Out of that one is in return from hardware interrupt code path i.e in do_irq function.

If that is the case then it will be running in the irq context with just
~~ --->> Sorry, does "it" mean softirq or somethine else?? do_irq just wake up softirq thread. That does not mean softirq runs in irq context.

the interrupts enabled.

Now I know LKD is old and based on linux kernel 2.6. *Is that above scenario is changed in new version of kernel ?*

Even I tried one example mentioned in LDD by Jerry cooperstein and printing the pid of current task (current->pid) in the tasklet which is getting scheduled by the shared interrupt from n/w card. Every time it is printing the pid of the ksoftirqd thread.

So does that mean, now in latest kernel, softirq and tasklet will always run in context of ksoftirqd thread ?

Yes.

2. If we can sleep or use blocking calls in softirq's and tasklets then *what is the difference between softirq/tasklet and workqueue's ?

That's another question, workqueue and tasklet is two machnisms provided for async operations. Generally I think workqueue is more powerful and flexible. You can get more info from kernel docs.


*Because in old kernel, the main difference between softirq/tasklet and workqueue's (Wq's) is that Wq's runs in process context and hence sleep is allowed while the same is not the case with other counterparts.
I refered to kernel 2.6 version, softirq and tasklet are still almost the same machnism with the latest version.

Here is an explanation

https://www.safaribooksonline.com/library/view/understanding-the-linux/0596005652/ch04s07.html


But if in new kernel this implementation is changed then why we need so many options to defer the work as all of them are basically getting executed in almost the same way.*In that case code running softirq, tasklet, workqueue and kernel thread are all same ?* If this is true then why we just remove all these these option and keep one or two alternative.

Emmm... tasklet and workqueue have something in common, but I think tasklet can satisfy simple scenarios, while workqueue, I think is more powerfull and flexible, does well in more complicated scenarios.

Maybe when you make clear what's their difference, you'll understand more.

BR,
Larry

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



[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