From mboxrd@z Thu Jan 1 00:00:00 1970 From: lchen@suse.com (Larry Chen) Date: Mon, 3 Sep 2018 12:23:34 +0800 Subject: Queries on bottom halves In-Reply-To: References: Message-ID: <785c4103-bf1a-b934-bb14-1e20031663b8@suse.com> To: kernelnewbies@lists.kernelnewbies.org List-Id: kernelnewbies.lists.kernelnewbies.org 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