The branch main has been updated by mw:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=58632fa7a386f6338996b945fb38e807fc44db72

commit 58632fa7a386f6338996b945fb38e807fc44db72
Author:     Marcin Wojtas <[email protected]>
AuthorDate: 2021-05-19 09:09:16 +0000
Commit:     Marcin Wojtas <[email protected]>
CommitDate: 2021-06-24 11:00:56 +0000

    iflib: Add a new quirk
    
    ENETC NIC found in LS1028A has a bug where clearing TX pidx/cidx
    causes the ring to hang after being re-enabled.
    Add a new flag, if set iflib will preserve the indices during restart.
    
    Submitted by: Kornel Duleba <[email protected]>
    Reviewed by: gallatin, erj
    Obtained from: Semihalf
    Sponsored by: Alstom Group
    Differential Revision: https://reviews.freebsd.org/D30728
---
 sys/net/iflib.c | 7 ++++++-
 sys/net/iflib.h | 4 ++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/sys/net/iflib.c b/sys/net/iflib.c
index 01da882f0d12..ea3754a07ee6 100644
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -2604,7 +2604,12 @@ iflib_stop(if_ctx_t ctx)
                        iflib_txsd_free(ctx, txq, j);
                }
                txq->ift_processed = txq->ift_cleaned = txq->ift_cidx_processed 
= 0;
-               txq->ift_in_use = txq->ift_gen = txq->ift_cidx = txq->ift_pidx 
= txq->ift_no_desc_avail = 0;
+               txq->ift_in_use = txq->ift_gen = txq->ift_no_desc_avail = 0;
+               if (sctx->isc_flags & IFLIB_PRESERVE_TX_INDICES)
+                       txq->ift_cidx = txq->ift_pidx;
+               else
+                       txq->ift_cidx = txq->ift_pidx = 0;
+
                txq->ift_closed = txq->ift_mbuf_defrag = 
txq->ift_mbuf_defrag_failed = 0;
                txq->ift_no_tx_dma_setup = txq->ift_txd_encap_efbig = 
txq->ift_map_failed = 0;
                txq->ift_pullups = 0;
diff --git a/sys/net/iflib.h b/sys/net/iflib.h
index f88294b3d01a..b6dcf6311d2b 100644
--- a/sys/net/iflib.h
+++ b/sys/net/iflib.h
@@ -402,6 +402,10 @@ typedef enum {
  * Interface has an admin completion queue
  */
 #define IFLIB_HAS_ADMINCQ      0x100000
+/*
+ * Interface needs to preserve TX ring indices across restarts.
+ */
+#define IFLIB_PRESERVE_TX_INDICES      0x200000
 
 /*
  * These enum values are used in iflib_needs_restart to indicate to iflib
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to