[vortex-bug] Tx int. mitigation

Bogdan Costescu Bogdan.Costescu@IWR.Uni-Heidelberg.De
Fri, 15 Dec 2000 20:57:45 +0100 (CET)

On Fri, 15 Dec 2000, Donald Becker wrote:

> The upper levels care if the packets have been transmitted.
> At 10Mbps the packets have not been transmitted, and the upper levels notice
> this and don't schedule that data for retransmission.  (This is a
> oversimplification, but a good mental model when writing a driver.)
> At 100Mbps the packets have actually been transmitted, and the transmitter
> is now idle.  Yet the skbuffs are locked and charged against the socket's
> memory allocation so it won't try to transmit again.  (Again, an
> oversimplification, but a good mental model.)

That's something new for me! IOW, the upper levels have 2 indicators about
transmission: tbusy and the skbuffs themselves. In this case, you're
right, nothing else can be done...

> The upper layers on older kernels will occasionally call start xmit with
> dev->tbusy set.  But this only happens with packet retransmissions, not with
> normal-path packets.  Retransmissions occur on the order of seconds or even
> minutes, not microseconds.

I beg to disagree! The first (code) line of start_xmit() is:

	if (test_and_set_bit(0, (void*)&dev->tbusy) != 0)

If I understood it right, test_and_set_bit() returns the value found in
tbusy before setting it. If it's set, the check for Tx timeout is made; as
we get Tx timeout reports, it means that on actual kernels (2.2),
start_xmit() can be called with tbusy set! So it's not a question of
"older kernels".
Even more, TX_TIMEOUT is set at 400*HZ/1000 (or 2*HZ in your drivers)
which means sub-second/2 seconds interval. If the upper levels would call
the function more rarely in the retransmission case, there would be no
need for such a short interval check in the driver. The way I understood
this check is that the upper levels _will_ call start_xmit() quite often
(HZ granularity) and if tbusy is set for enough time, tx_timeout() should
be called.

Somehow, I cannot correlate between what you say and what I see...


Bogdan Costescu

IWR - Interdisziplinaeres Zentrum fuer Wissenschaftliches Rechnen
Universitaet Heidelberg, INF 368, D-69120 Heidelberg, GERMANY
Telephone: +49 6221 54 8869, Telefax: +49 6221 54 8868
E-mail: Bogdan.Costescu@IWR.Uni-Heidelberg.De