|
@@ -407,6 +407,24 @@ static inline void napi_enable(struct napi_struct *n)
|
|
|
clear_bit(NAPI_STATE_SCHED, &n->state);
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_SMP
|
|
|
+/**
|
|
|
+ * napi_synchronize - wait until NAPI is not running
|
|
|
+ * @n: napi context
|
|
|
+ *
|
|
|
+ * Wait until NAPI is done being scheduled on this context.
|
|
|
+ * Waits till any outstanding processing completes but
|
|
|
+ * does not disable future activations.
|
|
|
+ */
|
|
|
+static inline void napi_synchronize(const struct napi_struct *n)
|
|
|
+{
|
|
|
+ while (test_bit(NAPI_STATE_SCHED, &n->state))
|
|
|
+ msleep(1);
|
|
|
+}
|
|
|
+#else
|
|
|
+# define napi_synchronize(n) barrier()
|
|
|
+#endif
|
|
|
+
|
|
|
/*
|
|
|
* The DEVICE structure.
|
|
|
* Actually, this whole structure is a big mistake. It mixes I/O
|