[vortex-bug] Tx int. mitigation

Donald Becker becker@scyld.com
Thu, 14 Dec 2000 19:36:36 -0500 (EST)


On Thu, 14 Dec 2000, Bogdan Costescu wrote:
> On Thu, 14 Dec 2000, Donald Becker wrote:
> 
> > You should be calculating the Tx gap the other way.
> >   It only takes (10 minimum sized packets at 100Mbps) about 100usec to empty
> >     the Tx queue.
> >   You will wait until the next timer tick to refill.
> 
> No! You will see that the Tx ring is full when trying to re-fill from
> start_xmit() and go to step 2 of Giuseppe's scheme.

The above scenario is where the Tx ring is full, and dev->tbusy is set.

> Freeing the Tx ring is done in two places:
> - in start_xmit() if a packet comes fast enough
> - in ISR if no packet came and the hardware timer expired

Here is the issue: manipulating the timer is very expensive.
And waiting until the queue is full to set the timer means that you might
have 9 already transmitted skbuffs sitting stagnant in the queue preventing
retransmission.

> Exactly, which means that the upper layer will call start_xmit() again and
> you can free the tail of the queue at that moment.

But the upper layer won't call it with dev->tbusy set.


Donald Becker				becker@scyld.com
Scyld Computing Corporation		http://www.scyld.com
410 Severn Ave. Suite 210		Second Generation Beowulf Clusters
Annapolis MD 21403			410-990-9993