|
@@ -432,11 +432,25 @@ extern bool force_irqthreads;
|
|
|
#define force_irqthreads (0)
|
|
|
#endif
|
|
|
|
|
|
+#ifndef local_softirq_pending
|
|
|
+
|
|
|
+#ifndef local_softirq_pending_ref
|
|
|
+#define local_softirq_pending_ref irq_stat.__softirq_pending
|
|
|
+#endif
|
|
|
+
|
|
|
+#define local_softirq_pending() (__this_cpu_read(local_softirq_pending_ref))
|
|
|
+#define set_softirq_pending(x) (__this_cpu_write(local_softirq_pending_ref, (x)))
|
|
|
+#define or_softirq_pending(x) (__this_cpu_or(local_softirq_pending_ref, (x)))
|
|
|
+
|
|
|
+#else /* local_softirq_pending */
|
|
|
+
|
|
|
#ifndef __ARCH_SET_SOFTIRQ_PENDING
|
|
|
#define set_softirq_pending(x) (local_softirq_pending() = (x))
|
|
|
#define or_softirq_pending(x) (local_softirq_pending() |= (x))
|
|
|
#endif
|
|
|
|
|
|
+#endif /* local_softirq_pending */
|
|
|
+
|
|
|
/* Some architectures might implement lazy enabling/disabling of
|
|
|
* interrupts. In some cases, such as stop_machine, we might want
|
|
|
* to ensure that after a local_irq_disable(), interrupts have
|