OpenWrt – Diff between revs 2 and 3

Subversion Repositories:
Rev:
Only display areas with differencesIgnore whitespace
Rev 2 Rev 3
1 From 6ad20165d376fa07919a70e4f43dfae564601829 Mon Sep 17 00:00:00 2001 1 From 6ad20165d376fa07919a70e4f43dfae564601829 Mon Sep 17 00:00:00 2001
2 From: Eric Dumazet <edumazet@google.com> 2 From: Eric Dumazet <edumazet@google.com>
3 Date: Mon, 30 Jan 2017 08:22:01 -0800 3 Date: Mon, 30 Jan 2017 08:22:01 -0800
4 Subject: drivers: net: generalize napi_complete_done() 4 Subject: drivers: net: generalize napi_complete_done()
5   5  
6 napi_complete_done() allows to opt-in for gro_flush_timeout, 6 napi_complete_done() allows to opt-in for gro_flush_timeout,
7 added back in linux-3.19, commit 3b47d30396ba 7 added back in linux-3.19, commit 3b47d30396ba
8 ("net: gro: add a per device gro flush timer") 8 ("net: gro: add a per device gro flush timer")
9   9  
10 This allows for more efficient GRO aggregation without 10 This allows for more efficient GRO aggregation without
11 sacrifying latencies. 11 sacrifying latencies.
12   12  
13 Signed-off-by: Eric Dumazet <edumazet@google.com> 13 Signed-off-by: Eric Dumazet <edumazet@google.com>
14 Signed-off-by: David S. Miller <davem@davemloft.net> 14 Signed-off-by: David S. Miller <davem@davemloft.net>
15 --- 15 ---
16 drivers/net/can/at91_can.c | 2 +- 16 drivers/net/can/at91_can.c | 2 +-
17 drivers/net/can/c_can/c_can.c | 2 +- 17 drivers/net/can/c_can/c_can.c | 2 +-
18 drivers/net/can/flexcan.c | 2 +- 18 drivers/net/can/flexcan.c | 2 +-
19 drivers/net/can/ifi_canfd/ifi_canfd.c | 2 +- 19 drivers/net/can/ifi_canfd/ifi_canfd.c | 2 +-
20 drivers/net/can/janz-ican3.c | 2 +- 20 drivers/net/can/janz-ican3.c | 2 +-
21 drivers/net/can/m_can/m_can.c | 2 +- 21 drivers/net/can/m_can/m_can.c | 2 +-
22 drivers/net/can/rcar/rcar_can.c | 2 +- 22 drivers/net/can/rcar/rcar_can.c | 2 +-
23 drivers/net/can/rcar/rcar_canfd.c | 2 +- 23 drivers/net/can/rcar/rcar_canfd.c | 2 +-
24 drivers/net/can/xilinx_can.c | 2 +- 24 drivers/net/can/xilinx_can.c | 2 +-
25 drivers/net/ethernet/3com/typhoon.c | 2 +- 25 drivers/net/ethernet/3com/typhoon.c | 2 +-
26 drivers/net/ethernet/adi/bfin_mac.c | 2 +- 26 drivers/net/ethernet/adi/bfin_mac.c | 2 +-
27 drivers/net/ethernet/agere/et131x.c | 2 +- 27 drivers/net/ethernet/agere/et131x.c | 2 +-
28 drivers/net/ethernet/altera/altera_tse_main.c | 2 +- 28 drivers/net/ethernet/altera/altera_tse_main.c | 2 +-
29 drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 2 +- 29 drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 2 +-
30 drivers/net/ethernet/aquantia/atlantic/aq_vec.c | 2 +- 30 drivers/net/ethernet/aquantia/atlantic/aq_vec.c | 2 +-
31 drivers/net/ethernet/arc/emac_main.c | 2 +- 31 drivers/net/ethernet/arc/emac_main.c | 2 +-
32 drivers/net/ethernet/atheros/alx/main.c | 2 +- 32 drivers/net/ethernet/atheros/alx/main.c | 2 +-
33 drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 2 +- 33 drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 2 +-
34 drivers/net/ethernet/atheros/atl1e/atl1e_main.c | 2 +- 34 drivers/net/ethernet/atheros/atl1e/atl1e_main.c | 2 +-
35 drivers/net/ethernet/atheros/atlx/atl1.c | 2 +- 35 drivers/net/ethernet/atheros/atlx/atl1.c | 2 +-
36 drivers/net/ethernet/broadcom/b44.c | 2 +- 36 drivers/net/ethernet/broadcom/b44.c | 2 +-
37 drivers/net/ethernet/broadcom/bcm63xx_enet.c | 2 +- 37 drivers/net/ethernet/broadcom/bcm63xx_enet.c | 2 +-
38 drivers/net/ethernet/broadcom/bgmac.c | 2 +- 38 drivers/net/ethernet/broadcom/bgmac.c | 2 +-
39 drivers/net/ethernet/broadcom/bnx2.c | 4 ++-- 39 drivers/net/ethernet/broadcom/bnx2.c | 4 ++--
40 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 2 +- 40 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 2 +-
41 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +- 41 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +-
42 drivers/net/ethernet/broadcom/sb1250-mac.c | 2 +- 42 drivers/net/ethernet/broadcom/sb1250-mac.c | 2 +-
43 drivers/net/ethernet/brocade/bna/bnad.c | 2 +- 43 drivers/net/ethernet/brocade/bna/bnad.c | 2 +-
44 drivers/net/ethernet/cadence/macb.c | 2 +- 44 drivers/net/ethernet/cadence/macb.c | 2 +-
45 drivers/net/ethernet/calxeda/xgmac.c | 2 +- 45 drivers/net/ethernet/calxeda/xgmac.c | 2 +-
46 drivers/net/ethernet/cavium/liquidio/lio_main.c | 2 +- 46 drivers/net/ethernet/cavium/liquidio/lio_main.c | 2 +-
47 drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 2 +- 47 drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 2 +-
48 drivers/net/ethernet/cavium/octeon/octeon_mgmt.c | 2 +- 48 drivers/net/ethernet/cavium/octeon/octeon_mgmt.c | 2 +-
49 drivers/net/ethernet/cavium/thunder/nicvf_main.c | 2 +- 49 drivers/net/ethernet/cavium/thunder/nicvf_main.c | 2 +-
50 drivers/net/ethernet/chelsio/cxgb/sge.c | 2 +- 50 drivers/net/ethernet/chelsio/cxgb/sge.c | 2 +-
51 drivers/net/ethernet/chelsio/cxgb3/sge.c | 4 ++-- 51 drivers/net/ethernet/chelsio/cxgb3/sge.c | 4 ++--
52 drivers/net/ethernet/chelsio/cxgb4vf/sge.c | 2 +- 52 drivers/net/ethernet/chelsio/cxgb4vf/sge.c | 2 +-
53 drivers/net/ethernet/cisco/enic/enic_main.c | 4 ++-- 53 drivers/net/ethernet/cisco/enic/enic_main.c | 4 ++--
54 drivers/net/ethernet/dec/tulip/interrupt.c | 6 +++--- 54 drivers/net/ethernet/dec/tulip/interrupt.c | 6 +++---
55 drivers/net/ethernet/dnet.c | 2 +- 55 drivers/net/ethernet/dnet.c | 2 +-
56 drivers/net/ethernet/emulex/benet/be_main.c | 2 +- 56 drivers/net/ethernet/emulex/benet/be_main.c | 2 +-
57 drivers/net/ethernet/ethoc.c | 2 +- 57 drivers/net/ethernet/ethoc.c | 2 +-
58 drivers/net/ethernet/ezchip/nps_enet.c | 2 +- 58 drivers/net/ethernet/ezchip/nps_enet.c | 2 +-
59 drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 2 +- 59 drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 2 +-
60 drivers/net/ethernet/freescale/fec_main.c | 2 +- 60 drivers/net/ethernet/freescale/fec_main.c | 2 +-
61 .../net/ethernet/freescale/fs_enet/fs_enet-main.c | 2 +- 61 .../net/ethernet/freescale/fs_enet/fs_enet-main.c | 2 +-
62 drivers/net/ethernet/freescale/gianfar.c | 4 ++-- 62 drivers/net/ethernet/freescale/gianfar.c | 4 ++--
63 drivers/net/ethernet/freescale/ucc_geth.c | 2 +- 63 drivers/net/ethernet/freescale/ucc_geth.c | 2 +-
64 drivers/net/ethernet/hisilicon/hip04_eth.c | 2 +- 64 drivers/net/ethernet/hisilicon/hip04_eth.c | 2 +-
65 drivers/net/ethernet/hisilicon/hisi_femac.c | 2 +- 65 drivers/net/ethernet/hisilicon/hisi_femac.c | 2 +-
66 drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 2 +- 66 drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 2 +-
67 drivers/net/ethernet/ibm/ibmveth.c | 2 +- 67 drivers/net/ethernet/ibm/ibmveth.c | 2 +-
68 drivers/net/ethernet/ibm/ibmvnic.c | 2 +- 68 drivers/net/ethernet/ibm/ibmvnic.c | 2 +-
69 drivers/net/ethernet/intel/e100.c | 2 +- 69 drivers/net/ethernet/intel/e100.c | 2 +-
70 drivers/net/ethernet/intel/ixgb/ixgb_main.c | 2 +- 70 drivers/net/ethernet/intel/ixgb/ixgb_main.c | 2 +-
71 drivers/net/ethernet/korina.c | 2 +- 71 drivers/net/ethernet/korina.c | 2 +-
72 drivers/net/ethernet/lantiq_etop.c | 21 +++++++++------------ 72 drivers/net/ethernet/lantiq_etop.c | 21 +++++++++------------
73 drivers/net/ethernet/marvell/mv643xx_eth.c | 2 +- 73 drivers/net/ethernet/marvell/mv643xx_eth.c | 2 +-
74 drivers/net/ethernet/marvell/mvneta.c | 6 ++---- 74 drivers/net/ethernet/marvell/mvneta.c | 6 ++----
75 drivers/net/ethernet/marvell/mvpp2.c | 2 +- 75 drivers/net/ethernet/marvell/mvpp2.c | 2 +-
76 drivers/net/ethernet/marvell/pxa168_eth.c | 2 +- 76 drivers/net/ethernet/marvell/pxa168_eth.c | 2 +-
77 drivers/net/ethernet/moxa/moxart_ether.c | 2 +- 77 drivers/net/ethernet/moxa/moxart_ether.c | 2 +-
78 drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 2 +- 78 drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 2 +-
79 drivers/net/ethernet/natsemi/natsemi.c | 2 +- 79 drivers/net/ethernet/natsemi/natsemi.c | 2 +-
80 drivers/net/ethernet/neterion/s2io.c | 4 ++-- 80 drivers/net/ethernet/neterion/s2io.c | 4 ++--
81 drivers/net/ethernet/neterion/vxge/vxge-main.c | 6 +++--- 81 drivers/net/ethernet/neterion/vxge/vxge-main.c | 6 +++---
82 drivers/net/ethernet/nvidia/forcedeth.c | 2 +- 82 drivers/net/ethernet/nvidia/forcedeth.c | 2 +-
83 drivers/net/ethernet/nxp/lpc_eth.c | 2 +- 83 drivers/net/ethernet/nxp/lpc_eth.c | 2 +-
84 .../net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 2 +- 84 .../net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 2 +-
85 drivers/net/ethernet/pasemi/pasemi_mac.c | 2 +- 85 drivers/net/ethernet/pasemi/pasemi_mac.c | 2 +-
86 .../net/ethernet/qlogic/netxen/netxen_nic_main.c | 2 +- 86 .../net/ethernet/qlogic/netxen/netxen_nic_main.c | 2 +-
87 drivers/net/ethernet/qlogic/qede/qede_fp.c | 2 +- 87 drivers/net/ethernet/qlogic/qede/qede_fp.c | 2 +-
88 drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 10 +++++----- 88 drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 10 +++++-----
89 drivers/net/ethernet/qlogic/qlge/qlge_main.c | 2 +- 89 drivers/net/ethernet/qlogic/qlge/qlge_main.c | 2 +-
90 drivers/net/ethernet/qualcomm/emac/emac.c | 2 +- 90 drivers/net/ethernet/qualcomm/emac/emac.c | 2 +-
91 drivers/net/ethernet/realtek/r8169.c | 2 +- 91 drivers/net/ethernet/realtek/r8169.c | 2 +-
92 drivers/net/ethernet/rocker/rocker_main.c | 2 +- 92 drivers/net/ethernet/rocker/rocker_main.c | 2 +-
93 drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 2 +- 93 drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 2 +-
94 drivers/net/ethernet/sfc/efx.c | 2 +- 94 drivers/net/ethernet/sfc/efx.c | 2 +-
95 drivers/net/ethernet/sfc/falcon/efx.c | 2 +- 95 drivers/net/ethernet/sfc/falcon/efx.c | 2 +-
96 drivers/net/ethernet/smsc/smsc9420.c | 2 +- 96 drivers/net/ethernet/smsc/smsc9420.c | 2 +-
97 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +- 97 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
98 drivers/net/ethernet/sun/niu.c | 2 +- 98 drivers/net/ethernet/sun/niu.c | 2 +-
99 drivers/net/ethernet/sun/sungem.c | 2 +- 99 drivers/net/ethernet/sun/sungem.c | 2 +-
100 drivers/net/ethernet/sun/sunvnet_common.c | 2 +- 100 drivers/net/ethernet/sun/sunvnet_common.c | 2 +-
101 drivers/net/ethernet/tehuti/tehuti.c | 2 +- 101 drivers/net/ethernet/tehuti/tehuti.c | 2 +-
102 drivers/net/ethernet/ti/cpsw.c | 2 +- 102 drivers/net/ethernet/ti/cpsw.c | 2 +-
103 drivers/net/ethernet/ti/davinci_emac.c | 2 +- 103 drivers/net/ethernet/ti/davinci_emac.c | 2 +-
104 drivers/net/ethernet/ti/netcp_core.c | 2 +- 104 drivers/net/ethernet/ti/netcp_core.c | 2 +-
105 drivers/net/ethernet/tile/tilegx.c | 2 +- 105 drivers/net/ethernet/tile/tilegx.c | 2 +-
106 drivers/net/ethernet/tile/tilepro.c | 2 +- 106 drivers/net/ethernet/tile/tilepro.c | 2 +-
107 drivers/net/ethernet/toshiba/ps3_gelic_net.c | 2 +- 107 drivers/net/ethernet/toshiba/ps3_gelic_net.c | 2 +-
108 drivers/net/ethernet/toshiba/spider_net.c | 2 +- 108 drivers/net/ethernet/toshiba/spider_net.c | 2 +-
109 drivers/net/ethernet/toshiba/tc35815.c | 2 +- 109 drivers/net/ethernet/toshiba/tc35815.c | 2 +-
110 drivers/net/ethernet/tundra/tsi108_eth.c | 2 +- 110 drivers/net/ethernet/tundra/tsi108_eth.c | 2 +-
111 drivers/net/ethernet/via/via-rhine.c | 2 +- 111 drivers/net/ethernet/via/via-rhine.c | 2 +-
112 drivers/net/ethernet/via/via-velocity.c | 2 +- 112 drivers/net/ethernet/via/via-velocity.c | 2 +-
113 drivers/net/ethernet/wiznet/w5100.c | 2 +- 113 drivers/net/ethernet/wiznet/w5100.c | 2 +-
114 drivers/net/ethernet/wiznet/w5300.c | 2 +- 114 drivers/net/ethernet/wiznet/w5300.c | 2 +-
115 drivers/net/fjes/fjes_main.c | 2 +- 115 drivers/net/fjes/fjes_main.c | 2 +-
116 drivers/net/vmxnet3/vmxnet3_drv.c | 4 ++-- 116 drivers/net/vmxnet3/vmxnet3_drv.c | 4 ++--
117 drivers/net/wan/fsl_ucc_hdlc.c | 2 +- 117 drivers/net/wan/fsl_ucc_hdlc.c | 2 +-
118 drivers/net/wan/hd64572.c | 2 +- 118 drivers/net/wan/hd64572.c | 2 +-
119 drivers/net/wireless/ath/ath10k/pci.c | 2 +- 119 drivers/net/wireless/ath/ath10k/pci.c | 2 +-
120 drivers/net/wireless/ath/wil6210/netdev.c | 2 +- 120 drivers/net/wireless/ath/wil6210/netdev.c | 2 +-
121 drivers/net/xen-netback/interface.c | 2 +- 121 drivers/net/xen-netback/interface.c | 2 +-
122 drivers/net/xen-netfront.c | 2 +- 122 drivers/net/xen-netfront.c | 2 +-
123 drivers/staging/octeon/ethernet-rx.c | 2 +- 123 drivers/staging/octeon/ethernet-rx.c | 2 +-
124 drivers/staging/unisys/visornic/visornic_main.c | 2 +- 124 drivers/staging/unisys/visornic/visornic_main.c | 2 +-
125 109 files changed, 132 insertions(+), 137 deletions(-) 125 109 files changed, 132 insertions(+), 137 deletions(-)
126   126  
127 --- a/drivers/net/can/at91_can.c 127 --- a/drivers/net/can/at91_can.c
128 +++ b/drivers/net/can/at91_can.c 128 +++ b/drivers/net/can/at91_can.c
129 @@ -813,7 +813,7 @@ static int at91_poll(struct napi_struct 129 @@ -813,7 +813,7 @@ static int at91_poll(struct napi_struct
130 u32 reg_ier = AT91_IRQ_ERR_FRAME; 130 u32 reg_ier = AT91_IRQ_ERR_FRAME;
131 reg_ier |= get_irq_mb_rx(priv) & ~AT91_MB_MASK(priv->rx_next); 131 reg_ier |= get_irq_mb_rx(priv) & ~AT91_MB_MASK(priv->rx_next);
132 132
133 - napi_complete(napi); 133 - napi_complete(napi);
134 + napi_complete_done(napi, work_done); 134 + napi_complete_done(napi, work_done);
135 at91_write(priv, AT91_IER, reg_ier); 135 at91_write(priv, AT91_IER, reg_ier);
136 } 136 }
137 137
138 --- a/drivers/net/can/c_can/c_can.c 138 --- a/drivers/net/can/c_can/c_can.c
139 +++ b/drivers/net/can/c_can/c_can.c 139 +++ b/drivers/net/can/c_can/c_can.c
140 @@ -1070,7 +1070,7 @@ static int c_can_poll(struct napi_struct 140 @@ -1070,7 +1070,7 @@ static int c_can_poll(struct napi_struct
141 141
142 end: 142 end:
143 if (work_done < quota) { 143 if (work_done < quota) {
144 - napi_complete(napi); 144 - napi_complete(napi);
145 + napi_complete_done(napi, work_done); 145 + napi_complete_done(napi, work_done);
146 /* enable all IRQs if we are not in bus off state */ 146 /* enable all IRQs if we are not in bus off state */
147 if (priv->can.state != CAN_STATE_BUS_OFF) 147 if (priv->can.state != CAN_STATE_BUS_OFF)
148 c_can_irq_control(priv, true); 148 c_can_irq_control(priv, true);
149 --- a/drivers/net/can/flexcan.c 149 --- a/drivers/net/can/flexcan.c
150 +++ b/drivers/net/can/flexcan.c 150 +++ b/drivers/net/can/flexcan.c
151 @@ -703,7 +703,7 @@ static int flexcan_poll(struct napi_stru 151 @@ -703,7 +703,7 @@ static int flexcan_poll(struct napi_stru
152 work_done += flexcan_poll_bus_err(dev, reg_esr); 152 work_done += flexcan_poll_bus_err(dev, reg_esr);
153 153
154 if (work_done < quota) { 154 if (work_done < quota) {
155 - napi_complete(napi); 155 - napi_complete(napi);
156 + napi_complete_done(napi, work_done); 156 + napi_complete_done(napi, work_done);
157 /* enable IRQs */ 157 /* enable IRQs */
158 flexcan_write(FLEXCAN_IFLAG_DEFAULT, &regs->imask1); 158 flexcan_write(FLEXCAN_IFLAG_DEFAULT, &regs->imask1);
159 flexcan_write(priv->reg_ctrl_default, &regs->ctrl); 159 flexcan_write(priv->reg_ctrl_default, &regs->ctrl);
160 --- a/drivers/net/can/ifi_canfd/ifi_canfd.c 160 --- a/drivers/net/can/ifi_canfd/ifi_canfd.c
161 +++ b/drivers/net/can/ifi_canfd/ifi_canfd.c 161 +++ b/drivers/net/can/ifi_canfd/ifi_canfd.c
162 @@ -589,7 +589,7 @@ static int ifi_canfd_poll(struct napi_st 162 @@ -589,7 +589,7 @@ static int ifi_canfd_poll(struct napi_st
163 work_done += ifi_canfd_do_rx_poll(ndev, quota - work_done); 163 work_done += ifi_canfd_do_rx_poll(ndev, quota - work_done);
164 164
165 if (work_done < quota) { 165 if (work_done < quota) {
166 - napi_complete(napi); 166 - napi_complete(napi);
167 + napi_complete_done(napi, work_done); 167 + napi_complete_done(napi, work_done);
168 ifi_canfd_irq_enable(ndev, 1); 168 ifi_canfd_irq_enable(ndev, 1);
169 } 169 }
170 170
171 --- a/drivers/net/can/janz-ican3.c 171 --- a/drivers/net/can/janz-ican3.c
172 +++ b/drivers/net/can/janz-ican3.c 172 +++ b/drivers/net/can/janz-ican3.c
173 @@ -1475,7 +1475,7 @@ static int ican3_napi(struct napi_struct 173 @@ -1475,7 +1475,7 @@ static int ican3_napi(struct napi_struct
174 /* We have processed all packets that the adapter had, but it 174 /* We have processed all packets that the adapter had, but it
175 * was less than our budget, stop polling */ 175 * was less than our budget, stop polling */
176 if (received < budget) 176 if (received < budget)
177 - napi_complete(napi); 177 - napi_complete(napi);
178 + napi_complete_done(napi, received); 178 + napi_complete_done(napi, received);
179 179
180 spin_lock_irqsave(&mod->lock, flags); 180 spin_lock_irqsave(&mod->lock, flags);
181 181
182 --- a/drivers/net/can/m_can/m_can.c 182 --- a/drivers/net/can/m_can/m_can.c
183 +++ b/drivers/net/can/m_can/m_can.c 183 +++ b/drivers/net/can/m_can/m_can.c
184 @@ -730,7 +730,7 @@ static int m_can_poll(struct napi_struct 184 @@ -730,7 +730,7 @@ static int m_can_poll(struct napi_struct
185 work_done += m_can_do_rx_poll(dev, (quota - work_done)); 185 work_done += m_can_do_rx_poll(dev, (quota - work_done));
186 186
187 if (work_done < quota) { 187 if (work_done < quota) {
188 - napi_complete(napi); 188 - napi_complete(napi);
189 + napi_complete_done(napi, work_done); 189 + napi_complete_done(napi, work_done);
190 m_can_enable_all_interrupts(priv); 190 m_can_enable_all_interrupts(priv);
191 } 191 }
192 192
193 --- a/drivers/net/can/rcar/rcar_can.c 193 --- a/drivers/net/can/rcar/rcar_can.c
194 +++ b/drivers/net/can/rcar/rcar_can.c 194 +++ b/drivers/net/can/rcar/rcar_can.c
195 @@ -698,7 +698,7 @@ static int rcar_can_rx_poll(struct napi_ 195 @@ -695,7 +695,7 @@ static int rcar_can_rx_poll(struct napi_
196 } 196 }
197 /* All packets processed */ 197 /* All packets processed */
198 if (num_pkts < quota) { 198 if (num_pkts < quota) {
199 - napi_complete(napi); 199 - napi_complete(napi);
200 + napi_complete_done(napi, num_pkts); 200 + napi_complete_done(napi, num_pkts);
201 priv->ier |= RCAR_CAN_IER_RXFIE; 201 priv->ier |= RCAR_CAN_IER_RXFIE;
202 writeb(priv->ier, &priv->regs->ier); 202 writeb(priv->ier, &priv->regs->ier);
203 } 203 }
204 --- a/drivers/net/can/rcar/rcar_canfd.c 204 --- a/drivers/net/can/rcar/rcar_canfd.c
205 +++ b/drivers/net/can/rcar/rcar_canfd.c 205 +++ b/drivers/net/can/rcar/rcar_canfd.c
206 @@ -1512,7 +1512,7 @@ static int rcar_canfd_rx_poll(struct nap 206 @@ -1512,7 +1512,7 @@ static int rcar_canfd_rx_poll(struct nap
207 207
208 /* All packets processed */ 208 /* All packets processed */
209 if (num_pkts < quota) { 209 if (num_pkts < quota) {
210 - napi_complete(napi); 210 - napi_complete(napi);
211 + napi_complete_done(napi, num_pkts); 211 + napi_complete_done(napi, num_pkts);
212 /* Enable Rx FIFO interrupts */ 212 /* Enable Rx FIFO interrupts */
213 rcar_canfd_set_bit(priv->base, RCANFD_RFCC(ridx), 213 rcar_canfd_set_bit(priv->base, RCANFD_RFCC(ridx),
214 RCANFD_RFCC_RFIE); 214 RCANFD_RFCC_RFIE);
215 --- a/drivers/net/can/xilinx_can.c 215 --- a/drivers/net/can/xilinx_can.c
216 +++ b/drivers/net/can/xilinx_can.c 216 +++ b/drivers/net/can/xilinx_can.c
217 @@ -838,7 +838,7 @@ static int xcan_rx_poll(struct napi_stru 217 @@ -838,7 +838,7 @@ static int xcan_rx_poll(struct napi_stru
218 } 218 }
219 219
220 if (work_done < quota) { 220 if (work_done < quota) {
221 - napi_complete(napi); 221 - napi_complete(napi);
222 + napi_complete_done(napi, work_done); 222 + napi_complete_done(napi, work_done);
223 ier = priv->read_reg(priv, XCAN_IER_OFFSET); 223 ier = priv->read_reg(priv, XCAN_IER_OFFSET);
224 ier |= XCAN_IXR_RXNEMP_MASK; 224 ier |= XCAN_IXR_RXNEMP_MASK;
225 priv->write_reg(priv, XCAN_IER_OFFSET, ier); 225 priv->write_reg(priv, XCAN_IER_OFFSET, ier);
226 --- a/drivers/net/ethernet/3com/typhoon.c 226 --- a/drivers/net/ethernet/3com/typhoon.c
227 +++ b/drivers/net/ethernet/3com/typhoon.c 227 +++ b/drivers/net/ethernet/3com/typhoon.c
228 @@ -1748,7 +1748,7 @@ typhoon_poll(struct napi_struct *napi, i 228 @@ -1748,7 +1748,7 @@ typhoon_poll(struct napi_struct *napi, i
229 } 229 }
230 230
231 if (work_done < budget) { 231 if (work_done < budget) {
232 - napi_complete(napi); 232 - napi_complete(napi);
233 + napi_complete_done(napi, work_done); 233 + napi_complete_done(napi, work_done);
234 iowrite32(TYPHOON_INTR_NONE, 234 iowrite32(TYPHOON_INTR_NONE,
235 tp->ioaddr + TYPHOON_REG_INTR_MASK); 235 tp->ioaddr + TYPHOON_REG_INTR_MASK);
236 typhoon_post_pci_writes(tp->ioaddr); 236 typhoon_post_pci_writes(tp->ioaddr);
237 --- a/drivers/net/ethernet/adi/bfin_mac.c 237 --- a/drivers/net/ethernet/adi/bfin_mac.c
238 +++ b/drivers/net/ethernet/adi/bfin_mac.c 238 +++ b/drivers/net/ethernet/adi/bfin_mac.c
239 @@ -1274,7 +1274,7 @@ static int bfin_mac_poll(struct napi_str 239 @@ -1274,7 +1274,7 @@ static int bfin_mac_poll(struct napi_str
240 } 240 }
241 241
242 if (i < budget) { 242 if (i < budget) {
243 - napi_complete(napi); 243 - napi_complete(napi);
244 + napi_complete_done(napi, i); 244 + napi_complete_done(napi, i);
245 if (test_and_clear_bit(BFIN_MAC_RX_IRQ_DISABLED, &lp->flags)) 245 if (test_and_clear_bit(BFIN_MAC_RX_IRQ_DISABLED, &lp->flags))
246 enable_irq(IRQ_MAC_RX); 246 enable_irq(IRQ_MAC_RX);
247 } 247 }
248 --- a/drivers/net/ethernet/agere/et131x.c 248 --- a/drivers/net/ethernet/agere/et131x.c
249 +++ b/drivers/net/ethernet/agere/et131x.c 249 +++ b/drivers/net/ethernet/agere/et131x.c
250 @@ -3573,7 +3573,7 @@ static int et131x_poll(struct napi_struc 250 @@ -3573,7 +3573,7 @@ static int et131x_poll(struct napi_struc
251 et131x_handle_send_pkts(adapter); 251 et131x_handle_send_pkts(adapter);
252 252
253 if (work_done < budget) { 253 if (work_done < budget) {
254 - napi_complete(&adapter->napi); 254 - napi_complete(&adapter->napi);
255 + napi_complete_done(&adapter->napi, work_done); 255 + napi_complete_done(&adapter->napi, work_done);
256 et131x_enable_interrupts(adapter); 256 et131x_enable_interrupts(adapter);
257 } 257 }
258 258
259 --- a/drivers/net/ethernet/altera/altera_tse_main.c 259 --- a/drivers/net/ethernet/altera/altera_tse_main.c
260 +++ b/drivers/net/ethernet/altera/altera_tse_main.c 260 +++ b/drivers/net/ethernet/altera/altera_tse_main.c
261 @@ -491,7 +491,7 @@ static int tse_poll(struct napi_struct * 261 @@ -491,7 +491,7 @@ static int tse_poll(struct napi_struct *
262 262
263 if (rxcomplete < budget) { 263 if (rxcomplete < budget) {
264 264
265 - napi_complete(napi); 265 - napi_complete(napi);
266 + napi_complete_done(napi, rxcomplete); 266 + napi_complete_done(napi, rxcomplete);
267 267
268 netdev_dbg(priv->dev, 268 netdev_dbg(priv->dev,
269 "NAPI Complete, did %d packets with budget %d\n", 269 "NAPI Complete, did %d packets with budget %d\n",
270 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c 270 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
271 +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c 271 +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
272 @@ -655,7 +655,7 @@ static int xgene_enet_napi(struct napi_s 272 @@ -658,7 +658,7 @@ static int xgene_enet_napi(struct napi_s
273 processed = xgene_enet_process_ring(ring, budget); 273 processed = xgene_enet_process_ring(ring, budget);
274 274
275 if (processed != budget) { 275 if (processed != budget) {
276 - napi_complete(napi); 276 - napi_complete(napi);
277 + napi_complete_done(napi, processed); 277 + napi_complete_done(napi, processed);
278 enable_irq(ring->irq); 278 enable_irq(ring->irq);
279 } 279 }
280 280
281 --- a/drivers/net/ethernet/arc/emac_main.c 281 --- a/drivers/net/ethernet/arc/emac_main.c
282 +++ b/drivers/net/ethernet/arc/emac_main.c 282 +++ b/drivers/net/ethernet/arc/emac_main.c
283 @@ -284,7 +284,7 @@ static int arc_emac_poll(struct napi_str 283 @@ -284,7 +284,7 @@ static int arc_emac_poll(struct napi_str
284 284
285 work_done = arc_emac_rx(ndev, budget); 285 work_done = arc_emac_rx(ndev, budget);
286 if (work_done < budget) { 286 if (work_done < budget) {
287 - napi_complete(napi); 287 - napi_complete(napi);
288 + napi_complete_done(napi, work_done); 288 + napi_complete_done(napi, work_done);
289 arc_reg_or(priv, R_ENABLE, RXINT_MASK | TXINT_MASK); 289 arc_reg_or(priv, R_ENABLE, RXINT_MASK | TXINT_MASK);
290 } 290 }
291 291
292 --- a/drivers/net/ethernet/atheros/alx/main.c 292 --- a/drivers/net/ethernet/atheros/alx/main.c
293 +++ b/drivers/net/ethernet/atheros/alx/main.c 293 +++ b/drivers/net/ethernet/atheros/alx/main.c
294 @@ -292,7 +292,7 @@ static int alx_poll(struct napi_struct * 294 @@ -292,7 +292,7 @@ static int alx_poll(struct napi_struct *
295 if (!tx_complete || work == budget) 295 if (!tx_complete || work == budget)
296 return budget; 296 return budget;
297 297
298 - napi_complete(&alx->napi); 298 - napi_complete(&alx->napi);
299 + napi_complete_done(&alx->napi, work); 299 + napi_complete_done(&alx->napi, work);
300 300
301 /* enable interrupt */ 301 /* enable interrupt */
302 if (alx->flags & ALX_FLAG_USING_MSIX) { 302 if (alx->flags & ALX_FLAG_USING_MSIX) {
303 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c 303 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
304 +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c 304 +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
305 @@ -1886,7 +1886,7 @@ static int atl1c_clean(struct napi_struc 305 @@ -1885,7 +1885,7 @@ static int atl1c_clean(struct napi_struc
306 306
307 if (work_done < budget) { 307 if (work_done < budget) {
308 quit_polling: 308 quit_polling:
309 - napi_complete(napi); 309 - napi_complete(napi);
310 + napi_complete_done(napi, work_done); 310 + napi_complete_done(napi, work_done);
311 adapter->hw.intr_mask |= ISR_RX_PKT; 311 adapter->hw.intr_mask |= ISR_RX_PKT;
312 AT_WRITE_REG(&adapter->hw, REG_IMR, adapter->hw.intr_mask); 312 AT_WRITE_REG(&adapter->hw, REG_IMR, adapter->hw.intr_mask);
313 } 313 }
314 --- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c 314 --- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
315 +++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c 315 +++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
316 @@ -1532,7 +1532,7 @@ static int atl1e_clean(struct napi_struc 316 @@ -1532,7 +1532,7 @@ static int atl1e_clean(struct napi_struc
317 /* If no Tx and not enough Rx work done, exit the polling mode */ 317 /* If no Tx and not enough Rx work done, exit the polling mode */
318 if (work_done < budget) { 318 if (work_done < budget) {
319 quit_polling: 319 quit_polling:
320 - napi_complete(napi); 320 - napi_complete(napi);
321 + napi_complete_done(napi, work_done); 321 + napi_complete_done(napi, work_done);
322 imr_data = AT_READ_REG(&adapter->hw, REG_IMR); 322 imr_data = AT_READ_REG(&adapter->hw, REG_IMR);
323 AT_WRITE_REG(&adapter->hw, REG_IMR, imr_data | ISR_RX_EVENT); 323 AT_WRITE_REG(&adapter->hw, REG_IMR, imr_data | ISR_RX_EVENT);
324 /* test debug */ 324 /* test debug */
325 --- a/drivers/net/ethernet/atheros/atlx/atl1.c 325 --- a/drivers/net/ethernet/atheros/atlx/atl1.c
326 +++ b/drivers/net/ethernet/atheros/atlx/atl1.c 326 +++ b/drivers/net/ethernet/atheros/atlx/atl1.c
327 @@ -2457,7 +2457,7 @@ static int atl1_rings_clean(struct napi_ 327 @@ -2457,7 +2457,7 @@ static int atl1_rings_clean(struct napi_
328 if (work_done >= budget) 328 if (work_done >= budget)
329 return work_done; 329 return work_done;
330 330
331 - napi_complete(napi); 331 - napi_complete(napi);
332 + napi_complete_done(napi, work_done); 332 + napi_complete_done(napi, work_done);
333 /* re-enable Interrupt */ 333 /* re-enable Interrupt */
334 if (likely(adapter->int_enabled)) 334 if (likely(adapter->int_enabled))
335 atlx_imr_set(adapter, IMR_NORMAL_MASK); 335 atlx_imr_set(adapter, IMR_NORMAL_MASK);
336 --- a/drivers/net/ethernet/broadcom/b44.c 336 --- a/drivers/net/ethernet/broadcom/b44.c
337 +++ b/drivers/net/ethernet/broadcom/b44.c 337 +++ b/drivers/net/ethernet/broadcom/b44.c
338 @@ -902,7 +902,7 @@ static int b44_poll(struct napi_struct * 338 @@ -902,7 +902,7 @@ static int b44_poll(struct napi_struct *
339 } 339 }
340 340
341 if (work_done < budget) { 341 if (work_done < budget) {
342 - napi_complete(napi); 342 - napi_complete(napi);
343 + napi_complete_done(napi, work_done); 343 + napi_complete_done(napi, work_done);
344 b44_enable_ints(bp); 344 b44_enable_ints(bp);
345 } 345 }
346 346
347 --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c 347 --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
348 +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c 348 +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
349 @@ -511,7 +511,7 @@ static int bcm_enet_poll(struct napi_str 349 @@ -511,7 +511,7 @@ static int bcm_enet_poll(struct napi_str
350 350
351 /* no more packet in rx/tx queue, remove device from poll 351 /* no more packet in rx/tx queue, remove device from poll
352 * queue */ 352 * queue */
353 - napi_complete(napi); 353 - napi_complete(napi);
354 + napi_complete_done(napi, rx_work_done); 354 + napi_complete_done(napi, rx_work_done);
355 355
356 /* restore rx/tx interrupt */ 356 /* restore rx/tx interrupt */
357 enet_dmac_writel(priv, priv->dma_chan_int_mask, 357 enet_dmac_writel(priv, priv->dma_chan_int_mask,
358 --- a/drivers/net/ethernet/broadcom/bgmac.c 358 --- a/drivers/net/ethernet/broadcom/bgmac.c
359 +++ b/drivers/net/ethernet/broadcom/bgmac.c 359 +++ b/drivers/net/ethernet/broadcom/bgmac.c
360 @@ -1146,7 +1146,7 @@ static int bgmac_poll(struct napi_struct 360 @@ -1146,7 +1146,7 @@ static int bgmac_poll(struct napi_struct
361 return weight; 361 return weight;
362 362
363 if (handled < weight) { 363 if (handled < weight) {
364 - napi_complete(napi); 364 - napi_complete(napi);
365 + napi_complete_done(napi, handled); 365 + napi_complete_done(napi, handled);
366 bgmac_chip_intrs_on(bgmac); 366 bgmac_chip_intrs_on(bgmac);
367 } 367 }
368 368
369 --- a/drivers/net/ethernet/broadcom/bnx2.c 369 --- a/drivers/net/ethernet/broadcom/bnx2.c
370 +++ b/drivers/net/ethernet/broadcom/bnx2.c 370 +++ b/drivers/net/ethernet/broadcom/bnx2.c
371 @@ -3522,7 +3522,7 @@ static int bnx2_poll_msix(struct napi_st 371 @@ -3522,7 +3522,7 @@ static int bnx2_poll_msix(struct napi_st
372 rmb(); 372 rmb();
373 if (likely(!bnx2_has_fast_work(bnapi))) { 373 if (likely(!bnx2_has_fast_work(bnapi))) {
374 374
375 - napi_complete(napi); 375 - napi_complete(napi);
376 + napi_complete_done(napi, work_done); 376 + napi_complete_done(napi, work_done);
377 BNX2_WR(bp, BNX2_PCICFG_INT_ACK_CMD, bnapi->int_num | 377 BNX2_WR(bp, BNX2_PCICFG_INT_ACK_CMD, bnapi->int_num |
378 BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | 378 BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID |
379 bnapi->last_status_idx); 379 bnapi->last_status_idx);
380 @@ -3559,7 +3559,7 @@ static int bnx2_poll(struct napi_struct 380 @@ -3559,7 +3559,7 @@ static int bnx2_poll(struct napi_struct
381 381
382 rmb(); 382 rmb();
383 if (likely(!bnx2_has_work(bnapi))) { 383 if (likely(!bnx2_has_work(bnapi))) {
384 - napi_complete(napi); 384 - napi_complete(napi);
385 + napi_complete_done(napi, work_done); 385 + napi_complete_done(napi, work_done);
386 if (likely(bp->flags & BNX2_FLAG_USING_MSI_OR_MSIX)) { 386 if (likely(bp->flags & BNX2_FLAG_USING_MSI_OR_MSIX)) {
387 BNX2_WR(bp, BNX2_PCICFG_INT_ACK_CMD, 387 BNX2_WR(bp, BNX2_PCICFG_INT_ACK_CMD,
388 BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | 388 BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID |
389 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c 389 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
390 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c 390 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
391 @@ -3236,7 +3236,7 @@ static int bnx2x_poll(struct napi_struct 391 @@ -3230,7 +3230,7 @@ static int bnx2x_poll(struct napi_struct
392 * has been updated when NAPI was scheduled. 392 * has been updated when NAPI was scheduled.
393 */ 393 */
394 if (IS_FCOE_FP(fp)) { 394 if (IS_FCOE_FP(fp)) {
395 - napi_complete(napi); 395 - napi_complete(napi);
396 + napi_complete_done(napi, rx_work_done); 396 + napi_complete_done(napi, rx_work_done);
397 } else { 397 } else {
398 bnx2x_update_fpsb_idx(fp); 398 bnx2x_update_fpsb_idx(fp);
399 /* bnx2x_has_rx_work() reads the status block, 399 /* bnx2x_has_rx_work() reads the status block,
400 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c 400 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
401 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c 401 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
402 @@ -1781,7 +1781,7 @@ static int bnxt_poll_nitroa0(struct napi 402 @@ -1778,7 +1778,7 @@ static int bnxt_poll_nitroa0(struct napi
403 } 403 }
404 404
405 if (!bnxt_has_work(bp, cpr) && rx_pkts < budget) { 405 if (!bnxt_has_work(bp, cpr) && rx_pkts < budget) {
406 - napi_complete(napi); 406 - napi_complete(napi);
407 + napi_complete_done(napi, rx_pkts); 407 + napi_complete_done(napi, rx_pkts);
408 BNXT_CP_DB_REARM(cpr->cp_doorbell, cpr->cp_raw_cons); 408 BNXT_CP_DB_REARM(cpr->cp_doorbell, cpr->cp_raw_cons);
409 } 409 }
410 return rx_pkts; 410 return rx_pkts;
411 --- a/drivers/net/ethernet/broadcom/sb1250-mac.c 411 --- a/drivers/net/ethernet/broadcom/sb1250-mac.c
412 +++ b/drivers/net/ethernet/broadcom/sb1250-mac.c 412 +++ b/drivers/net/ethernet/broadcom/sb1250-mac.c
413 @@ -2545,7 +2545,7 @@ static int sbmac_poll(struct napi_struct 413 @@ -2545,7 +2545,7 @@ static int sbmac_poll(struct napi_struct
414 sbdma_tx_process(sc, &(sc->sbm_txdma), 1); 414 sbdma_tx_process(sc, &(sc->sbm_txdma), 1);
415 415
416 if (work_done < budget) { 416 if (work_done < budget) {
417 - napi_complete(napi); 417 - napi_complete(napi);
418 + napi_complete_done(napi, work_done); 418 + napi_complete_done(napi, work_done);
419 419
420 #ifdef CONFIG_SBMAC_COALESCE 420 #ifdef CONFIG_SBMAC_COALESCE
421 __raw_writeq(((M_MAC_INT_EOP_COUNT | M_MAC_INT_EOP_TIMER) << S_MAC_TX_CH0) | 421 __raw_writeq(((M_MAC_INT_EOP_COUNT | M_MAC_INT_EOP_TIMER) << S_MAC_TX_CH0) |
422 --- a/drivers/net/ethernet/brocade/bna/bnad.c 422 --- a/drivers/net/ethernet/brocade/bna/bnad.c
423 +++ b/drivers/net/ethernet/brocade/bna/bnad.c 423 +++ b/drivers/net/ethernet/brocade/bna/bnad.c
424 @@ -1881,7 +1881,7 @@ bnad_napi_poll_rx(struct napi_struct *na 424 @@ -1881,7 +1881,7 @@ bnad_napi_poll_rx(struct napi_struct *na
425 return rcvd; 425 return rcvd;
426 426
427 poll_exit: 427 poll_exit:
428 - napi_complete(napi); 428 - napi_complete(napi);
429 + napi_complete_done(napi, rcvd); 429 + napi_complete_done(napi, rcvd);
430 430
431 rx_ctrl->rx_complete++; 431 rx_ctrl->rx_complete++;
432 432
433 --- a/drivers/net/ethernet/cadence/macb.c 433 --- a/drivers/net/ethernet/cadence/macb.c
434 +++ b/drivers/net/ethernet/cadence/macb.c 434 +++ b/drivers/net/ethernet/cadence/macb.c
435 @@ -1069,7 +1069,7 @@ static int macb_poll(struct napi_struct 435 @@ -1069,7 +1069,7 @@ static int macb_poll(struct napi_struct
436 436
437 work_done = bp->macbgem_ops.mog_rx(bp, budget); 437 work_done = bp->macbgem_ops.mog_rx(bp, budget);
438 if (work_done < budget) { 438 if (work_done < budget) {
439 - napi_complete(napi); 439 - napi_complete(napi);
440 + napi_complete_done(napi, work_done); 440 + napi_complete_done(napi, work_done);
441 441
442 /* Packets received while interrupts were disabled */ 442 /* Packets received while interrupts were disabled */
443 status = macb_readl(bp, RSR); 443 status = macb_readl(bp, RSR);
444 --- a/drivers/net/ethernet/calxeda/xgmac.c 444 --- a/drivers/net/ethernet/calxeda/xgmac.c
445 +++ b/drivers/net/ethernet/calxeda/xgmac.c 445 +++ b/drivers/net/ethernet/calxeda/xgmac.c
446 @@ -1247,7 +1247,7 @@ static int xgmac_poll(struct napi_struct 446 @@ -1247,7 +1247,7 @@ static int xgmac_poll(struct napi_struct
447 work_done = xgmac_rx(priv, budget); 447 work_done = xgmac_rx(priv, budget);
448 448
449 if (work_done < budget) { 449 if (work_done < budget) {
450 - napi_complete(napi); 450 - napi_complete(napi);
451 + napi_complete_done(napi, work_done); 451 + napi_complete_done(napi, work_done);
452 __raw_writel(DMA_INTR_DEFAULT_MASK, priv->base + XGMAC_DMA_INTR_ENA); 452 __raw_writel(DMA_INTR_DEFAULT_MASK, priv->base + XGMAC_DMA_INTR_ENA);
453 } 453 }
454 return work_done; 454 return work_done;
455 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c 455 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c
456 +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c 456 +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c
457 @@ -2433,7 +2433,7 @@ static int liquidio_napi_poll(struct nap 457 @@ -2433,7 +2433,7 @@ static int liquidio_napi_poll(struct nap
458 } 458 }
459 459
460 if ((work_done < budget) && (tx_done)) { 460 if ((work_done < budget) && (tx_done)) {
461 - napi_complete(napi); 461 - napi_complete(napi);
462 + napi_complete_done(napi, work_done); 462 + napi_complete_done(napi, work_done);
463 octeon_process_droq_poll_cmd(droq->oct_dev, droq->q_no, 463 octeon_process_droq_poll_cmd(droq->oct_dev, droq->q_no,
464 POLL_EVENT_ENABLE_INTR, 0); 464 POLL_EVENT_ENABLE_INTR, 0);
465 return 0; 465 return 0;
466 --- a/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c 466 --- a/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
467 +++ b/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c 467 +++ b/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
468 @@ -501,7 +501,7 @@ static int octeon_mgmt_napi_poll(struct 468 @@ -501,7 +501,7 @@ static int octeon_mgmt_napi_poll(struct
469 469
470 if (work_done < budget) { 470 if (work_done < budget) {
471 /* We stopped because no more packets were available. */ 471 /* We stopped because no more packets were available. */
472 - napi_complete(napi); 472 - napi_complete(napi);
473 + napi_complete_done(napi, work_done); 473 + napi_complete_done(napi, work_done);
474 octeon_mgmt_enable_rx_irq(p); 474 octeon_mgmt_enable_rx_irq(p);
475 } 475 }
476 octeon_mgmt_update_rx_stats(netdev); 476 octeon_mgmt_update_rx_stats(netdev);
477 --- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c 477 --- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c
478 +++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c 478 +++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
479 @@ -737,7 +737,7 @@ static int nicvf_poll(struct napi_struct 479 @@ -737,7 +737,7 @@ static int nicvf_poll(struct napi_struct
480 480
481 if (work_done < budget) { 481 if (work_done < budget) {
482 /* Slow packet rate, exit polling */ 482 /* Slow packet rate, exit polling */
483 - napi_complete(napi); 483 - napi_complete(napi);
484 + napi_complete_done(napi, work_done); 484 + napi_complete_done(napi, work_done);
485 /* Re-enable interrupts */ 485 /* Re-enable interrupts */
486 cq_head = nicvf_queue_reg_read(nic, NIC_QSET_CQ_0_7_HEAD, 486 cq_head = nicvf_queue_reg_read(nic, NIC_QSET_CQ_0_7_HEAD,
487 cq->cq_idx); 487 cq->cq_idx);
488 --- a/drivers/net/ethernet/chelsio/cxgb/sge.c 488 --- a/drivers/net/ethernet/chelsio/cxgb/sge.c
489 +++ b/drivers/net/ethernet/chelsio/cxgb/sge.c 489 +++ b/drivers/net/ethernet/chelsio/cxgb/sge.c
490 @@ -1605,7 +1605,7 @@ int t1_poll(struct napi_struct *napi, in 490 @@ -1605,7 +1605,7 @@ int t1_poll(struct napi_struct *napi, in
491 int work_done = process_responses(adapter, budget); 491 int work_done = process_responses(adapter, budget);
492 492
493 if (likely(work_done < budget)) { 493 if (likely(work_done < budget)) {
494 - napi_complete(napi); 494 - napi_complete(napi);
495 + napi_complete_done(napi, work_done); 495 + napi_complete_done(napi, work_done);
496 writel(adapter->sge->respQ.cidx, 496 writel(adapter->sge->respQ.cidx,
497 adapter->regs + A_SG_SLEEPING); 497 adapter->regs + A_SG_SLEEPING);
498 } 498 }
499 --- a/drivers/net/ethernet/chelsio/cxgb3/sge.c 499 --- a/drivers/net/ethernet/chelsio/cxgb3/sge.c
500 +++ b/drivers/net/ethernet/chelsio/cxgb3/sge.c 500 +++ b/drivers/net/ethernet/chelsio/cxgb3/sge.c
501 @@ -1843,7 +1843,7 @@ static int ofld_poll(struct napi_struct 501 @@ -1843,7 +1843,7 @@ static int ofld_poll(struct napi_struct
502 __skb_queue_head_init(&queue); 502 __skb_queue_head_init(&queue);
503 skb_queue_splice_init(&q->rx_queue, &queue); 503 skb_queue_splice_init(&q->rx_queue, &queue);
504 if (skb_queue_empty(&queue)) { 504 if (skb_queue_empty(&queue)) {
505 - napi_complete(napi); 505 - napi_complete(napi);
506 + napi_complete_done(napi, work_done); 506 + napi_complete_done(napi, work_done);
507 spin_unlock_irq(&q->lock); 507 spin_unlock_irq(&q->lock);
508 return work_done; 508 return work_done;
509 } 509 }
510 @@ -2414,7 +2414,7 @@ static int napi_rx_handler(struct napi_s 510 @@ -2414,7 +2414,7 @@ static int napi_rx_handler(struct napi_s
511 int work_done = process_responses(adap, qs, budget); 511 int work_done = process_responses(adap, qs, budget);
512 512
513 if (likely(work_done < budget)) { 513 if (likely(work_done < budget)) {
514 - napi_complete(napi); 514 - napi_complete(napi);
515 + napi_complete_done(napi, work_done); 515 + napi_complete_done(napi, work_done);
516 516
517 /* 517 /*
518 * Because we don't atomically flush the following 518 * Because we don't atomically flush the following
519 --- a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c 519 --- a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
520 +++ b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c 520 +++ b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
521 @@ -1889,7 +1889,7 @@ static int napi_rx_handler(struct napi_s 521 @@ -1889,7 +1889,7 @@ static int napi_rx_handler(struct napi_s
522 u32 val; 522 u32 val;
523 523
524 if (likely(work_done < budget)) { 524 if (likely(work_done < budget)) {
525 - napi_complete(napi); 525 - napi_complete(napi);
526 + napi_complete_done(napi, work_done); 526 + napi_complete_done(napi, work_done);
527 intr_params = rspq->next_intr_params; 527 intr_params = rspq->next_intr_params;
528 rspq->next_intr_params = rspq->intr_params; 528 rspq->next_intr_params = rspq->intr_params;
529 } else 529 } else
530 --- a/drivers/net/ethernet/cisco/enic/enic_main.c 530 --- a/drivers/net/ethernet/cisco/enic/enic_main.c
531 +++ b/drivers/net/ethernet/cisco/enic/enic_main.c 531 +++ b/drivers/net/ethernet/cisco/enic/enic_main.c
532 @@ -1339,7 +1339,7 @@ static int enic_poll(struct napi_struct 532 @@ -1339,7 +1339,7 @@ static int enic_poll(struct napi_struct
533 * exit polling 533 * exit polling
534 */ 534 */
535 535
536 - napi_complete(napi); 536 - napi_complete(napi);
537 + napi_complete_done(napi, rq_work_done); 537 + napi_complete_done(napi, rq_work_done);
538 if (enic->rx_coalesce_setting.use_adaptive_rx_coalesce) 538 if (enic->rx_coalesce_setting.use_adaptive_rx_coalesce)
539 enic_set_int_moderation(enic, &enic->rq[0]); 539 enic_set_int_moderation(enic, &enic->rq[0]);
540 vnic_intr_unmask(&enic->intr[intr]); 540 vnic_intr_unmask(&enic->intr[intr]);
541 @@ -1496,7 +1496,7 @@ static int enic_poll_msix_rq(struct napi 541 @@ -1496,7 +1496,7 @@ static int enic_poll_msix_rq(struct napi
542 * exit polling 542 * exit polling
543 */ 543 */
544 544
545 - napi_complete(napi); 545 - napi_complete(napi);
546 + napi_complete_done(napi, work_done); 546 + napi_complete_done(napi, work_done);
547 if (enic->rx_coalesce_setting.use_adaptive_rx_coalesce) 547 if (enic->rx_coalesce_setting.use_adaptive_rx_coalesce)
548 enic_set_int_moderation(enic, &enic->rq[rq]); 548 enic_set_int_moderation(enic, &enic->rq[rq]);
549 vnic_intr_unmask(&enic->intr[intr]); 549 vnic_intr_unmask(&enic->intr[intr]);
550 --- a/drivers/net/ethernet/dec/tulip/interrupt.c 550 --- a/drivers/net/ethernet/dec/tulip/interrupt.c
551 +++ b/drivers/net/ethernet/dec/tulip/interrupt.c 551 +++ b/drivers/net/ethernet/dec/tulip/interrupt.c
552 @@ -319,8 +319,8 @@ int tulip_poll(struct napi_struct *napi, 552 @@ -319,8 +319,8 @@ int tulip_poll(struct napi_struct *napi,
553 553
554 /* Remove us from polling list and enable RX intr. */ 554 /* Remove us from polling list and enable RX intr. */
555 555
556 - napi_complete(napi); 556 - napi_complete(napi);
557 - iowrite32(tulip_tbl[tp->chip_id].valid_intrs, tp->base_addr+CSR7); 557 - iowrite32(tulip_tbl[tp->chip_id].valid_intrs, tp->base_addr+CSR7);
558 + napi_complete_done(napi, work_done); 558 + napi_complete_done(napi, work_done);
559 + iowrite32(tulip_tbl[tp->chip_id].valid_intrs, tp->base_addr+CSR7); 559 + iowrite32(tulip_tbl[tp->chip_id].valid_intrs, tp->base_addr+CSR7);
560 560
561 /* The last op happens after poll completion. Which means the following: 561 /* The last op happens after poll completion. Which means the following:
562 * 1. it can race with disabling irqs in irq handler 562 * 1. it can race with disabling irqs in irq handler
563 @@ -355,7 +355,7 @@ int tulip_poll(struct napi_struct *napi, 563 @@ -355,7 +355,7 @@ int tulip_poll(struct napi_struct *napi,
564 * before we did napi_complete(). See? We would lose it. */ 564 * before we did napi_complete(). See? We would lose it. */
565 565
566 /* remove ourselves from the polling list */ 566 /* remove ourselves from the polling list */
567 - napi_complete(napi); 567 - napi_complete(napi);
568 + napi_complete_done(napi, work_done); 568 + napi_complete_done(napi, work_done);
569 569
570 return work_done; 570 return work_done;
571 } 571 }
572 --- a/drivers/net/ethernet/dnet.c 572 --- a/drivers/net/ethernet/dnet.c
573 +++ b/drivers/net/ethernet/dnet.c 573 +++ b/drivers/net/ethernet/dnet.c
574 @@ -415,7 +415,7 @@ static int dnet_poll(struct napi_struct 574 @@ -415,7 +415,7 @@ static int dnet_poll(struct napi_struct
575 /* We processed all packets available. Tell NAPI it can 575 /* We processed all packets available. Tell NAPI it can
576 * stop polling then re-enable rx interrupts. 576 * stop polling then re-enable rx interrupts.
577 */ 577 */
578 - napi_complete(napi); 578 - napi_complete(napi);
579 + napi_complete_done(napi, npackets); 579 + napi_complete_done(napi, npackets);
580 int_enable = dnet_readl(bp, INTR_ENB); 580 int_enable = dnet_readl(bp, INTR_ENB);
581 int_enable |= DNET_INTR_SRC_RX_CMDFIFOAF; 581 int_enable |= DNET_INTR_SRC_RX_CMDFIFOAF;
582 dnet_writel(bp, int_enable, INTR_ENB); 582 dnet_writel(bp, int_enable, INTR_ENB);
583 --- a/drivers/net/ethernet/emulex/benet/be_main.c 583 --- a/drivers/net/ethernet/emulex/benet/be_main.c
584 +++ b/drivers/net/ethernet/emulex/benet/be_main.c 584 +++ b/drivers/net/ethernet/emulex/benet/be_main.c
585 @@ -3344,7 +3344,7 @@ int be_poll(struct napi_struct *napi, in 585 @@ -3344,7 +3344,7 @@ int be_poll(struct napi_struct *napi, in
586 be_process_mcc(adapter); 586 be_process_mcc(adapter);
587 587
588 if (max_work < budget) { 588 if (max_work < budget) {
589 - napi_complete(napi); 589 - napi_complete(napi);
590 + napi_complete_done(napi, max_work); 590 + napi_complete_done(napi, max_work);
591 591
592 /* Skyhawk EQ_DB has a provision to set the rearm to interrupt 592 /* Skyhawk EQ_DB has a provision to set the rearm to interrupt
593 * delay via a delay multiplier encoding value 593 * delay via a delay multiplier encoding value
594 --- a/drivers/net/ethernet/ethoc.c 594 --- a/drivers/net/ethernet/ethoc.c
595 +++ b/drivers/net/ethernet/ethoc.c 595 +++ b/drivers/net/ethernet/ethoc.c
596 @@ -614,7 +614,7 @@ static int ethoc_poll(struct napi_struct 596 @@ -614,7 +614,7 @@ static int ethoc_poll(struct napi_struct
597 tx_work_done = ethoc_tx(priv->netdev, budget); 597 tx_work_done = ethoc_tx(priv->netdev, budget);
598 598
599 if (rx_work_done < budget && tx_work_done < budget) { 599 if (rx_work_done < budget && tx_work_done < budget) {
600 - napi_complete(napi); 600 - napi_complete(napi);
601 + napi_complete_done(napi, rx_work_done); 601 + napi_complete_done(napi, rx_work_done);
602 ethoc_enable_irq(priv, INT_MASK_TX | INT_MASK_RX); 602 ethoc_enable_irq(priv, INT_MASK_TX | INT_MASK_RX);
603 } 603 }
604 604
605 --- a/drivers/net/ethernet/ezchip/nps_enet.c 605 --- a/drivers/net/ethernet/ezchip/nps_enet.c
606 +++ b/drivers/net/ethernet/ezchip/nps_enet.c 606 +++ b/drivers/net/ethernet/ezchip/nps_enet.c
607 @@ -192,7 +192,7 @@ static int nps_enet_poll(struct napi_str 607 @@ -192,7 +192,7 @@ static int nps_enet_poll(struct napi_str
608 if (work_done < budget) { 608 if (work_done < budget) {
609 u32 buf_int_enable_value = 0; 609 u32 buf_int_enable_value = 0;
610 610
611 - napi_complete(napi); 611 - napi_complete(napi);
612 + napi_complete_done(napi, work_done); 612 + napi_complete_done(napi, work_done);
613 613
614 /* set tx_done and rx_rdy bits */ 614 /* set tx_done and rx_rdy bits */
615 buf_int_enable_value |= NPS_ENET_ENABLE << RX_RDY_SHIFT; 615 buf_int_enable_value |= NPS_ENET_ENABLE << RX_RDY_SHIFT;
616 --- a/drivers/net/ethernet/freescale/fec_main.c 616 --- a/drivers/net/ethernet/freescale/fec_main.c
617 +++ b/drivers/net/ethernet/freescale/fec_main.c 617 +++ b/drivers/net/ethernet/freescale/fec_main.c
618 @@ -1623,7 +1623,7 @@ static int fec_enet_rx_napi(struct napi_ 618 @@ -1623,7 +1623,7 @@ static int fec_enet_rx_napi(struct napi_
619 fec_enet_tx(ndev); 619 fec_enet_tx(ndev);
620 620
621 if (pkts < budget) { 621 if (pkts < budget) {
622 - napi_complete(napi); 622 - napi_complete(napi);
623 + napi_complete_done(napi, pkts); 623 + napi_complete_done(napi, pkts);
624 writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK); 624 writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK);
625 } 625 }
626 return pkts; 626 return pkts;
627 --- a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c 627 --- a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
628 +++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c 628 +++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
629 @@ -301,7 +301,7 @@ static int fs_enet_napi(struct napi_stru 629 @@ -301,7 +301,7 @@ static int fs_enet_napi(struct napi_stru
630 630
631 if (received < budget && tx_left) { 631 if (received < budget && tx_left) {
632 /* done */ 632 /* done */
633 - napi_complete(napi); 633 - napi_complete(napi);
634 + napi_complete_done(napi, received); 634 + napi_complete_done(napi, received);
635 (*fep->ops->napi_enable)(dev); 635 (*fep->ops->napi_enable)(dev);
636 636
637 return received; 637 return received;
638 --- a/drivers/net/ethernet/freescale/gianfar.c 638 --- a/drivers/net/ethernet/freescale/gianfar.c
639 +++ b/drivers/net/ethernet/freescale/gianfar.c 639 +++ b/drivers/net/ethernet/freescale/gianfar.c
640 @@ -3197,7 +3197,7 @@ static int gfar_poll_rx_sq(struct napi_s 640 @@ -3197,7 +3197,7 @@ static int gfar_poll_rx_sq(struct napi_s
641 641
642 if (work_done < budget) { 642 if (work_done < budget) {
643 u32 imask; 643 u32 imask;
644 - napi_complete(napi); 644 - napi_complete(napi);
645 + napi_complete_done(napi, work_done); 645 + napi_complete_done(napi, work_done);
646 /* Clear the halt bit in RSTAT */ 646 /* Clear the halt bit in RSTAT */
647 gfar_write(&regs->rstat, gfargrp->rstat); 647 gfar_write(&regs->rstat, gfargrp->rstat);
648 648
649 @@ -3286,7 +3286,7 @@ static int gfar_poll_rx(struct napi_stru 649 @@ -3286,7 +3286,7 @@ static int gfar_poll_rx(struct napi_stru
650 650
651 if (!num_act_queues) { 651 if (!num_act_queues) {
652 u32 imask; 652 u32 imask;
653 - napi_complete(napi); 653 - napi_complete(napi);
654 + napi_complete_done(napi, work_done); 654 + napi_complete_done(napi, work_done);
655 655
656 /* Clear the halt bit in RSTAT */ 656 /* Clear the halt bit in RSTAT */
657 gfar_write(&regs->rstat, gfargrp->rstat); 657 gfar_write(&regs->rstat, gfargrp->rstat);
658 --- a/drivers/net/ethernet/freescale/ucc_geth.c 658 --- a/drivers/net/ethernet/freescale/ucc_geth.c
659 +++ b/drivers/net/ethernet/freescale/ucc_geth.c 659 +++ b/drivers/net/ethernet/freescale/ucc_geth.c
660 @@ -3303,7 +3303,7 @@ static int ucc_geth_poll(struct napi_str 660 @@ -3301,7 +3301,7 @@ static int ucc_geth_poll(struct napi_str
661 howmany += ucc_geth_rx(ugeth, i, budget - howmany); 661 howmany += ucc_geth_rx(ugeth, i, budget - howmany);
662 662
663 if (howmany < budget) { 663 if (howmany < budget) {
664 - napi_complete(napi); 664 - napi_complete(napi);
665 + napi_complete_done(napi, howmany); 665 + napi_complete_done(napi, howmany);
666 setbits32(ugeth->uccf->p_uccm, UCCE_RX_EVENTS | UCCE_TX_EVENTS); 666 setbits32(ugeth->uccf->p_uccm, UCCE_RX_EVENTS | UCCE_TX_EVENTS);
667 } 667 }
668 668
669 --- a/drivers/net/ethernet/hisilicon/hip04_eth.c 669 --- a/drivers/net/ethernet/hisilicon/hip04_eth.c
670 +++ b/drivers/net/ethernet/hisilicon/hip04_eth.c 670 +++ b/drivers/net/ethernet/hisilicon/hip04_eth.c
671 @@ -555,7 +555,7 @@ refill: 671 @@ -555,7 +555,7 @@ refill:
672 priv->reg_inten |= RCV_INT; 672 priv->reg_inten |= RCV_INT;
673 writel_relaxed(priv->reg_inten, priv->base + PPE_INTEN); 673 writel_relaxed(priv->reg_inten, priv->base + PPE_INTEN);
674 } 674 }
675 - napi_complete(napi); 675 - napi_complete(napi);
676 + napi_complete_done(napi, rx); 676 + napi_complete_done(napi, rx);
677 done: 677 done:
678 /* clean up tx descriptors and start a new timer if necessary */ 678 /* clean up tx descriptors and start a new timer if necessary */
679 tx_remaining = hip04_tx_reclaim(ndev, false); 679 tx_remaining = hip04_tx_reclaim(ndev, false);
680 --- a/drivers/net/ethernet/hisilicon/hisi_femac.c 680 --- a/drivers/net/ethernet/hisilicon/hisi_femac.c
681 +++ b/drivers/net/ethernet/hisilicon/hisi_femac.c 681 +++ b/drivers/net/ethernet/hisilicon/hisi_femac.c
682 @@ -330,7 +330,7 @@ static int hisi_femac_poll(struct napi_s 682 @@ -330,7 +330,7 @@ static int hisi_femac_poll(struct napi_s
683 } while (ints & DEF_INT_MASK); 683 } while (ints & DEF_INT_MASK);
684 684
685 if (work_done < budget) { 685 if (work_done < budget) {
686 - napi_complete(napi); 686 - napi_complete(napi);
687 + napi_complete_done(napi, work_done); 687 + napi_complete_done(napi, work_done);
688 hisi_femac_irq_enable(priv, DEF_INT_MASK & 688 hisi_femac_irq_enable(priv, DEF_INT_MASK &
689 (~IRQ_INT_TX_PER_PACKET)); 689 (~IRQ_INT_TX_PER_PACKET));
690 } 690 }
691 --- a/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c 691 --- a/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
692 +++ b/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c 692 +++ b/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
693 @@ -578,7 +578,7 @@ static int hix5hd2_poll(struct napi_stru 693 @@ -578,7 +578,7 @@ static int hix5hd2_poll(struct napi_stru
694 } while (ints & DEF_INT_MASK); 694 } while (ints & DEF_INT_MASK);
695 695
696 if (work_done < budget) { 696 if (work_done < budget) {
697 - napi_complete(napi); 697 - napi_complete(napi);
698 + napi_complete_done(napi, work_done); 698 + napi_complete_done(napi, work_done);
699 hix5hd2_irq_enable(priv); 699 hix5hd2_irq_enable(priv);
700 } 700 }
701 701
702 --- a/drivers/net/ethernet/ibm/ibmveth.c 702 --- a/drivers/net/ethernet/ibm/ibmveth.c
703 +++ b/drivers/net/ethernet/ibm/ibmveth.c 703 +++ b/drivers/net/ethernet/ibm/ibmveth.c
704 @@ -1324,7 +1324,7 @@ restart_poll: 704 @@ -1320,7 +1320,7 @@ restart_poll:
705 ibmveth_replenish_task(adapter); 705 ibmveth_replenish_task(adapter);
706 706
707 if (frames_processed < budget) { 707 if (frames_processed < budget) {
708 - napi_complete(napi); 708 - napi_complete(napi);
709 + napi_complete_done(napi, frames_processed); 709 + napi_complete_done(napi, frames_processed);
710 710
711 /* We think we are done - reenable interrupts, 711 /* We think we are done - reenable interrupts,
712 * then check once more to make sure we are done. 712 * then check once more to make sure we are done.
713 --- a/drivers/net/ethernet/ibm/ibmvnic.c 713 --- a/drivers/net/ethernet/ibm/ibmvnic.c
714 +++ b/drivers/net/ethernet/ibm/ibmvnic.c 714 +++ b/drivers/net/ethernet/ibm/ibmvnic.c
715 @@ -1028,7 +1028,7 @@ restart_poll: 715 @@ -1028,7 +1028,7 @@ restart_poll:
716 716
717 if (frames_processed < budget) { 717 if (frames_processed < budget) {
718 enable_scrq_irq(adapter, adapter->rx_scrq[scrq_num]); 718 enable_scrq_irq(adapter, adapter->rx_scrq[scrq_num]);
719 - napi_complete(napi); 719 - napi_complete(napi);
720 + napi_complete_done(napi, frames_processed); 720 + napi_complete_done(napi, frames_processed);
721 if (pending_scrq(adapter, adapter->rx_scrq[scrq_num]) && 721 if (pending_scrq(adapter, adapter->rx_scrq[scrq_num]) &&
722 napi_reschedule(napi)) { 722 napi_reschedule(napi)) {
723 disable_scrq_irq(adapter, adapter->rx_scrq[scrq_num]); 723 disable_scrq_irq(adapter, adapter->rx_scrq[scrq_num]);
724 --- a/drivers/net/ethernet/intel/e100.c 724 --- a/drivers/net/ethernet/intel/e100.c
725 +++ b/drivers/net/ethernet/intel/e100.c 725 +++ b/drivers/net/ethernet/intel/e100.c
726 @@ -2253,7 +2253,7 @@ static int e100_poll(struct napi_struct 726 @@ -2253,7 +2253,7 @@ static int e100_poll(struct napi_struct
727 727
728 /* If budget not fully consumed, exit the polling mode */ 728 /* If budget not fully consumed, exit the polling mode */
729 if (work_done < budget) { 729 if (work_done < budget) {
730 - napi_complete(napi); 730 - napi_complete(napi);
731 + napi_complete_done(napi, work_done); 731 + napi_complete_done(napi, work_done);
732 e100_enable_irq(nic); 732 e100_enable_irq(nic);
733 } 733 }
734 734
735 --- a/drivers/net/ethernet/intel/ixgb/ixgb_main.c 735 --- a/drivers/net/ethernet/intel/ixgb/ixgb_main.c
736 +++ b/drivers/net/ethernet/intel/ixgb/ixgb_main.c 736 +++ b/drivers/net/ethernet/intel/ixgb/ixgb_main.c
737 @@ -1825,7 +1825,7 @@ ixgb_clean(struct napi_struct *napi, int 737 @@ -1825,7 +1825,7 @@ ixgb_clean(struct napi_struct *napi, int
738 738
739 /* If budget not fully consumed, exit the polling mode */ 739 /* If budget not fully consumed, exit the polling mode */
740 if (work_done < budget) { 740 if (work_done < budget) {
741 - napi_complete(napi); 741 - napi_complete(napi);
742 + napi_complete_done(napi, work_done); 742 + napi_complete_done(napi, work_done);
743 if (!test_bit(__IXGB_DOWN, &adapter->flags)) 743 if (!test_bit(__IXGB_DOWN, &adapter->flags))
744 ixgb_irq_enable(adapter); 744 ixgb_irq_enable(adapter);
745 } 745 }
746 --- a/drivers/net/ethernet/korina.c 746 --- a/drivers/net/ethernet/korina.c
747 +++ b/drivers/net/ethernet/korina.c 747 +++ b/drivers/net/ethernet/korina.c
748 @@ -464,7 +464,7 @@ static int korina_poll(struct napi_struc 748 @@ -464,7 +464,7 @@ static int korina_poll(struct napi_struc
749 749
750 work_done = korina_rx(dev, budget); 750 work_done = korina_rx(dev, budget);
751 if (work_done < budget) { 751 if (work_done < budget) {
752 - napi_complete(napi); 752 - napi_complete(napi);
753 + napi_complete_done(napi, work_done); 753 + napi_complete_done(napi, work_done);
754 754
755 writel(readl(&lp->rx_dma_regs->dmasm) & 755 writel(readl(&lp->rx_dma_regs->dmasm) &
756 ~(DMA_STAT_DONE | DMA_STAT_HALT | DMA_STAT_ERR), 756 ~(DMA_STAT_DONE | DMA_STAT_HALT | DMA_STAT_ERR),
757 --- a/drivers/net/ethernet/lantiq_etop.c 757 --- a/drivers/net/ethernet/lantiq_etop.c
758 +++ b/drivers/net/ethernet/lantiq_etop.c 758 +++ b/drivers/net/ethernet/lantiq_etop.c
759 @@ -156,24 +156,21 @@ ltq_etop_poll_rx(struct napi_struct *nap 759 @@ -156,24 +156,21 @@ ltq_etop_poll_rx(struct napi_struct *nap
760 { 760 {
761 struct ltq_etop_chan *ch = container_of(napi, 761 struct ltq_etop_chan *ch = container_of(napi,
762 struct ltq_etop_chan, napi); 762 struct ltq_etop_chan, napi);
763 - int rx = 0; 763 - int rx = 0;
764 - int complete = 0; 764 - int complete = 0;
765 + int work_done = 0; 765 + int work_done = 0;
766 766
767 - while ((rx < budget) && !complete) { 767 - while ((rx < budget) && !complete) {
768 + while (work_done < budget) { 768 + while (work_done < budget) {
769 struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->dma.desc]; 769 struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->dma.desc];
770 770
771 - if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) == LTQ_DMA_C) { 771 - if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) == LTQ_DMA_C) {
772 - ltq_etop_hw_receive(ch); 772 - ltq_etop_hw_receive(ch);
773 - rx++; 773 - rx++;
774 - } else { 774 - } else {
775 - complete = 1; 775 - complete = 1;
776 - } 776 - }
777 + if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) != LTQ_DMA_C) 777 + if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) != LTQ_DMA_C)
778 + break; 778 + break;
779 + ltq_etop_hw_receive(ch); 779 + ltq_etop_hw_receive(ch);
780 + work_done++; 780 + work_done++;
781 } 781 }
782 - if (complete || !rx) { 782 - if (complete || !rx) {
783 - napi_complete(&ch->napi); 783 - napi_complete(&ch->napi);
784 + if (work_done < budget) { 784 + if (work_done < budget) {
785 + napi_complete_done(&ch->napi, work_done); 785 + napi_complete_done(&ch->napi, work_done);
786 ltq_dma_ack_irq(&ch->dma); 786 ltq_dma_ack_irq(&ch->dma);
787 } 787 }
788 - return rx; 788 - return rx;
789 + return work_done; 789 + return work_done;
790 } 790 }
791 791
792 static int 792 static int
793 --- a/drivers/net/ethernet/marvell/mv643xx_eth.c 793 --- a/drivers/net/ethernet/marvell/mv643xx_eth.c
794 +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c 794 +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
795 @@ -2312,7 +2312,7 @@ static int mv643xx_eth_poll(struct napi_ 795 @@ -2312,7 +2312,7 @@ static int mv643xx_eth_poll(struct napi_
796 if (work_done < budget) { 796 if (work_done < budget) {
797 if (mp->oom) 797 if (mp->oom)
798 mod_timer(&mp->rx_oom, jiffies + (HZ / 10)); 798 mod_timer(&mp->rx_oom, jiffies + (HZ / 10));
799 - napi_complete(napi); 799 - napi_complete(napi);
800 + napi_complete_done(napi, work_done); 800 + napi_complete_done(napi, work_done);
801 wrlp(mp, INT_MASK, mp->int_mask); 801 wrlp(mp, INT_MASK, mp->int_mask);
802 } 802 }
803 803
804 --- a/drivers/net/ethernet/marvell/mvneta.c 804 --- a/drivers/net/ethernet/marvell/mvneta.c
805 +++ b/drivers/net/ethernet/marvell/mvneta.c 805 +++ b/drivers/net/ethernet/marvell/mvneta.c
806 @@ -2702,11 +2702,9 @@ static int mvneta_poll(struct napi_struc 806 @@ -2702,11 +2702,9 @@ static int mvneta_poll(struct napi_struc
807 rx_done = mvneta_rx_swbm(pp, budget, &pp->rxqs[rx_queue]); 807 rx_done = mvneta_rx_swbm(pp, budget, &pp->rxqs[rx_queue]);
808 } 808 }
809 809
810 - budget -= rx_done; 810 - budget -= rx_done;
811 - 811 -
812 - if (budget > 0) { 812 - if (budget > 0) {
813 + if (rx_done < budget) { 813 + if (rx_done < budget) {
814 cause_rx_tx = 0; 814 cause_rx_tx = 0;
815 - napi_complete(&port->napi); 815 - napi_complete(&port->napi);
816 + napi_complete_done(&port->napi, rx_done); 816 + napi_complete_done(&port->napi, rx_done);
817 enable_percpu_irq(pp->dev->irq, 0); 817 enable_percpu_irq(pp->dev->irq, 0);
818 } 818 }
819 819
820 --- a/drivers/net/ethernet/marvell/mvpp2.c 820 --- a/drivers/net/ethernet/marvell/mvpp2.c
821 +++ b/drivers/net/ethernet/marvell/mvpp2.c 821 +++ b/drivers/net/ethernet/marvell/mvpp2.c
822 @@ -5406,7 +5406,7 @@ static int mvpp2_poll(struct napi_struct 822 @@ -5404,7 +5404,7 @@ static int mvpp2_poll(struct napi_struct
823 823
824 if (budget > 0) { 824 if (budget > 0) {
825 cause_rx = 0; 825 cause_rx = 0;
826 - napi_complete(napi); 826 - napi_complete(napi);
827 + napi_complete_done(napi, rx_done); 827 + napi_complete_done(napi, rx_done);
828 828
829 mvpp2_interrupts_enable(port); 829 mvpp2_interrupts_enable(port);
830 } 830 }
831 --- a/drivers/net/ethernet/marvell/pxa168_eth.c 831 --- a/drivers/net/ethernet/marvell/pxa168_eth.c
832 +++ b/drivers/net/ethernet/marvell/pxa168_eth.c 832 +++ b/drivers/net/ethernet/marvell/pxa168_eth.c
833 @@ -1264,7 +1264,7 @@ static int pxa168_rx_poll(struct napi_st 833 @@ -1264,7 +1264,7 @@ static int pxa168_rx_poll(struct napi_st
834 } 834 }
835 work_done = rxq_process(dev, budget); 835 work_done = rxq_process(dev, budget);
836 if (work_done < budget) { 836 if (work_done < budget) {
837 - napi_complete(napi); 837 - napi_complete(napi);
838 + napi_complete_done(napi, work_done); 838 + napi_complete_done(napi, work_done);
839 wrl(pep, INT_MASK, ALL_INTS); 839 wrl(pep, INT_MASK, ALL_INTS);
840 } 840 }
841 841
842 --- a/drivers/net/ethernet/moxa/moxart_ether.c 842 --- a/drivers/net/ethernet/moxa/moxart_ether.c
843 +++ b/drivers/net/ethernet/moxa/moxart_ether.c 843 +++ b/drivers/net/ethernet/moxa/moxart_ether.c
844 @@ -270,7 +270,7 @@ rx_next: 844 @@ -270,7 +270,7 @@ rx_next:
845 } 845 }
846 846
847 if (rx < budget) { 847 if (rx < budget) {
848 - napi_complete(napi); 848 - napi_complete(napi);
849 + napi_complete_done(napi, rx); 849 + napi_complete_done(napi, rx);
850 } 850 }
851 851
852 priv->reg_imr |= RPKT_FINISH_M; 852 priv->reg_imr |= RPKT_FINISH_M;
853 --- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c 853 --- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
854 +++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c 854 +++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
855 @@ -1678,7 +1678,7 @@ static int myri10ge_poll(struct napi_str 855 @@ -1678,7 +1678,7 @@ static int myri10ge_poll(struct napi_str
856 856
857 myri10ge_ss_unlock_napi(ss); 857 myri10ge_ss_unlock_napi(ss);
858 if (work_done < budget) { 858 if (work_done < budget) {
859 - napi_complete(napi); 859 - napi_complete(napi);
860 + napi_complete_done(napi, work_done); 860 + napi_complete_done(napi, work_done);
861 put_be32(htonl(3), ss->irq_claim); 861 put_be32(htonl(3), ss->irq_claim);
862 } 862 }
863 return work_done; 863 return work_done;
864 --- a/drivers/net/ethernet/natsemi/natsemi.c 864 --- a/drivers/net/ethernet/natsemi/natsemi.c
865 +++ b/drivers/net/ethernet/natsemi/natsemi.c 865 +++ b/drivers/net/ethernet/natsemi/natsemi.c
866 @@ -2261,7 +2261,7 @@ static int natsemi_poll(struct napi_stru 866 @@ -2261,7 +2261,7 @@ static int natsemi_poll(struct napi_stru
867 np->intr_status = readl(ioaddr + IntrStatus); 867 np->intr_status = readl(ioaddr + IntrStatus);
868 } while (np->intr_status); 868 } while (np->intr_status);
869 869
870 - napi_complete(napi); 870 - napi_complete(napi);
871 + napi_complete_done(napi, work_done); 871 + napi_complete_done(napi, work_done);
872 872
873 /* Reenable interrupts providing nothing is trying to shut 873 /* Reenable interrupts providing nothing is trying to shut
874 * the chip down. */ 874 * the chip down. */
875 --- a/drivers/net/ethernet/neterion/s2io.c 875 --- a/drivers/net/ethernet/neterion/s2io.c
876 +++ b/drivers/net/ethernet/neterion/s2io.c 876 +++ b/drivers/net/ethernet/neterion/s2io.c
877 @@ -2783,7 +2783,7 @@ static int s2io_poll_msix(struct napi_st 877 @@ -2783,7 +2783,7 @@ static int s2io_poll_msix(struct napi_st
878 s2io_chk_rx_buffers(nic, ring); 878 s2io_chk_rx_buffers(nic, ring);
879 879
880 if (pkts_processed < budget_org) { 880 if (pkts_processed < budget_org) {
881 - napi_complete(napi); 881 - napi_complete(napi);
882 + napi_complete_done(napi, pkts_processed); 882 + napi_complete_done(napi, pkts_processed);
883 /*Re Enable MSI-Rx Vector*/ 883 /*Re Enable MSI-Rx Vector*/
884 addr = (u8 __iomem *)&bar0->xmsi_mask_reg; 884 addr = (u8 __iomem *)&bar0->xmsi_mask_reg;
885 addr += 7 - ring->ring_no; 885 addr += 7 - ring->ring_no;
886 @@ -2817,7 +2817,7 @@ static int s2io_poll_inta(struct napi_st 886 @@ -2817,7 +2817,7 @@ static int s2io_poll_inta(struct napi_st
887 break; 887 break;
888 } 888 }
889 if (pkts_processed < budget_org) { 889 if (pkts_processed < budget_org) {
890 - napi_complete(napi); 890 - napi_complete(napi);
891 + napi_complete_done(napi, pkts_processed); 891 + napi_complete_done(napi, pkts_processed);
892 /* Re enable the Rx interrupts for the ring */ 892 /* Re enable the Rx interrupts for the ring */
893 writeq(0, &bar0->rx_traffic_mask); 893 writeq(0, &bar0->rx_traffic_mask);
894 readl(&bar0->rx_traffic_mask); 894 readl(&bar0->rx_traffic_mask);
895 --- a/drivers/net/ethernet/neterion/vxge/vxge-main.c 895 --- a/drivers/net/ethernet/neterion/vxge/vxge-main.c
896 +++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c 896 +++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c
897 @@ -1823,8 +1823,8 @@ static int vxge_poll_msix(struct napi_st 897 @@ -1823,8 +1823,8 @@ static int vxge_poll_msix(struct napi_st
898 vxge_hw_vpath_poll_rx(ring->handle); 898 vxge_hw_vpath_poll_rx(ring->handle);
899 pkts_processed = ring->pkts_processed; 899 pkts_processed = ring->pkts_processed;
900 900
901 - if (ring->pkts_processed < budget_org) { 901 - if (ring->pkts_processed < budget_org) {
902 - napi_complete(napi); 902 - napi_complete(napi);
903 + if (pkts_processed < budget_org) { 903 + if (pkts_processed < budget_org) {
904 + napi_complete_done(napi, pkts_processed); 904 + napi_complete_done(napi, pkts_processed);
905 905
906 /* Re enable the Rx interrupts for the vpath */ 906 /* Re enable the Rx interrupts for the vpath */
907 vxge_hw_channel_msix_unmask( 907 vxge_hw_channel_msix_unmask(
908 @@ -1863,7 +1863,7 @@ static int vxge_poll_inta(struct napi_st 908 @@ -1863,7 +1863,7 @@ static int vxge_poll_inta(struct napi_st
909 VXGE_COMPLETE_ALL_TX(vdev); 909 VXGE_COMPLETE_ALL_TX(vdev);
910 910
911 if (pkts_processed < budget_org) { 911 if (pkts_processed < budget_org) {
912 - napi_complete(napi); 912 - napi_complete(napi);
913 + napi_complete_done(napi, pkts_processed); 913 + napi_complete_done(napi, pkts_processed);
914 /* Re enable the Rx interrupts for the ring */ 914 /* Re enable the Rx interrupts for the ring */
915 vxge_hw_device_unmask_all(hldev); 915 vxge_hw_device_unmask_all(hldev);
916 vxge_hw_device_flush_io(hldev); 916 vxge_hw_device_flush_io(hldev);
917 --- a/drivers/net/ethernet/nvidia/forcedeth.c 917 --- a/drivers/net/ethernet/nvidia/forcedeth.c
918 +++ b/drivers/net/ethernet/nvidia/forcedeth.c 918 +++ b/drivers/net/ethernet/nvidia/forcedeth.c
919 @@ -3756,7 +3756,7 @@ static int nv_napi_poll(struct napi_stru 919 @@ -3756,7 +3756,7 @@ static int nv_napi_poll(struct napi_stru
920 if (rx_work < budget) { 920 if (rx_work < budget) {
921 /* re-enable interrupts 921 /* re-enable interrupts
922 (msix not enabled in napi) */ 922 (msix not enabled in napi) */
923 - napi_complete(napi); 923 - napi_complete(napi);
924 + napi_complete_done(napi, rx_work); 924 + napi_complete_done(napi, rx_work);
925 925
926 writel(np->irqmask, base + NvRegIrqMask); 926 writel(np->irqmask, base + NvRegIrqMask);
927 } 927 }
928 --- a/drivers/net/ethernet/nxp/lpc_eth.c 928 --- a/drivers/net/ethernet/nxp/lpc_eth.c
929 +++ b/drivers/net/ethernet/nxp/lpc_eth.c 929 +++ b/drivers/net/ethernet/nxp/lpc_eth.c
930 @@ -999,7 +999,7 @@ static int lpc_eth_poll(struct napi_stru 930 @@ -999,7 +999,7 @@ static int lpc_eth_poll(struct napi_stru
931 rx_done = __lpc_handle_recv(ndev, budget); 931 rx_done = __lpc_handle_recv(ndev, budget);
932 932
933 if (rx_done < budget) { 933 if (rx_done < budget) {
934 - napi_complete(napi); 934 - napi_complete(napi);
935 + napi_complete_done(napi, rx_done); 935 + napi_complete_done(napi, rx_done);
936 lpc_eth_enable_int(pldat->net_base); 936 lpc_eth_enable_int(pldat->net_base);
937 } 937 }
938 938
939 --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c 939 --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
940 +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c 940 +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
941 @@ -2391,7 +2391,7 @@ static int pch_gbe_napi_poll(struct napi 941 @@ -2391,7 +2391,7 @@ static int pch_gbe_napi_poll(struct napi
942 poll_end_flag = true; 942 poll_end_flag = true;
943 943
944 if (poll_end_flag) { 944 if (poll_end_flag) {
945 - napi_complete(napi); 945 - napi_complete(napi);
946 + napi_complete_done(napi, work_done); 946 + napi_complete_done(napi, work_done);
947 pch_gbe_irq_enable(adapter); 947 pch_gbe_irq_enable(adapter);
948 } 948 }
949 949
950 --- a/drivers/net/ethernet/pasemi/pasemi_mac.c 950 --- a/drivers/net/ethernet/pasemi/pasemi_mac.c
951 +++ b/drivers/net/ethernet/pasemi/pasemi_mac.c 951 +++ b/drivers/net/ethernet/pasemi/pasemi_mac.c
952 @@ -1575,7 +1575,7 @@ static int pasemi_mac_poll(struct napi_s 952 @@ -1575,7 +1575,7 @@ static int pasemi_mac_poll(struct napi_s
953 pkts = pasemi_mac_clean_rx(rx_ring(mac), budget); 953 pkts = pasemi_mac_clean_rx(rx_ring(mac), budget);
954 if (pkts < budget) { 954 if (pkts < budget) {
955 /* all done, no more packets present */ 955 /* all done, no more packets present */
956 - napi_complete(napi); 956 - napi_complete(napi);
957 + napi_complete_done(napi, pkts); 957 + napi_complete_done(napi, pkts);
958 958
959 pasemi_mac_restart_rx_intr(mac); 959 pasemi_mac_restart_rx_intr(mac);
960 pasemi_mac_restart_tx_intr(mac); 960 pasemi_mac_restart_tx_intr(mac);
961 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c 961 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
962 +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c 962 +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
963 @@ -2391,7 +2391,7 @@ static int netxen_nic_poll(struct napi_s 963 @@ -2391,7 +2391,7 @@ static int netxen_nic_poll(struct napi_s
964 work_done = budget; 964 work_done = budget;
965 965
966 if (work_done < budget) { 966 if (work_done < budget) {
967 - napi_complete(&sds_ring->napi); 967 - napi_complete(&sds_ring->napi);
968 + napi_complete_done(&sds_ring->napi, work_done); 968 + napi_complete_done(&sds_ring->napi, work_done);
969 if (test_bit(__NX_DEV_UP, &adapter->state)) 969 if (test_bit(__NX_DEV_UP, &adapter->state))
970 netxen_nic_enable_int(sds_ring); 970 netxen_nic_enable_int(sds_ring);
971 } 971 }
972 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c 972 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
973 +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c 973 +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
974 @@ -975,7 +975,7 @@ static int qlcnic_poll(struct napi_struc 974 @@ -975,7 +975,7 @@ static int qlcnic_poll(struct napi_struc
975 work_done = budget; 975 work_done = budget;
976 976
977 if (work_done < budget) { 977 if (work_done < budget) {
978 - napi_complete(&sds_ring->napi); 978 - napi_complete(&sds_ring->napi);
979 + napi_complete_done(&sds_ring->napi, work_done); 979 + napi_complete_done(&sds_ring->napi, work_done);
980 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) { 980 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) {
981 qlcnic_enable_sds_intr(adapter, sds_ring); 981 qlcnic_enable_sds_intr(adapter, sds_ring);
982 qlcnic_enable_tx_intr(adapter, tx_ring); 982 qlcnic_enable_tx_intr(adapter, tx_ring);
983 @@ -1019,7 +1019,7 @@ static int qlcnic_rx_poll(struct napi_st 983 @@ -1019,7 +1019,7 @@ static int qlcnic_rx_poll(struct napi_st
984 work_done = qlcnic_process_rcv_ring(sds_ring, budget); 984 work_done = qlcnic_process_rcv_ring(sds_ring, budget);
985 985
986 if (work_done < budget) { 986 if (work_done < budget) {
987 - napi_complete(&sds_ring->napi); 987 - napi_complete(&sds_ring->napi);
988 + napi_complete_done(&sds_ring->napi, work_done); 988 + napi_complete_done(&sds_ring->napi, work_done);
989 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) 989 if (test_bit(__QLCNIC_DEV_UP, &adapter->state))
990 qlcnic_enable_sds_intr(adapter, sds_ring); 990 qlcnic_enable_sds_intr(adapter, sds_ring);
991 } 991 }
992 @@ -1966,7 +1966,7 @@ static int qlcnic_83xx_msix_sriov_vf_pol 992 @@ -1966,7 +1966,7 @@ static int qlcnic_83xx_msix_sriov_vf_pol
993 work_done = budget; 993 work_done = budget;
994 994
995 if (work_done < budget) { 995 if (work_done < budget) {
996 - napi_complete(&sds_ring->napi); 996 - napi_complete(&sds_ring->napi);
997 + napi_complete_done(&sds_ring->napi, work_done); 997 + napi_complete_done(&sds_ring->napi, work_done);
998 qlcnic_enable_sds_intr(adapter, sds_ring); 998 qlcnic_enable_sds_intr(adapter, sds_ring);
999 } 999 }
1000 1000
1001 @@ -1994,7 +1994,7 @@ static int qlcnic_83xx_poll(struct napi_ 1001 @@ -1994,7 +1994,7 @@ static int qlcnic_83xx_poll(struct napi_
1002 work_done = budget; 1002 work_done = budget;
1003 1003
1004 if (work_done < budget) { 1004 if (work_done < budget) {
1005 - napi_complete(&sds_ring->napi); 1005 - napi_complete(&sds_ring->napi);
1006 + napi_complete_done(&sds_ring->napi, work_done); 1006 + napi_complete_done(&sds_ring->napi, work_done);
1007 qlcnic_enable_sds_intr(adapter, sds_ring); 1007 qlcnic_enable_sds_intr(adapter, sds_ring);
1008 } 1008 }
1009 1009
1010 @@ -2032,7 +2032,7 @@ static int qlcnic_83xx_rx_poll(struct na 1010 @@ -2032,7 +2032,7 @@ static int qlcnic_83xx_rx_poll(struct na
1011 adapter = sds_ring->adapter; 1011 adapter = sds_ring->adapter;
1012 work_done = qlcnic_83xx_process_rcv_ring(sds_ring, budget); 1012 work_done = qlcnic_83xx_process_rcv_ring(sds_ring, budget);
1013 if (work_done < budget) { 1013 if (work_done < budget) {
1014 - napi_complete(&sds_ring->napi); 1014 - napi_complete(&sds_ring->napi);
1015 + napi_complete_done(&sds_ring->napi, work_done); 1015 + napi_complete_done(&sds_ring->napi, work_done);
1016 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) 1016 if (test_bit(__QLCNIC_DEV_UP, &adapter->state))
1017 qlcnic_enable_sds_intr(adapter, sds_ring); 1017 qlcnic_enable_sds_intr(adapter, sds_ring);
1018 } 1018 }
1019 --- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c 1019 --- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c
1020 +++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c 1020 +++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
1021 @@ -2334,7 +2334,7 @@ static int ql_napi_poll_msix(struct napi 1021 @@ -2334,7 +2334,7 @@ static int ql_napi_poll_msix(struct napi
1022 } 1022 }
1023 1023
1024 if (work_done < budget) { 1024 if (work_done < budget) {
1025 - napi_complete(napi); 1025 - napi_complete(napi);
1026 + napi_complete_done(napi, work_done); 1026 + napi_complete_done(napi, work_done);
1027 ql_enable_completion_interrupt(qdev, rx_ring->irq); 1027 ql_enable_completion_interrupt(qdev, rx_ring->irq);
1028 } 1028 }
1029 return work_done; 1029 return work_done;
1030 --- a/drivers/net/ethernet/qualcomm/emac/emac.c 1030 --- a/drivers/net/ethernet/qualcomm/emac/emac.c
1031 +++ b/drivers/net/ethernet/qualcomm/emac/emac.c 1031 +++ b/drivers/net/ethernet/qualcomm/emac/emac.c
1032 @@ -129,7 +129,7 @@ static int emac_napi_rtx(struct napi_str 1032 @@ -129,7 +129,7 @@ static int emac_napi_rtx(struct napi_str
1033 emac_mac_rx_process(adpt, rx_q, &work_done, budget); 1033 emac_mac_rx_process(adpt, rx_q, &work_done, budget);
1034 1034
1035 if (work_done < budget) { 1035 if (work_done < budget) {
1036 - napi_complete(napi); 1036 - napi_complete(napi);
1037 + napi_complete_done(napi, work_done); 1037 + napi_complete_done(napi, work_done);
1038 1038
1039 irq->mask |= rx_q->intr; 1039 irq->mask |= rx_q->intr;
1040 writel(irq->mask, adpt->base + EMAC_INT_MASK); 1040 writel(irq->mask, adpt->base + EMAC_INT_MASK);
1041 --- a/drivers/net/ethernet/realtek/r8169.c 1041 --- a/drivers/net/ethernet/realtek/r8169.c
1042 +++ b/drivers/net/ethernet/realtek/r8169.c 1042 +++ b/drivers/net/ethernet/realtek/r8169.c
1043 @@ -7578,7 +7578,7 @@ static int rtl8169_poll(struct napi_stru 1043 @@ -7577,7 +7577,7 @@ static int rtl8169_poll(struct napi_stru
1044 } 1044 }
1045 1045
1046 if (work_done < budget) { 1046 if (work_done < budget) {
1047 - napi_complete(napi); 1047 - napi_complete(napi);
1048 + napi_complete_done(napi, work_done); 1048 + napi_complete_done(napi, work_done);
1049 1049
1050 rtl_irq_enable(tp, enable_mask); 1050 rtl_irq_enable(tp, enable_mask);
1051 mmiowb(); 1051 mmiowb();
1052 --- a/drivers/net/ethernet/rocker/rocker_main.c 1052 --- a/drivers/net/ethernet/rocker/rocker_main.c
1053 +++ b/drivers/net/ethernet/rocker/rocker_main.c 1053 +++ b/drivers/net/ethernet/rocker/rocker_main.c
1054 @@ -2480,7 +2480,7 @@ static int rocker_port_poll_rx(struct na 1054 @@ -2480,7 +2480,7 @@ static int rocker_port_poll_rx(struct na
1055 } 1055 }
1056 1056
1057 if (credits < budget) 1057 if (credits < budget)
1058 - napi_complete(napi); 1058 - napi_complete(napi);
1059 + napi_complete_done(napi, credits); 1059 + napi_complete_done(napi, credits);
1060 1060
1061 rocker_dma_ring_credits_set(rocker, &rocker_port->rx_ring, credits); 1061 rocker_dma_ring_credits_set(rocker, &rocker_port->rx_ring, credits);
1062 1062
1063 --- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c 1063 --- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
1064 +++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c 1064 +++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
1065 @@ -1578,7 +1578,7 @@ static int sxgbe_poll(struct napi_struct 1065 @@ -1578,7 +1578,7 @@ static int sxgbe_poll(struct napi_struct
1066 1066
1067 work_done = sxgbe_rx(priv, budget); 1067 work_done = sxgbe_rx(priv, budget);
1068 if (work_done < budget) { 1068 if (work_done < budget) {
1069 - napi_complete(napi); 1069 - napi_complete(napi);
1070 + napi_complete_done(napi, work_done); 1070 + napi_complete_done(napi, work_done);
1071 priv->hw->dma->enable_dma_irq(priv->ioaddr, qnum); 1071 priv->hw->dma->enable_dma_irq(priv->ioaddr, qnum);
1072 } 1072 }
1073 1073
1074 --- a/drivers/net/ethernet/sfc/efx.c 1074 --- a/drivers/net/ethernet/sfc/efx.c
1075 +++ b/drivers/net/ethernet/sfc/efx.c 1075 +++ b/drivers/net/ethernet/sfc/efx.c
1076 @@ -332,7 +332,7 @@ static int efx_poll(struct napi_struct * 1076 @@ -332,7 +332,7 @@ static int efx_poll(struct napi_struct *
1077 * since efx_nic_eventq_read_ack() will have no effect if 1077 * since efx_nic_eventq_read_ack() will have no effect if
1078 * interrupts have already been disabled. 1078 * interrupts have already been disabled.
1079 */ 1079 */
1080 - napi_complete(napi); 1080 - napi_complete(napi);
1081 + napi_complete_done(napi, spent); 1081 + napi_complete_done(napi, spent);
1082 efx_nic_eventq_read_ack(channel); 1082 efx_nic_eventq_read_ack(channel);
1083 } 1083 }
1084 1084
1085 --- a/drivers/net/ethernet/smsc/smsc9420.c 1085 --- a/drivers/net/ethernet/smsc/smsc9420.c
1086 +++ b/drivers/net/ethernet/smsc/smsc9420.c 1086 +++ b/drivers/net/ethernet/smsc/smsc9420.c
1087 @@ -869,7 +869,7 @@ static int smsc9420_rx_poll(struct napi_ 1087 @@ -869,7 +869,7 @@ static int smsc9420_rx_poll(struct napi_
1088 smsc9420_pci_flush_write(pd); 1088 smsc9420_pci_flush_write(pd);
1089 1089
1090 if (work_done < budget) { 1090 if (work_done < budget) {
1091 - napi_complete(&pd->napi); 1091 - napi_complete(&pd->napi);
1092 + napi_complete_done(&pd->napi, work_done); 1092 + napi_complete_done(&pd->napi, work_done);
1093 1093
1094 /* re-enable RX DMA interrupts */ 1094 /* re-enable RX DMA interrupts */
1095 dma_intr_ena = smsc9420_reg_read(pd, DMAC_INTR_ENA); 1095 dma_intr_ena = smsc9420_reg_read(pd, DMAC_INTR_ENA);
1096 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 1096 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1097 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 1097 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1098 @@ -2706,7 +2706,7 @@ static int stmmac_poll(struct napi_struc 1098 @@ -2705,7 +2705,7 @@ static int stmmac_poll(struct napi_struc
1099 1099
1100 work_done = stmmac_rx(priv, budget); 1100 work_done = stmmac_rx(priv, budget);
1101 if (work_done < budget) { 1101 if (work_done < budget) {
1102 - napi_complete(napi); 1102 - napi_complete(napi);
1103 + napi_complete_done(napi, work_done); 1103 + napi_complete_done(napi, work_done);
1104 stmmac_enable_dma_irq(priv); 1104 stmmac_enable_dma_irq(priv);
1105 } 1105 }
1106 return work_done; 1106 return work_done;
1107 --- a/drivers/net/ethernet/sun/niu.c 1107 --- a/drivers/net/ethernet/sun/niu.c
1108 +++ b/drivers/net/ethernet/sun/niu.c 1108 +++ b/drivers/net/ethernet/sun/niu.c
1109 @@ -3785,7 +3785,7 @@ static int niu_poll(struct napi_struct * 1109 @@ -3785,7 +3785,7 @@ static int niu_poll(struct napi_struct *
1110 work_done = niu_poll_core(np, lp, budget); 1110 work_done = niu_poll_core(np, lp, budget);
1111 1111
1112 if (work_done < budget) { 1112 if (work_done < budget) {
1113 - napi_complete(napi); 1113 - napi_complete(napi);
1114 + napi_complete_done(napi, work_done); 1114 + napi_complete_done(napi, work_done);
1115 niu_ldg_rearm(np, lp, 1); 1115 niu_ldg_rearm(np, lp, 1);
1116 } 1116 }
1117 return work_done; 1117 return work_done;
1118 --- a/drivers/net/ethernet/sun/sungem.c 1118 --- a/drivers/net/ethernet/sun/sungem.c
1119 +++ b/drivers/net/ethernet/sun/sungem.c 1119 +++ b/drivers/net/ethernet/sun/sungem.c
1120 @@ -924,7 +924,7 @@ static int gem_poll(struct napi_struct * 1120 @@ -924,7 +924,7 @@ static int gem_poll(struct napi_struct *
1121 gp->status = readl(gp->regs + GREG_STAT); 1121 gp->status = readl(gp->regs + GREG_STAT);
1122 } while (gp->status & GREG_STAT_NAPI); 1122 } while (gp->status & GREG_STAT_NAPI);
1123 1123
1124 - napi_complete(napi); 1124 - napi_complete(napi);
1125 + napi_complete_done(napi, work_done); 1125 + napi_complete_done(napi, work_done);
1126 gem_enable_ints(gp); 1126 gem_enable_ints(gp);
1127 1127
1128 return work_done; 1128 return work_done;
1129 --- a/drivers/net/ethernet/sun/sunvnet_common.c 1129 --- a/drivers/net/ethernet/sun/sunvnet_common.c
1130 +++ b/drivers/net/ethernet/sun/sunvnet_common.c 1130 +++ b/drivers/net/ethernet/sun/sunvnet_common.c
1131 @@ -850,7 +850,7 @@ int sunvnet_poll_common(struct napi_stru 1131 @@ -850,7 +850,7 @@ int sunvnet_poll_common(struct napi_stru
1132 int processed = vnet_event_napi(port, budget); 1132 int processed = vnet_event_napi(port, budget);
1133 1133
1134 if (processed < budget) { 1134 if (processed < budget) {
1135 - napi_complete(napi); 1135 - napi_complete(napi);
1136 + napi_complete_done(napi, processed); 1136 + napi_complete_done(napi, processed);
1137 port->rx_event &= ~LDC_EVENT_DATA_READY; 1137 port->rx_event &= ~LDC_EVENT_DATA_READY;
1138 vio_set_intr(vio->vdev->rx_ino, HV_INTR_ENABLED); 1138 vio_set_intr(vio->vdev->rx_ino, HV_INTR_ENABLED);
1139 } 1139 }
1140 --- a/drivers/net/ethernet/tehuti/tehuti.c 1140 --- a/drivers/net/ethernet/tehuti/tehuti.c
1141 +++ b/drivers/net/ethernet/tehuti/tehuti.c 1141 +++ b/drivers/net/ethernet/tehuti/tehuti.c
1142 @@ -303,7 +303,7 @@ static int bdx_poll(struct napi_struct * 1142 @@ -303,7 +303,7 @@ static int bdx_poll(struct napi_struct *
1143 * device lock and allow waiting tasks (eg rmmod) to advance) */ 1143 * device lock and allow waiting tasks (eg rmmod) to advance) */
1144 priv->napi_stop = 0; 1144 priv->napi_stop = 0;
1145 1145
1146 - napi_complete(napi); 1146 - napi_complete(napi);
1147 + napi_complete_done(napi, work_done); 1147 + napi_complete_done(napi, work_done);
1148 bdx_enable_interrupts(priv); 1148 bdx_enable_interrupts(priv);
1149 } 1149 }
1150 return work_done; 1150 return work_done;
1151 --- a/drivers/net/ethernet/ti/cpsw.c 1151 --- a/drivers/net/ethernet/ti/cpsw.c
1152 +++ b/drivers/net/ethernet/ti/cpsw.c 1152 +++ b/drivers/net/ethernet/ti/cpsw.c
1153 @@ -843,7 +843,7 @@ static int cpsw_rx_poll(struct napi_stru 1153 @@ -843,7 +843,7 @@ static int cpsw_rx_poll(struct napi_stru
1154 } 1154 }
1155 1155
1156 if (num_rx < budget) { 1156 if (num_rx < budget) {
1157 - napi_complete(napi_rx); 1157 - napi_complete(napi_rx);
1158 + napi_complete_done(napi_rx, num_rx); 1158 + napi_complete_done(napi_rx, num_rx);
1159 writel(0xff, &cpsw->wr_regs->rx_en); 1159 writel(0xff, &cpsw->wr_regs->rx_en);
1160 if (cpsw->quirk_irq && cpsw->rx_irq_disabled) { 1160 if (cpsw->quirk_irq && cpsw->rx_irq_disabled) {
1161 cpsw->rx_irq_disabled = false; 1161 cpsw->rx_irq_disabled = false;
1162 --- a/drivers/net/ethernet/ti/davinci_emac.c 1162 --- a/drivers/net/ethernet/ti/davinci_emac.c
1163 +++ b/drivers/net/ethernet/ti/davinci_emac.c 1163 +++ b/drivers/net/ethernet/ti/davinci_emac.c
1164 @@ -1295,7 +1295,7 @@ static int emac_poll(struct napi_struct 1164 @@ -1295,7 +1295,7 @@ static int emac_poll(struct napi_struct
1165 &emac_rxhost_errcodes[cause][0], ch); 1165 &emac_rxhost_errcodes[cause][0], ch);
1166 } 1166 }
1167 } else if (num_rx_pkts < budget) { 1167 } else if (num_rx_pkts < budget) {
1168 - napi_complete(napi); 1168 - napi_complete(napi);
1169 + napi_complete_done(napi, num_rx_pkts); 1169 + napi_complete_done(napi, num_rx_pkts);
1170 emac_int_enable(priv); 1170 emac_int_enable(priv);
1171 } 1171 }
1172 1172
1173 --- a/drivers/net/ethernet/ti/netcp_core.c 1173 --- a/drivers/net/ethernet/ti/netcp_core.c
1174 +++ b/drivers/net/ethernet/ti/netcp_core.c 1174 +++ b/drivers/net/ethernet/ti/netcp_core.c
1175 @@ -939,7 +939,7 @@ static int netcp_rx_poll(struct napi_str 1175 @@ -939,7 +939,7 @@ static int netcp_rx_poll(struct napi_str
1176 1176
1177 netcp_rxpool_refill(netcp); 1177 netcp_rxpool_refill(netcp);
1178 if (packets < budget) { 1178 if (packets < budget) {
1179 - napi_complete(&netcp->rx_napi); 1179 - napi_complete(&netcp->rx_napi);
1180 + napi_complete_done(&netcp->rx_napi, packets); 1180 + napi_complete_done(&netcp->rx_napi, packets);
1181 knav_queue_enable_notify(netcp->rx_queue); 1181 knav_queue_enable_notify(netcp->rx_queue);
1182 } 1182 }
1183 1183
1184 --- a/drivers/net/ethernet/tile/tilegx.c 1184 --- a/drivers/net/ethernet/tile/tilegx.c
1185 +++ b/drivers/net/ethernet/tile/tilegx.c 1185 +++ b/drivers/net/ethernet/tile/tilegx.c
1186 @@ -678,7 +678,7 @@ static int tile_net_poll(struct napi_str 1186 @@ -678,7 +678,7 @@ static int tile_net_poll(struct napi_str
1187 } 1187 }
1188 1188
1189 /* There are no packets left. */ 1189 /* There are no packets left. */
1190 - napi_complete(&info_mpipe->napi); 1190 - napi_complete(&info_mpipe->napi);
1191 + napi_complete_done(&info_mpipe->napi, work); 1191 + napi_complete_done(&info_mpipe->napi, work);
1192 1192
1193 md = &mpipe_data[instance]; 1193 md = &mpipe_data[instance];
1194 /* Re-enable hypervisor interrupts. */ 1194 /* Re-enable hypervisor interrupts. */
1195 --- a/drivers/net/ethernet/tile/tilepro.c 1195 --- a/drivers/net/ethernet/tile/tilepro.c
1196 +++ b/drivers/net/ethernet/tile/tilepro.c 1196 +++ b/drivers/net/ethernet/tile/tilepro.c
1197 @@ -842,7 +842,7 @@ static int tile_net_poll(struct napi_str 1197 @@ -842,7 +842,7 @@ static int tile_net_poll(struct napi_str
1198 } 1198 }
1199 } 1199 }
1200 1200
1201 - napi_complete(&info->napi); 1201 - napi_complete(&info->napi);
1202 + napi_complete_done(&info->napi, work); 1202 + napi_complete_done(&info->napi, work);
1203 1203
1204 if (!priv->active) 1204 if (!priv->active)
1205 goto done; 1205 goto done;
1206 --- a/drivers/net/ethernet/toshiba/ps3_gelic_net.c 1206 --- a/drivers/net/ethernet/toshiba/ps3_gelic_net.c
1207 +++ b/drivers/net/ethernet/toshiba/ps3_gelic_net.c 1207 +++ b/drivers/net/ethernet/toshiba/ps3_gelic_net.c
1208 @@ -1109,7 +1109,7 @@ static int gelic_net_poll(struct napi_st 1208 @@ -1109,7 +1109,7 @@ static int gelic_net_poll(struct napi_st
1209 } 1209 }
1210 1210
1211 if (packets_done < budget) { 1211 if (packets_done < budget) {
1212 - napi_complete(napi); 1212 - napi_complete(napi);
1213 + napi_complete_done(napi, packets_done); 1213 + napi_complete_done(napi, packets_done);
1214 gelic_card_rx_irq_on(card); 1214 gelic_card_rx_irq_on(card);
1215 } 1215 }
1216 return packets_done; 1216 return packets_done;
1217 --- a/drivers/net/ethernet/toshiba/spider_net.c 1217 --- a/drivers/net/ethernet/toshiba/spider_net.c
1218 +++ b/drivers/net/ethernet/toshiba/spider_net.c 1218 +++ b/drivers/net/ethernet/toshiba/spider_net.c
1219 @@ -1270,7 +1270,7 @@ static int spider_net_poll(struct napi_s 1219 @@ -1270,7 +1270,7 @@ static int spider_net_poll(struct napi_s
1220 /* if all packets are in the stack, enable interrupts and return 0 */ 1220 /* if all packets are in the stack, enable interrupts and return 0 */
1221 /* if not, return 1 */ 1221 /* if not, return 1 */
1222 if (packets_done < budget) { 1222 if (packets_done < budget) {
1223 - napi_complete(napi); 1223 - napi_complete(napi);
1224 + napi_complete_done(napi, packets_done); 1224 + napi_complete_done(napi, packets_done);
1225 spider_net_rx_irq_on(card); 1225 spider_net_rx_irq_on(card);
1226 card->ignore_rx_ramfull = 0; 1226 card->ignore_rx_ramfull = 0;
1227 } 1227 }
1228 --- a/drivers/net/ethernet/toshiba/tc35815.c 1228 --- a/drivers/net/ethernet/toshiba/tc35815.c
1229 +++ b/drivers/net/ethernet/toshiba/tc35815.c 1229 +++ b/drivers/net/ethernet/toshiba/tc35815.c
1230 @@ -1639,7 +1639,7 @@ static int tc35815_poll(struct napi_stru 1230 @@ -1639,7 +1639,7 @@ static int tc35815_poll(struct napi_stru
1231 spin_unlock(&lp->rx_lock); 1231 spin_unlock(&lp->rx_lock);
1232 1232
1233 if (received < budget) { 1233 if (received < budget) {
1234 - napi_complete(napi); 1234 - napi_complete(napi);
1235 + napi_complete_done(napi, received); 1235 + napi_complete_done(napi, received);
1236 /* enable interrupts */ 1236 /* enable interrupts */
1237 tc_writel(tc_readl(&tr->DMA_Ctl) & ~DMA_IntMask, &tr->DMA_Ctl); 1237 tc_writel(tc_readl(&tr->DMA_Ctl) & ~DMA_IntMask, &tr->DMA_Ctl);
1238 } 1238 }
1239 --- a/drivers/net/ethernet/tundra/tsi108_eth.c 1239 --- a/drivers/net/ethernet/tundra/tsi108_eth.c
1240 +++ b/drivers/net/ethernet/tundra/tsi108_eth.c 1240 +++ b/drivers/net/ethernet/tundra/tsi108_eth.c
1241 @@ -887,7 +887,7 @@ static int tsi108_poll(struct napi_struc 1241 @@ -887,7 +887,7 @@ static int tsi108_poll(struct napi_struc
1242 1242
1243 if (num_received < budget) { 1243 if (num_received < budget) {
1244 data->rxpending = 0; 1244 data->rxpending = 0;
1245 - napi_complete(napi); 1245 - napi_complete(napi);
1246 + napi_complete_done(napi, num_received); 1246 + napi_complete_done(napi, num_received);
1247 1247
1248 TSI_WRITE(TSI108_EC_INTMASK, 1248 TSI_WRITE(TSI108_EC_INTMASK,
1249 TSI_READ(TSI108_EC_INTMASK) 1249 TSI_READ(TSI108_EC_INTMASK)
1250 --- a/drivers/net/ethernet/via/via-rhine.c 1250 --- a/drivers/net/ethernet/via/via-rhine.c
1251 +++ b/drivers/net/ethernet/via/via-rhine.c 1251 +++ b/drivers/net/ethernet/via/via-rhine.c
1252 @@ -861,7 +861,7 @@ static int rhine_napipoll(struct napi_st 1252 @@ -861,7 +861,7 @@ static int rhine_napipoll(struct napi_st
1253 } 1253 }
1254 1254
1255 if (work_done < budget) { 1255 if (work_done < budget) {
1256 - napi_complete(napi); 1256 - napi_complete(napi);
1257 + napi_complete_done(napi, work_done); 1257 + napi_complete_done(napi, work_done);
1258 iowrite16(enable_mask, ioaddr + IntrEnable); 1258 iowrite16(enable_mask, ioaddr + IntrEnable);
1259 mmiowb(); 1259 mmiowb();
1260 } 1260 }
1261 --- a/drivers/net/ethernet/via/via-velocity.c 1261 --- a/drivers/net/ethernet/via/via-velocity.c
1262 +++ b/drivers/net/ethernet/via/via-velocity.c 1262 +++ b/drivers/net/ethernet/via/via-velocity.c
1263 @@ -2160,7 +2160,7 @@ static int velocity_poll(struct napi_str 1263 @@ -2160,7 +2160,7 @@ static int velocity_poll(struct napi_str
1264 velocity_tx_srv(vptr); 1264 velocity_tx_srv(vptr);
1265 /* If budget not fully consumed, exit the polling mode */ 1265 /* If budget not fully consumed, exit the polling mode */
1266 if (rx_done < budget) { 1266 if (rx_done < budget) {
1267 - napi_complete(napi); 1267 - napi_complete(napi);
1268 + napi_complete_done(napi, rx_done); 1268 + napi_complete_done(napi, rx_done);
1269 mac_enable_int(vptr->mac_regs); 1269 mac_enable_int(vptr->mac_regs);
1270 } 1270 }
1271 spin_unlock_irqrestore(&vptr->lock, flags); 1271 spin_unlock_irqrestore(&vptr->lock, flags);
1272 --- a/drivers/net/ethernet/wiznet/w5100.c 1272 --- a/drivers/net/ethernet/wiznet/w5100.c
1273 +++ b/drivers/net/ethernet/wiznet/w5100.c 1273 +++ b/drivers/net/ethernet/wiznet/w5100.c
1274 @@ -915,7 +915,7 @@ static int w5100_napi_poll(struct napi_s 1274 @@ -915,7 +915,7 @@ static int w5100_napi_poll(struct napi_s
1275 } 1275 }
1276 1276
1277 if (rx_count < budget) { 1277 if (rx_count < budget) {
1278 - napi_complete(napi); 1278 - napi_complete(napi);
1279 + napi_complete_done(napi, rx_count); 1279 + napi_complete_done(napi, rx_count);
1280 w5100_enable_intr(priv); 1280 w5100_enable_intr(priv);
1281 } 1281 }
1282 1282
1283 --- a/drivers/net/ethernet/wiznet/w5300.c 1283 --- a/drivers/net/ethernet/wiznet/w5300.c
1284 +++ b/drivers/net/ethernet/wiznet/w5300.c 1284 +++ b/drivers/net/ethernet/wiznet/w5300.c
1285 @@ -417,7 +417,7 @@ static int w5300_napi_poll(struct napi_s 1285 @@ -417,7 +417,7 @@ static int w5300_napi_poll(struct napi_s
1286 } 1286 }
1287 1287
1288 if (rx_count < budget) { 1288 if (rx_count < budget) {
1289 - napi_complete(napi); 1289 - napi_complete(napi);
1290 + napi_complete_done(napi, rx_count); 1290 + napi_complete_done(napi, rx_count);
1291 w5300_write(priv, W5300_IMR, IR_S0); 1291 w5300_write(priv, W5300_IMR, IR_S0);
1292 mmiowb(); 1292 mmiowb();
1293 } 1293 }
1294 --- a/drivers/net/fjes/fjes_main.c 1294 --- a/drivers/net/fjes/fjes_main.c
1295 +++ b/drivers/net/fjes/fjes_main.c 1295 +++ b/drivers/net/fjes/fjes_main.c
1296 @@ -1122,7 +1122,7 @@ static int fjes_poll(struct napi_struct 1296 @@ -1122,7 +1122,7 @@ static int fjes_poll(struct napi_struct
1297 } 1297 }
1298 1298
1299 if (work_done < budget) { 1299 if (work_done < budget) {
1300 - napi_complete(napi); 1300 - napi_complete(napi);
1301 + napi_complete_done(napi, work_done); 1301 + napi_complete_done(napi, work_done);
1302 1302
1303 if (adapter->unset_rx_last) { 1303 if (adapter->unset_rx_last) {
1304 adapter->rx_last_jiffies = jiffies; 1304 adapter->rx_last_jiffies = jiffies;
1305 --- a/drivers/net/vmxnet3/vmxnet3_drv.c 1305 --- a/drivers/net/vmxnet3/vmxnet3_drv.c
1306 +++ b/drivers/net/vmxnet3/vmxnet3_drv.c 1306 +++ b/drivers/net/vmxnet3/vmxnet3_drv.c
1307 @@ -1873,7 +1873,7 @@ vmxnet3_poll(struct napi_struct *napi, i 1307 @@ -1873,7 +1873,7 @@ vmxnet3_poll(struct napi_struct *napi, i
1308 rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget); 1308 rxd_done = vmxnet3_do_poll(rx_queue->adapter, budget);
1309 1309
1310 if (rxd_done < budget) { 1310 if (rxd_done < budget) {
1311 - napi_complete(napi); 1311 - napi_complete(napi);
1312 + napi_complete_done(napi, rxd_done); 1312 + napi_complete_done(napi, rxd_done);
1313 vmxnet3_enable_all_intrs(rx_queue->adapter); 1313 vmxnet3_enable_all_intrs(rx_queue->adapter);
1314 } 1314 }
1315 return rxd_done; 1315 return rxd_done;
1316 @@ -1904,7 +1904,7 @@ vmxnet3_poll_rx_only(struct napi_struct 1316 @@ -1904,7 +1904,7 @@ vmxnet3_poll_rx_only(struct napi_struct
1317 rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget); 1317 rxd_done = vmxnet3_rq_rx_complete(rq, adapter, budget);
1318 1318
1319 if (rxd_done < budget) { 1319 if (rxd_done < budget) {
1320 - napi_complete(napi); 1320 - napi_complete(napi);
1321 + napi_complete_done(napi, rxd_done); 1321 + napi_complete_done(napi, rxd_done);
1322 vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx); 1322 vmxnet3_enable_intr(adapter, rq->comp_ring.intr_idx);
1323 } 1323 }
1324 return rxd_done; 1324 return rxd_done;
1325 --- a/drivers/net/wan/fsl_ucc_hdlc.c 1325 --- a/drivers/net/wan/fsl_ucc_hdlc.c
1326 +++ b/drivers/net/wan/fsl_ucc_hdlc.c 1326 +++ b/drivers/net/wan/fsl_ucc_hdlc.c
1327 @@ -573,7 +573,7 @@ static int ucc_hdlc_poll(struct napi_str 1327 @@ -573,7 +573,7 @@ static int ucc_hdlc_poll(struct napi_str
1328 howmany += hdlc_rx_done(priv, budget - howmany); 1328 howmany += hdlc_rx_done(priv, budget - howmany);
1329 1329
1330 if (howmany < budget) { 1330 if (howmany < budget) {
1331 - napi_complete(napi); 1331 - napi_complete(napi);
1332 + napi_complete_done(napi, howmany); 1332 + napi_complete_done(napi, howmany);
1333 qe_setbits32(priv->uccf->p_uccm, 1333 qe_setbits32(priv->uccf->p_uccm,
1334 (UCCE_HDLC_RX_EVENTS | UCCE_HDLC_TX_EVENTS) << 16); 1334 (UCCE_HDLC_RX_EVENTS | UCCE_HDLC_TX_EVENTS) << 16);
1335 } 1335 }
1336 --- a/drivers/net/wan/hd64572.c 1336 --- a/drivers/net/wan/hd64572.c
1337 +++ b/drivers/net/wan/hd64572.c 1337 +++ b/drivers/net/wan/hd64572.c
1338 @@ -341,7 +341,7 @@ static int sca_poll(struct napi_struct * 1338 @@ -341,7 +341,7 @@ static int sca_poll(struct napi_struct *
1339 received = sca_rx_done(port, budget); 1339 received = sca_rx_done(port, budget);
1340 1340
1341 if (received < budget) { 1341 if (received < budget) {
1342 - napi_complete(napi); 1342 - napi_complete(napi);
1343 + napi_complete_done(napi, received); 1343 + napi_complete_done(napi, received);
1344 enable_intr(port); 1344 enable_intr(port);
1345 } 1345 }
1346 1346
1347 --- a/drivers/net/wireless/ath/ath10k/pci.c 1347 --- a/drivers/net/wireless/ath/ath10k/pci.c
1348 +++ b/drivers/net/wireless/ath/ath10k/pci.c 1348 +++ b/drivers/net/wireless/ath/ath10k/pci.c
1349 @@ -2804,7 +2804,7 @@ static int ath10k_pci_napi_poll(struct n 1349 @@ -2804,7 +2804,7 @@ static int ath10k_pci_napi_poll(struct n
1350 done = ath10k_htt_txrx_compl_task(ar, budget); 1350 done = ath10k_htt_txrx_compl_task(ar, budget);
1351 1351
1352 if (done < budget) { 1352 if (done < budget) {
1353 - napi_complete(ctx); 1353 - napi_complete(ctx);
1354 + napi_complete_done(ctx, done); 1354 + napi_complete_done(ctx, done);
1355 /* In case of MSI, it is possible that interrupts are received 1355 /* In case of MSI, it is possible that interrupts are received
1356 * while NAPI poll is inprogress. So pending interrupts that are 1356 * while NAPI poll is inprogress. So pending interrupts that are
1357 * received after processing all copy engine pipes by NAPI poll 1357 * received after processing all copy engine pipes by NAPI poll
1358 --- a/drivers/net/wireless/ath/wil6210/netdev.c 1358 --- a/drivers/net/wireless/ath/wil6210/netdev.c
1359 +++ b/drivers/net/wireless/ath/wil6210/netdev.c 1359 +++ b/drivers/net/wireless/ath/wil6210/netdev.c
1360 @@ -84,7 +84,7 @@ static int wil6210_netdev_poll_rx(struct 1360 @@ -84,7 +84,7 @@ static int wil6210_netdev_poll_rx(struct
1361 done = budget - quota; 1361 done = budget - quota;
1362 1362
1363 if (done < budget) { 1363 if (done < budget) {
1364 - napi_complete(napi); 1364 - napi_complete(napi);
1365 + napi_complete_done(napi, done); 1365 + napi_complete_done(napi, done);
1366 wil6210_unmask_irq_rx(wil); 1366 wil6210_unmask_irq_rx(wil);
1367 wil_dbg_txrx(wil, "NAPI RX complete\n"); 1367 wil_dbg_txrx(wil, "NAPI RX complete\n");
1368 } 1368 }
1369 --- a/drivers/net/xen-netback/interface.c 1369 --- a/drivers/net/xen-netback/interface.c
1370 +++ b/drivers/net/xen-netback/interface.c 1370 +++ b/drivers/net/xen-netback/interface.c
1371 @@ -104,7 +104,7 @@ static int xenvif_poll(struct napi_struc 1371 @@ -104,7 +104,7 @@ static int xenvif_poll(struct napi_struc
1372 work_done = xenvif_tx_action(queue, budget); 1372 work_done = xenvif_tx_action(queue, budget);
1373 1373
1374 if (work_done < budget) { 1374 if (work_done < budget) {
1375 - napi_complete(napi); 1375 - napi_complete(napi);
1376 + napi_complete_done(napi, work_done); 1376 + napi_complete_done(napi, work_done);
1377 /* If the queue is rate-limited, it shall be 1377 /* If the queue is rate-limited, it shall be
1378 * rescheduled in the timer callback. 1378 * rescheduled in the timer callback.
1379 */ 1379 */
1380 --- a/drivers/net/xen-netfront.c 1380 --- a/drivers/net/xen-netfront.c
1381 +++ b/drivers/net/xen-netfront.c 1381 +++ b/drivers/net/xen-netfront.c
1382 @@ -1070,7 +1070,7 @@ err: 1382 @@ -1065,7 +1065,7 @@ err:
1383 if (work_done < budget) { 1383 if (work_done < budget) {
1384 int more_to_do = 0; 1384 int more_to_do = 0;
1385 1385
1386 - napi_complete(napi); 1386 - napi_complete(napi);
1387 + napi_complete_done(napi, work_done); 1387 + napi_complete_done(napi, work_done);
1388 1388
1389 RING_FINAL_CHECK_FOR_RESPONSES(&queue->rx, more_to_do); 1389 RING_FINAL_CHECK_FOR_RESPONSES(&queue->rx, more_to_do);
1390 if (more_to_do) 1390 if (more_to_do)
1391 --- a/drivers/staging/octeon/ethernet-rx.c 1391 --- a/drivers/staging/octeon/ethernet-rx.c
1392 +++ b/drivers/staging/octeon/ethernet-rx.c 1392 +++ b/drivers/staging/octeon/ethernet-rx.c
1393 @@ -429,7 +429,7 @@ static int cvm_oct_napi_poll(struct napi 1393 @@ -429,7 +429,7 @@ static int cvm_oct_napi_poll(struct napi
1394 1394
1395 if (rx_count < budget) { 1395 if (rx_count < budget) {
1396 /* No more work */ 1396 /* No more work */
1397 - napi_complete(napi); 1397 - napi_complete(napi);
1398 + napi_complete_done(napi, rx_count); 1398 + napi_complete_done(napi, rx_count);
1399 enable_irq(rx_group->irq); 1399 enable_irq(rx_group->irq);
1400 } 1400 }
1401 return rx_count; 1401 return rx_count;
1402 --- a/drivers/staging/unisys/visornic/visornic_main.c 1402 --- a/drivers/staging/unisys/visornic/visornic_main.c
1403 +++ b/drivers/staging/unisys/visornic/visornic_main.c 1403 +++ b/drivers/staging/unisys/visornic/visornic_main.c
1404 @@ -1657,7 +1657,7 @@ static int visornic_poll(struct napi_str 1404 @@ -1657,7 +1657,7 @@ static int visornic_poll(struct napi_str
1405 1405
1406 /* If there aren't any more packets to receive stop the poll */ 1406 /* If there aren't any more packets to receive stop the poll */
1407 if (rx_count < budget) 1407 if (rx_count < budget)
1408 - napi_complete(napi); 1408 - napi_complete(napi);
1409 + napi_complete_done(napi, rx_count); 1409 + napi_complete_done(napi, rx_count);
1410 1410
1411 return rx_count; 1411 return rx_count;
1412 } 1412 }
1413   1413