diff options
author | David S. Miller <davem@davemloft.net> | 2014-03-13 15:18:50 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-03-13 15:18:50 -0400 |
commit | cbd84a44949748dbe37051caff2d396d256fc8b8 (patch) | |
tree | 5a97cf7f32ec371a55bcb0f5eb4f8105eb41e493 | |
parent | f9708b4302733ca023722fddcf9f501a3cb8c98b (diff) | |
parent | 50ff44be401b4d78388024b3e425e979904f304e (diff) | |
download | linux-cbd84a44949748dbe37051caff2d396d256fc8b8.tar.gz |
Merge branch 'napi_budget_zero'
Eric W. Biederman says:
====================
Don't receive packets when the napi budget == 0
To the best of understanding processing any received packets when the
napi budget == 0 is broken driver behavior. At the same time I don't
think we have ever cared before so there are a handful of drivers that
need fixes.
I care now as I will shortly be using htis in netpoll to get the
tx queue processing without the rx queue processing.
Drivers that need fixes are few and far between, and so far I have only
found two of them. More similar patches later if I find more drivers
that need fixes.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/realtek/8139cp.c | 5 |
2 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c index c251ca3056de..2e42de239798 100644 --- a/drivers/net/ethernet/broadcom/bnx2.c +++ b/drivers/net/ethernet/broadcom/bnx2.c @@ -3132,6 +3132,9 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget) struct l2_fhdr *rx_hdr; int rx_pkt = 0, pg_ring_used = 0; + if (budget <= 0) + return rx_pkt; + hw_cons = bnx2_get_hw_rx_cons(bnapi); sw_cons = rxr->rx_cons; sw_prod = rxr->rx_prod; diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c index a3c1daa7ad5c..2bc728e65e24 100644 --- a/drivers/net/ethernet/realtek/8139cp.c +++ b/drivers/net/ethernet/realtek/8139cp.c @@ -476,7 +476,7 @@ rx_status_loop: rx = 0; cpw16(IntrStatus, cp_rx_intr_mask); - while (1) { + while (rx < budget) { u32 status, len; dma_addr_t mapping, new_mapping; struct sk_buff *skb, *new_skb; @@ -554,9 +554,6 @@ rx_next: else desc->opts1 = cpu_to_le32(DescOwn | cp->rx_buf_sz); rx_tail = NEXT_RX(rx_tail); - - if (rx >= budget) - break; } cp->rx_tail = rx_tail; |