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;
                        }