82563: fixes TX overrun/replenish bug
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 17 Sep 2014 23:11:16 +0000 (16:11 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 17 Sep 2014 23:17:00 +0000 (16:17 -0700)
commit71b17514bc70bc143987cfc8a4890e441145fc92
treeea88de3eb486e55ab3cc89dd7172edf463f9c04d
parent38f03cd6d7042b3d80b58567cec04578cdcf0de0
82563: fixes TX overrun/replenish bug

When replenish was called without being allowed to sleep, it could bail out of
its loop early and fail to update the RDT (both ctlr and HW).  If it bails out
after having replenished some buffers, the RDT no longer matches where block
pointers should/should not be.

For reference, RDT points to an empty buffer (bp = 0).  RDH points to the first
full one.  Replenish will fill up to one slot prior to RDH, so that the queue
is full when there is one empty spot at RDH - 1.
kern/drivers/net/ether82563.c