On Wed, 2 Feb 2022 13:28:48 +0100 Sebastian Andrzej Siewior wrote: > /* Schedule NAPI for backlog device > * We can use non atomic operation since we own the queue lock > + * PREEMPT_RT needs to disable interrupts here for > + * synchronisation needed in napi_schedule. > */ > + if (IS_ENABLED(CONFIG_PREEMPT_RT)) > + local_irq_disable(); > + > if (!__test_and_set_bit(NAPI_STATE_SCHED, &sd->backlog.state)) { > if (!rps_ipi_queued(sd)) > ____napi_schedule(sd, &sd->backlog); > } > + if (IS_ENABLED(CONFIG_PREEMPT_RT)) > + local_irq_enable(); > goto enqueue; I think you can re-jig this a little more - rps_ipi_queued() only return 0 if sd is "local" so maybe we can call __napi_schedule_irqoff() instead which already has the if () for PREEMPT_RT? Maybe moving the ____napi_schedule() into rps_ipi_queued() and renaming it to napi_schedule_backlog() or napi_schedule_rps() would make the code easier to follow in that case?