High-priority softirqs [was: [PATCH] usb: don't offload isochronous urb completions to ksoftirq]

From: Alan Stern
Date: Fri Jun 15 2018 - 13:17:51 EST

On Fri, 15 Jun 2018, Mikulas Patocka wrote:

> I think the major problem (in the upstream kernel) with softirq latency is
> this:
> static inline void invoke_softirq(void)
> {
> if (ksoftirqd_running())
> return;
> It means that if any piece of code kicks ksoftirq, no tasklets are
> processed in the irq context at all.
> So, the ehci callbacks will be offloaded to ksoftirqd (no matter how small
> they are) and this causes audio skipping. Could this be changed, so that
> it processes tasklets submitted with "tasklet_hi_schedule" in irq context
> even if ksoftirqd is running?

That's a great question. Basically you're asking to have the HI
softirq always handled in the bottom half, never in ksoftirqd, right?

Or maybe to have more than one softirq thread, to handle different
softirq levels, so that they can be assigned differing priorities.

> It's not easy - __do_softirq lacks any locking - so it can't run
> concurrently in process context and in irq context.

I have no idea. Maybe someone with a better understanding of this part
of the kernel can help.

Alan Stern