Author: davidcs
Date: Tue Apr  7 18:07:16 2015
New Revision: 281217
URL: https://svnweb.freebsd.org/changeset/base/281217

Log:
  MFC r281006
  When an mbuf allocation fails in the receive path, the mbuf containing the 
received packet is not sent to the host network stack and is reused again on 
the receive ring.  Remaining received packets in the ring are not processed in 
that invocation of bxe_rxeof() and defered to the task thread

Modified:
  stable/9/sys/dev/bxe/bxe.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/dev/   (props changed)

Modified: stable/9/sys/dev/bxe/bxe.c
==============================================================================
--- stable/9/sys/dev/bxe/bxe.c  Tue Apr  7 18:06:46 2015        (r281216)
+++ stable/9/sys/dev/bxe/bxe.c  Tue Apr  7 18:07:16 2015        (r281217)
@@ -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;
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to