diff options
| -rw-r--r-- | include/linux/netdevice.h | 10 | ||||
| -rw-r--r-- | net/core/netpoll.c | 8 |
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 | } |
