Messages in this thread | | | From | Eric Dumazet <> | Date | Wed, 17 Jan 2018 14:02:43 -0800 | Subject | Re: [RFC 1/2] softirq: Defer net rx/tx processing to ksoftirqd context |
| |
On Wed, Jan 17, 2018 at 2:00 PM, Thomas Gleixner <tglx@linutronix.de> wrote: > On Wed, 17 Jan 2018, Linus Torvalds wrote: > >> On Wed, Jan 17, 2018 at 1:54 PM, Thomas Gleixner <tglx@linutronix.de> wrote: >> > raise_softirq() -> raise_softirq_irqoff() >> > >> > set_softirq_bit(); >> > >> > if (!in_interrupt()) >> > wake_softirqd(); >> > >> > So if the caller is not in hard or soft interrupt context, which includes >> > bottom half disabled regions softirqd is woken. >> >> That does seem unnecessarily expensive, and maybe we could just do it >> with thread flag (TIF_NOTIFY_RESUME or whatever). >> >> In fact, that was what I *thought* we did. Maybe I just remember some >> historical behavior. >> >> Since networking seems to largely prefer softirqd anyway, maybe that >> wake_softirqd() is the right thing to do anyway. > > Well, but we only do it when we are not in a bh disabled region. The places > where thread context raises the network softirqs is usually inside a bh > disabled region, so the softirq is executed on local_bh_enable(). The > thread is woken up rarely.
There is also the netif_rx_ni() stuff.
Can't remember right now why it is not using local_bh_{diable,enable}() pair instead of preempt_disable() ... if (local_softirq_pending()) do_softirq();
| |