<div dir="ltr"><div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div><div><span style="font-family:verdana,sans-serif">Hi Larry,<br><br></span></div><span style="font-family:verdana,sans-serif">Based on your answers below are my further queries.<br><br></span></div><span style="font-family:verdana,sans-serif">1. <b>Does softirq and tasklet will always runs in ksoftirqd thread context ?</b><br></span></div><span style="font-family:verdana,sans-serif">As it is mentioned in the LKD (by robert love Pg-138) that there are multiple places where pending softirq's<br></span></div><span style="font-family:verdana,sans-serif">are checked. Out of that one is in return from hardware interrupt code path i.e in do_irq function.<br><br></span></div><span style="font-family:verdana,sans-serif">If that is the case then it will be running in the irq context with just the interrupts enabled.<br></span></div><span style="font-family:verdana,sans-serif">Now I know LKD is old and based on linux kernel 2.6. <b>Is that above scenario is changed in new version of kernel ?</b><br><br></span></div><span style="font-family:verdana,sans-serif">Even I tried one example mentioned in LDD by Jerry cooperstein and printing the pid of current task (current->pid) in the<br></span></div><span style="font-family:verdana,sans-serif">tasklet which is getting scheduled by the shared interrupt from n/w card. Every time it is printing the pid of the ksoftirqd thread.<br><br></span></div><span style="font-family:verdana,sans-serif">So does that mean, now in latest kernel, softirq and tasklet will always run in context of ksoftirqd thread ?<br><br></span></div><span style="font-family:verdana,sans-serif">2. If we can sleep or use blocking calls in softirq's and tasklets then <b>what is the difference between softirq/tasklet and workqueue's ?<br></b>Because in old kernel, the main difference between  softirq/tasklet and workqueue's (Wq's) is that Wq's runs in process context <br>and hence sleep is allowed while the same is not the case with other counterparts.<br><br></span></div><span style="font-family:verdana,sans-serif">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 </span><span style="font-family:verdana,sans-serif">getting executed in almost the same way.<b> In that case code running softirq, tasklet, workqueue and kernel thread are all same ?</b> </span><br><span style="font-family:verdana,sans-serif"></span></div><span style="font-family:verdana,sans-serif">If this is true then why we just remove all these these option and keep one or two alternative.<br><br></span></div><div><span style="font-family:verdana,sans-serif">There's one old link which also talks something about this.<br><span style="color:rgb(0,0,255)"><u><a href="https://lists.kernelnewbies.org/pipermail/kernelnewbies/2011-November/003812.html">https://lists.kernelnewbies.org/pipermail/kernelnewbies/2011-November/003812.html</a></u></span><br><br></span></div><span style="font-family:verdana,sans-serif">BR,Abhinav<br></span></div></div>