Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/e1000/em_txrx.c
Show First 20 Lines • Show All 452 Lines • ▼ Show 20 Lines | em_isc_txd_credits_update(void *arg, uint16_t txqid, bool clear) | ||||
* are descriptors to reclaim */ | * are descriptors to reclaim */ | ||||
if (!clear) | if (!clear) | ||||
return (1); | return (1); | ||||
prev = txr->tx_cidx_processed; | prev = txr->tx_cidx_processed; | ||||
ntxd = scctx->isc_ntxd[0]; | ntxd = scctx->isc_ntxd[0]; | ||||
do { | do { | ||||
delta = (int32_t)cur - (int32_t)prev; | 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); | MPASS(prev == 0 || delta != 0); | ||||
if (prev == 0 && cur == 0) | |||||
delta += 1; | |||||
if (delta < 0) | if (delta < 0) | ||||
delta += ntxd; | delta += ntxd; | ||||
DPRINTF(iflib_get_dev(adapter->ctx), | DPRINTF(iflib_get_dev(adapter->ctx), | ||||
"%s: cidx_processed=%u cur=%u clear=%d delta=%d\n", | "%s: cidx_processed=%u cur=%u clear=%d delta=%d\n", | ||||
__FUNCTION__, prev, cur, clear, delta); | __FUNCTION__, prev, cur, clear, delta); | ||||
processed += delta; | processed += delta; | ||||
prev = cur; | prev = cur; | ||||
▲ Show 20 Lines • Show All 334 Lines • Show Last 20 Lines |