Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/e1000/igb_txrx.c
Show First 20 Lines • Show All 327 Lines • ▼ Show 20 Lines | igb_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; | ||||
processed += delta; | processed += delta; | ||||
prev = cur; | prev = cur; | ||||
rs_cidx = (rs_cidx + 1) & (ntxd-1); | rs_cidx = (rs_cidx + 1) & (ntxd-1); | ||||
if (rs_cidx == txr->tx_rs_pidx) | if (rs_cidx == txr->tx_rs_pidx) | ||||
break; | break; | ||||
▲ Show 20 Lines • Show All 235 Lines • Show Last 20 Lines |