mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
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 <mindal@semihalf.com> Reviewed by: gallatin, erj Obtained from: Semihalf Sponsored by: Alstom Group Differential Revision: https://reviews.freebsd.org/D30728
This commit is contained in:
parent
3eae4e106a
commit
58632fa7a3
2 changed files with 10 additions and 1 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue