Messages in this thread | | | Date | Mon, 29 Feb 2016 20:14:36 +0100 (CET) | From | Thomas Gleixner <> | Subject | Re: Softirq priority inversion from "softirq: reduce latencies" |
| |
On Mon, 29 Feb 2016, Peter Hurley wrote: > On 02/29/2016 10:24 AM, Eric Dumazet wrote: > >> Just to be clear > >> > >> if (time_before(jiffies, end) && !need_resched() && > >> --max_restart) > >> goto restart; > >> > >> aborts softirq *even if 0ns have elapsed*, if NET_RX has woken a process. > > > > Sure, now remove the 1st and 2nd condition. > > Well just removing the 2nd condition has everything working fine, > because that fixes the priority inversion.
No. It does not fix anything. It hides the shortcomings of the driver.
> However, when system resources are _not_ contended, it makes no > sense to be forced to revert to ksoftirqd resolution, which is strictly > intended as fallback.
No. You claim it is simply because your driver does not handle that situation properly.
> Or flipping your argument on its head, why not just _always_ execute > softirq in ksoftirqd?
Which is what that change effectivley does. And that makes a lot of sense, because you get the softirq load under scheduler control and do not let the softirq run as a context stealing entity which is completely uncontrollable by the scheduler.
Running the softirq on return from interrupt can cause real priority inversions.
Thanks,
tglx
| |