Fix first-packet completion
The first packet after the ring is initialized was never completed as isc_txd_credits_update() would not include it in the count of completed packets. This caused netmap to never complete a batch. See PR 233022 for more details. This is the same fix as the r340310 for e1000 PR: 233607 Reported by: lev Reviewed by: lev MFC after: 3 days Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D18368
This commit is contained in:
parent
15a34ca913
commit
0a3c73d350
@ -297,6 +297,8 @@ ixgbe_isc_txd_credits_update(void *arg, uint16_t txqid, bool clear)
|
||||
ntxd = scctx->isc_ntxd[0];
|
||||
do {
|
||||
delta = (int32_t)cur - (int32_t)prev;
|
||||
if (prev == 0 && cur == 0)
|
||||
delta += 1;
|
||||
if (delta < 0)
|
||||
delta += ntxd;
|
||||
|
||||
|
@ -516,7 +516,13 @@ ixl_isc_txd_credits_update_dwb(void *arg, uint16_t txqid, bool clear)
|
||||
ntxd = scctx->isc_ntxd[0];
|
||||
do {
|
||||
delta = (int32_t)cur - (int32_t)prev;
|
||||
/*
|
||||
* XXX This appears to be a hack for first-packet.
|
||||
* A correct fix would prevent prev == cur in the first place.
|
||||
*/
|
||||
MPASS(prev == 0 || delta != 0);
|
||||
if (prev == 0 && cur == 0)
|
||||
delta += 1;
|
||||
if (delta < 0)
|
||||
delta += ntxd;
|
||||
#if 0
|
||||
|
Loading…
Reference in New Issue
Block a user