Skip to content

Commit 4ec2411

Browse files
committed
[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>
1 parent a0a4619 commit 4ec2411

File tree

15 files changed

+9
-55
lines changed

15 files changed

+9
-55
lines changed

drivers/net/e100.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1997,7 +1997,7 @@ static int e100_poll(struct napi_struct *napi, int budget)
19971997
tx_cleaned = e100_tx_clean(nic);
19981998

19991999
/* 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))) {
20012001
netif_rx_complete(netdev, napi);
20022002
e100_enable_irq(nic);
20032003
}

drivers/net/e1000/e1000_main.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3924,10 +3924,6 @@ e1000_clean(struct napi_struct *napi, int budget)
39243924
/* Must NOT use netdev_priv macro here. */
39253925
adapter = poll_dev->priv;
39263926

3927-
/* Keep link state information with original netdev */
3928-
if (!netif_carrier_ok(poll_dev))
3929-
goto quit_polling;
3930-
39313927
/* e1000_clean is called per-cpu. This lock protects
39323928
* tx_ring[0] from being cleaned by multiple cpus
39333929
* simultaneously. A failure obtaining the lock means
@@ -3942,9 +3938,7 @@ e1000_clean(struct napi_struct *napi, int budget)
39423938
&work_done, budget);
39433939

39443940
/* If no Tx and not enough Rx work done, exit the polling mode */
3945-
if ((!tx_cleaned && (work_done == 0)) ||
3946-
!netif_running(poll_dev)) {
3947-
quit_polling:
3941+
if ((!tx_cleaned && (work_done == 0))) {
39483942
if (likely(adapter->itr_setting & 3))
39493943
e1000_set_itr(adapter);
39503944
netif_rx_complete(poll_dev, napi);

drivers/net/e1000e/netdev.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,10 +1389,6 @@ static int e1000_clean(struct napi_struct *napi, int budget)
13891389
/* Must NOT use netdev_priv macro here. */
13901390
adapter = poll_dev->priv;
13911391

1392-
/* Keep link state information with original netdev */
1393-
if (!netif_carrier_ok(poll_dev))
1394-
goto quit_polling;
1395-
13961392
/* e1000_clean is called per-cpu. This lock protects
13971393
* tx_ring from being cleaned by multiple cpus
13981394
* simultaneously. A failure obtaining the lock means
@@ -1405,9 +1401,7 @@ static int e1000_clean(struct napi_struct *napi, int budget)
14051401
adapter->clean_rx(adapter, &work_done, budget);
14061402

14071403
/* If no Tx and not enough Rx work done, exit the polling mode */
1408-
if ((!tx_cleaned && (work_done < budget)) ||
1409-
!netif_running(poll_dev)) {
1410-
quit_polling:
1404+
if ((!tx_cleaned && (work_done < budget))) {
14111405
if (adapter->itr_setting & 3)
14121406
e1000_set_itr(adapter);
14131407
netif_rx_complete(poll_dev, napi);

drivers/net/epic100.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1273,7 +1273,7 @@ static int epic_poll(struct napi_struct *napi, int budget)
12731273

12741274
epic_rx_err(dev, ep);
12751275

1276-
if (netif_running(dev) && (work_done < budget)) {
1276+
if (work_done < budget) {
12771277
unsigned long flags;
12781278
int more;
12791279

drivers/net/fec_8xx/fec_main.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -476,11 +476,6 @@ static int fec_enet_rx_common(struct fec_enet_private *ep,
476476
__u16 pkt_len, sc;
477477
int curidx;
478478

479-
if (fpi->use_napi) {
480-
if (!netif_running(dev))
481-
return 0;
482-
}
483-
484479
/*
485480
* First, grab all of the stats for the incoming packet.
486481
* These get messed up if we get called due to a busy condition.

drivers/net/fs_enet/fs_enet-main.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,6 @@ static int fs_enet_rx_napi(struct napi_struct *napi, int budget)
9696
u16 pkt_len, sc;
9797
int curidx;
9898

99-
if (!netif_running(dev))
100-
return 0;
101-
10299
/*
103100
* First, grab all of the stats for the incoming packet.
104101
* These get messed up if we get called due to a busy condition.

drivers/net/ixgb/ixgb_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1794,7 +1794,7 @@ ixgb_clean(struct napi_struct *napi, int budget)
17941794
ixgb_clean_rx_irq(adapter, &work_done, budget);
17951795

17961796
/* 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))) {
17981798
netif_rx_complete(netdev, napi);
17991799
ixgb_irq_enable(adapter);
18001800
}

drivers/net/ixgbe/ixgbe_main.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1470,19 +1470,13 @@ static int ixgbe_clean(struct napi_struct *napi, int budget)
14701470
struct net_device *netdev = adapter->netdev;
14711471
int tx_cleaned = 0, work_done = 0;
14721472

1473-
/* Keep link state information with original netdev */
1474-
if (!netif_carrier_ok(adapter->netdev))
1475-
goto quit_polling;
1476-
14771473
/* In non-MSIX case, there is no multi-Tx/Rx queue */
14781474
tx_cleaned = ixgbe_clean_tx_irq(adapter, adapter->tx_ring);
14791475
ixgbe_clean_rx_irq(adapter, &adapter->rx_ring[0], &work_done,
14801476
budget);
14811477

14821478
/* 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))) {
14861480
netif_rx_complete(netdev, napi);
14871481
ixgbe_irq_enable(adapter);
14881482
}

drivers/net/ixp2000/ixpdev.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,6 @@ static int ixpdev_poll(struct napi_struct *napi, int budget)
135135
struct net_device *dev = ip->dev;
136136
int rx;
137137

138-
/* @@@ Have to stop polling when nds[0] is administratively
139-
* downed while we are polling. */
140138
rx = 0;
141139
do {
142140
ixp2000_reg_write(IXP2000_IRQ_THD_RAW_STATUS_A_0, 0x00ff);

drivers/net/myri10ge/myri10ge.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1239,7 +1239,7 @@ static int myri10ge_poll(struct napi_struct *napi, int budget)
12391239
/* process as many rx events as NAPI will allow */
12401240
work_done = myri10ge_clean_rx_done(mgp, budget);
12411241

1242-
if (work_done < budget || !netif_running(netdev)) {
1242+
if (work_done < budget) {
12431243
netif_rx_complete(netdev, napi);
12441244
put_be32(htonl(3), mgp->irq_claim);
12451245
}

0 commit comments

Comments
 (0)