Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[NET]: Do not check netif_running() and carrier state in ->poll()

Drivers do this to try to break out of the ->poll()'ing loop
when the device is being brought administratively down.

Now that we have a napi_disable() "pending" state we are going
to solve that problem generically.

Signed-off-by: David S. Miller <davem@davemloft.net>

+9 -55
+1 -1
drivers/net/e100.c
··· 1997 1997 tx_cleaned = e100_tx_clean(nic); 1998 1998 1999 1999 /* If no Rx and Tx cleanup work was done, exit polling mode. */ 2000 - if((!tx_cleaned && (work_done == 0)) || !netif_running(netdev)) { 2000 + if((!tx_cleaned && (work_done == 0))) { 2001 2001 netif_rx_complete(netdev, napi); 2002 2002 e100_enable_irq(nic); 2003 2003 }
+1 -7
drivers/net/e1000/e1000_main.c
··· 3924 3924 /* Must NOT use netdev_priv macro here. */ 3925 3925 adapter = poll_dev->priv; 3926 3926 3927 - /* Keep link state information with original netdev */ 3928 - if (!netif_carrier_ok(poll_dev)) 3929 - goto quit_polling; 3930 - 3931 3927 /* e1000_clean is called per-cpu. This lock protects 3932 3928 * tx_ring[0] from being cleaned by multiple cpus 3933 3929 * simultaneously. A failure obtaining the lock means ··· 3938 3942 &work_done, budget); 3939 3943 3940 3944 /* If no Tx and not enough Rx work done, exit the polling mode */ 3941 - if ((!tx_cleaned && (work_done == 0)) || 3942 - !netif_running(poll_dev)) { 3943 - quit_polling: 3945 + if ((!tx_cleaned && (work_done == 0))) { 3944 3946 if (likely(adapter->itr_setting & 3)) 3945 3947 e1000_set_itr(adapter); 3946 3948 netif_rx_complete(poll_dev, napi);
+1 -7
drivers/net/e1000e/netdev.c
··· 1389 1389 /* Must NOT use netdev_priv macro here. */ 1390 1390 adapter = poll_dev->priv; 1391 1391 1392 - /* Keep link state information with original netdev */ 1393 - if (!netif_carrier_ok(poll_dev)) 1394 - goto quit_polling; 1395 - 1396 1392 /* e1000_clean is called per-cpu. This lock protects 1397 1393 * tx_ring from being cleaned by multiple cpus 1398 1394 * simultaneously. A failure obtaining the lock means ··· 1401 1405 adapter->clean_rx(adapter, &work_done, budget); 1402 1406 1403 1407 /* If no Tx and not enough Rx work done, exit the polling mode */ 1404 - if ((!tx_cleaned && (work_done < budget)) || 1405 - !netif_running(poll_dev)) { 1406 - quit_polling: 1408 + if ((!tx_cleaned && (work_done < budget))) { 1407 1409 if (adapter->itr_setting & 3) 1408 1410 e1000_set_itr(adapter); 1409 1411 netif_rx_complete(poll_dev, napi);
+1 -1
drivers/net/epic100.c
··· 1273 1273 1274 1274 epic_rx_err(dev, ep); 1275 1275 1276 - if (netif_running(dev) && (work_done < budget)) { 1276 + if (work_done < budget) { 1277 1277 unsigned long flags; 1278 1278 int more; 1279 1279
-5
drivers/net/fec_8xx/fec_main.c
··· 476 476 __u16 pkt_len, sc; 477 477 int curidx; 478 478 479 - if (fpi->use_napi) { 480 - if (!netif_running(dev)) 481 - return 0; 482 - } 483 - 484 479 /* 485 480 * First, grab all of the stats for the incoming packet. 486 481 * These get messed up if we get called due to a busy condition.
-3
drivers/net/fs_enet/fs_enet-main.c
··· 96 96 u16 pkt_len, sc; 97 97 int curidx; 98 98 99 - if (!netif_running(dev)) 100 - return 0; 101 - 102 99 /* 103 100 * First, grab all of the stats for the incoming packet. 104 101 * These get messed up if we get called due to a busy condition.
+1 -1
drivers/net/ixgb/ixgb_main.c
··· 1794 1794 ixgb_clean_rx_irq(adapter, &work_done, budget); 1795 1795 1796 1796 /* if no Tx and not enough Rx work done, exit the polling mode */ 1797 - if((!tx_cleaned && (work_done == 0)) || !netif_running(netdev)) { 1797 + if((!tx_cleaned && (work_done == 0))) { 1798 1798 netif_rx_complete(netdev, napi); 1799 1799 ixgb_irq_enable(adapter); 1800 1800 }
+1 -7
drivers/net/ixgbe/ixgbe_main.c
··· 1470 1470 struct net_device *netdev = adapter->netdev; 1471 1471 int tx_cleaned = 0, work_done = 0; 1472 1472 1473 - /* Keep link state information with original netdev */ 1474 - if (!netif_carrier_ok(adapter->netdev)) 1475 - goto quit_polling; 1476 - 1477 1473 /* In non-MSIX case, there is no multi-Tx/Rx queue */ 1478 1474 tx_cleaned = ixgbe_clean_tx_irq(adapter, adapter->tx_ring); 1479 1475 ixgbe_clean_rx_irq(adapter, &adapter->rx_ring[0], &work_done, 1480 1476 budget); 1481 1477 1482 1478 /* If no Tx and not enough Rx work done, exit the polling mode */ 1483 - if ((!tx_cleaned && (work_done < budget)) || 1484 - !netif_running(adapter->netdev)) { 1485 - quit_polling: 1479 + if ((!tx_cleaned && (work_done < budget))) { 1486 1480 netif_rx_complete(netdev, napi); 1487 1481 ixgbe_irq_enable(adapter); 1488 1482 }
-2
drivers/net/ixp2000/ixpdev.c
··· 135 135 struct net_device *dev = ip->dev; 136 136 int rx; 137 137 138 - /* @@@ Have to stop polling when nds[0] is administratively 139 - * downed while we are polling. */ 140 138 rx = 0; 141 139 do { 142 140 ixp2000_reg_write(IXP2000_IRQ_THD_RAW_STATUS_A_0, 0x00ff);
+1 -1
drivers/net/myri10ge/myri10ge.c
··· 1239 1239 /* process as many rx events as NAPI will allow */ 1240 1240 work_done = myri10ge_clean_rx_done(mgp, budget); 1241 1241 1242 - if (work_done < budget || !netif_running(netdev)) { 1242 + if (work_done < budget) { 1243 1243 netif_rx_complete(netdev, napi); 1244 1244 put_be32(htonl(3), mgp->irq_claim); 1245 1245 }
+1 -1
drivers/net/natsemi.c
··· 2266 2266 /* Reenable interrupts providing nothing is trying to shut 2267 2267 * the chip down. */ 2268 2268 spin_lock(&np->lock); 2269 - if (!np->hands_off && netif_running(dev)) 2269 + if (!np->hands_off) 2270 2270 natsemi_irq_enable(dev); 2271 2271 spin_unlock(&np->lock); 2272 2272
+1 -6
drivers/net/qla3xxx.c
··· 2320 2320 unsigned long hw_flags; 2321 2321 struct ql3xxx_port_registers __iomem *port_regs = qdev->mem_map_registers; 2322 2322 2323 - if (!netif_carrier_ok(ndev)) 2324 - goto quit_polling; 2325 - 2326 2323 ql_tx_rx_clean(qdev, &tx_cleaned, &rx_cleaned, budget); 2327 2324 2328 - if (tx_cleaned + rx_cleaned != budget || 2329 - !netif_running(ndev)) { 2330 - quit_polling: 2325 + if (tx_cleaned + rx_cleaned != budget) { 2331 2326 spin_lock_irqsave(&qdev->hw_lock, hw_flags); 2332 2327 __netif_rx_complete(ndev, napi); 2333 2328 ql_update_small_bufq_prod_index(qdev);
-3
drivers/net/s2io.c
··· 2704 2704 struct XENA_dev_config __iomem *bar0 = nic->bar0; 2705 2705 int i; 2706 2706 2707 - if (!is_s2io_card_up(nic)) 2708 - return 0; 2709 - 2710 2707 mac_control = &nic->mac_control; 2711 2708 config = &nic->config; 2712 2709
-5
drivers/net/tulip/interrupt.c
··· 117 117 int received = 0; 118 118 #endif 119 119 120 - if (!netif_running(dev)) 121 - goto done; 122 - 123 120 #ifdef CONFIG_TULIP_NAPI_HW_MITIGATION 124 121 125 122 /* that one buffer is needed for mit activation; or might be a ··· 257 260 * tomorrow (night 011029). If it will not fail, we won 258 261 * finally: amount of IO did not increase at all. */ 259 262 } while ((ioread32(tp->base_addr + CSR5) & RxIntr)); 260 - 261 - done: 262 263 263 264 #ifdef CONFIG_TULIP_NAPI_HW_MITIGATION 264 265
-5
drivers/net/xen-netfront.c
··· 852 852 853 853 spin_lock(&np->rx_lock); 854 854 855 - if (unlikely(!netif_carrier_ok(dev))) { 856 - spin_unlock(&np->rx_lock); 857 - return 0; 858 - } 859 - 860 855 skb_queue_head_init(&rxq); 861 856 skb_queue_head_init(&errq); 862 857 skb_queue_head_init(&tmpq);