Page MenuHomeFreeBSD

D59321.diff
No OneTemporary

D59321.diff

diff --git a/sys/net/iflib.c b/sys/net/iflib.c
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -2459,8 +2459,7 @@
* (ift_processed) nor reclaimed (ift_cleaned accounts
* the difference to ift_in_use). The tail whose
* report-status request is still deferred is never
- * reported and must not count (ift_rs_pending
- * over-counts it by one per packet).
+ * reported and must not count..
*/
outstanding = txq->ift_in_use -
(qidx_t)(txq->ift_processed - txq->ift_cleaned);
@@ -3747,11 +3746,9 @@
* However, this also means that the driver will need to keep track
* of the descriptors that RS was set on to check them for the DD bit.
*/
- txq->ift_rs_pending += nsegs + 1;
- if (txq->ift_rs_pending > TXQ_MAX_RS_DEFERRED(txq) ||
+ if (txq->ift_rs_pending + nsegs + 1 > TXQ_MAX_RS_DEFERRED(txq) ||
iflib_no_tx_batch || (TXQ_AVAIL(txq) - nsegs) <= MAX_TX_DESC(ctx)) {
pi.ipi_flags |= IPI_TX_INTR;
- txq->ift_rs_pending = 0;
}
pi.ipi_segs = segs;
@@ -3771,6 +3768,11 @@
ndesc += txq->ift_size;
txq->ift_gen = 1;
}
+
+ if (pi.ipi_flags & IPI_TX_INTR)
+ txq->ift_rs_pending = 0;
+ else
+ txq->ift_rs_pending += ndesc;
/*
* drivers can need up to ift_pad sentinels
*/

File Metadata

Mime Type
text/plain
Expires
Thu, Sep 3, 4:24 PM (18 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38113930
Default Alt Text
D59321.diff (1 KB)

Event Timeline