aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/netdevice.h10
-rw-r--r--net/core/netpoll.c8
2 files changed, 0 insertions, 18 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 322b5eae57dd..da7a13c97eb8 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -262,8 +262,6 @@ enum netdev_state_t
262 __LINK_STATE_LINKWATCH_PENDING, 262 __LINK_STATE_LINKWATCH_PENDING,
263 __LINK_STATE_DORMANT, 263 __LINK_STATE_DORMANT,
264 __LINK_STATE_QDISC_RUNNING, 264 __LINK_STATE_QDISC_RUNNING,
265 /* Set by the netpoll NAPI code */
266 __LINK_STATE_POLL_LIST_FROZEN,
267}; 265};
268 266
269 267
@@ -1022,14 +1020,6 @@ static inline void netif_rx_complete(struct net_device *dev)
1022{ 1020{
1023 unsigned long flags; 1021 unsigned long flags;
1024 1022
1025#ifdef CONFIG_NETPOLL
1026 /* Prevent race with netpoll - yes, this is a kludge.
1027 * But at least it doesn't penalize the non-netpoll
1028 * code path. */
1029 if (test_bit(__LINK_STATE_POLL_LIST_FROZEN, &dev->state))
1030 return;
1031#endif
1032
1033 local_irq_save(flags); 1023 local_irq_save(flags);
1034 __netif_rx_complete(dev); 1024 __netif_rx_complete(dev);
1035 local_irq_restore(flags); 1025 local_irq_restore(flags);
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index d1264e9a50a8..de1b26aa5720 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -124,13 +124,6 @@ static void poll_napi(struct netpoll *np)
124 if (test_bit(__LINK_STATE_RX_SCHED, &np->dev->state) && 124 if (test_bit(__LINK_STATE_RX_SCHED, &np->dev->state) &&
125 npinfo->poll_owner != smp_processor_id() && 125 npinfo->poll_owner != smp_processor_id() &&
126 spin_trylock(&npinfo->poll_lock)) { 126 spin_trylock(&npinfo->poll_lock)) {
127 /* When calling dev->poll from poll_napi, we may end up in
128 * netif_rx_complete. However, only the CPU to which the
129 * device was queued is allowed to remove it from poll_list.
130 * Setting POLL_LIST_FROZEN tells netif_rx_complete
131 * to leave the NAPI state alone.
132 */
133 set_bit(__LINK_STATE_POLL_LIST_FROZEN, &np->dev->state);
134 npinfo->rx_flags |= NETPOLL_RX_DROP; 127 npinfo->rx_flags |= NETPOLL_RX_DROP;
135 atomic_inc(&trapped); 128 atomic_inc(&trapped);
136 129
@@ -138,7 +131,6 @@ static void poll_napi(struct netpoll *np)
138 131
139 atomic_dec(&trapped); 132 atomic_dec(&trapped);
140 npinfo->rx_flags &= ~NETPOLL_RX_DROP; 133 npinfo->rx_flags &= ~NETPOLL_RX_DROP;
141 clear_bit(__LINK_STATE_POLL_LIST_FROZEN, &np->dev->state);
142 spin_unlock(&npinfo->poll_lock); 134 spin_unlock(&npinfo->poll_lock);
143 } 135 }
144} 136}