net: Treat __napi_schedule_irqoff() as __napi_schedule() on PREEMPT_RT
[linux-2.6-microblaze.git] / net / core / dev.c
index 222b1d3..febb237 100644 (file)
@@ -6501,11 +6501,18 @@ EXPORT_SYMBOL(napi_schedule_prep);
  * __napi_schedule_irqoff - schedule for receive
  * @n: entry to schedule
  *
- * Variant of __napi_schedule() assuming hard irqs are masked
+ * Variant of __napi_schedule() assuming hard irqs are masked.
+ *
+ * On PREEMPT_RT enabled kernels this maps to __napi_schedule()
+ * because the interrupt disabled assumption might not be true
+ * due to force-threaded interrupts and spinlock substitution.
  */
 void __napi_schedule_irqoff(struct napi_struct *n)
 {
-       ____napi_schedule(this_cpu_ptr(&softnet_data), n);
+       if (!IS_ENABLED(CONFIG_PREEMPT_RT))
+               ____napi_schedule(this_cpu_ptr(&softnet_data), n);
+       else
+               __napi_schedule(n);
 }
 EXPORT_SYMBOL(__napi_schedule_irqoff);