summaryrefslogtreecommitdiffstats
path: root/sys/dev/bxe/bxe.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/bxe/bxe.c')
-rw-r--r--sys/dev/bxe/bxe.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/dev/bxe/bxe.c b/sys/dev/bxe/bxe.c
index f66e216..5a56a46 100644
--- a/sys/dev/bxe/bxe.c
+++ b/sys/dev/bxe/bxe.c
@@ -3257,7 +3257,7 @@ bxe_rxeof(struct bxe_softc *sc,
uint16_t bd_cons, bd_prod, bd_prod_fw, comp_ring_cons;
uint16_t hw_cq_cons, sw_cq_cons, sw_cq_prod;
int rx_pkts = 0;
- int rc;
+ int rc = 0;
BXE_FP_RX_LOCK(fp);
@@ -3399,6 +3399,10 @@ bxe_rxeof(struct bxe_softc *sc,
(sc->max_rx_bufs != RX_BD_USABLE) ?
bd_prod : bd_cons);
if (rc != 0) {
+
+ /* we simply reuse the received mbuf and don't post it to the stack */
+ m = NULL;
+
BLOGE(sc, "mbuf alloc fail for fp[%02d] rx chain (%d)\n",
fp->index, rc);
fp->eth_q_stats.rx_soft_errors++;
@@ -3487,6 +3491,9 @@ next_cqe:
sw_cq_cons = RCQ_NEXT(sw_cq_cons);
/* limit spinning on the queue */
+ if (rc != 0)
+ break;
+
if (rx_pkts == sc->rx_budget) {
fp->eth_q_stats.rx_budget_reached++;
break;
OpenPOWER on IntegriCloud