bnx2x: switch to napi_complete_done()
authorEric Dumazet <edumazet@google.com>
Tue, 15 Nov 2016 18:15:15 +0000 (10:15 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 Nov 2016 18:40:58 +0000 (13:40 -0500)
Switch from napi_complete() to napi_complete_done()
for better GRO support (gro_flush_timeout) and core NAPI
features.

Do not rearm interrupts if we are busy polling,
to reduce bus and interrupts overhead.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Willem de Bruijn <willemb@google.com>
Cc: Adam Belay <abelay@google.com>
Cc: Tariq Toukan <tariqt@mellanox.com>
Cc: Yuval Mintz <Yuval.Mintz@cavium.com>
Cc: Ariel Elior <ariel.elior@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c

index ed42c100968551525fd393212cfb68ed1723e9c0..3fd36b421d51bcafeb4591832253622db05038d9 100644 (file)
@@ -3248,13 +3248,14 @@ static int bnx2x_poll(struct napi_struct *napi, int budget)
                        rmb();
 
                        if (!(bnx2x_has_rx_work(fp) || bnx2x_has_tx_work(fp))) {
-                               napi_complete(napi);
-                               /* Re-enable interrupts */
-                               DP(NETIF_MSG_RX_STATUS,
-                                  "Update index to %d\n", fp->fp_hc_idx);
-                               bnx2x_ack_sb(bp, fp->igu_sb_id, USTORM_ID,
-                                            le16_to_cpu(fp->fp_hc_idx),
-                                            IGU_INT_ENABLE, 1);
+                               if (napi_complete_done(napi, rx_work_done)) {
+                                       /* Re-enable interrupts */
+                                       DP(NETIF_MSG_RX_STATUS,
+                                          "Update index to %d\n", fp->fp_hc_idx);
+                                       bnx2x_ack_sb(bp, fp->igu_sb_id, USTORM_ID,
+                                                    le16_to_cpu(fp->fp_hc_idx),
+                                                    IGU_INT_ENABLE, 1);
+                               }
                        } else {
                                rx_work_done = budget;
                        }