Re: questions about network device drivers

Jeff Garzik
2002-07-30T14:51:14Z

Alan Cox wrote:
> On Tue, 2002-07-30 at 15:15, Abraham vd Merwe wrote:
>
>>hard_start_xmit() method
>>========================
>>
>>when should this function return 0 and when should it return 1 and in which
>>cases should it do netif_stop_queue() and/or free the dev_kfree_skb() ?
>
>
> 0 - OK
> 1 - I am busy, give me it later.
>
> If you return 1 be sure to netif_stop_queue. The netif_wake_queue will
> continue transmission

I was recently corrected in this... for modern drivers it's really a
bug (see drivers/net/tg3.c::tg3_start_xmit). The queue should be
managed such that it is awake only when there is room for more packets.

For example, one code path (not the default one) in dev_queue_xmit will
just drop the skb, not requeue it for later.

>>tx_timeout() method
>>=================
>>
>>there is no way to return an error in the tx_timeout method. what should I
>>do when an error occurs in that function (e.g. I'm unable to reset the
>>controller)? panic? that seems a bit excessive...
>
>
> Try again ? If that fails I guess you initiate the self destruct
> sequence for just that driver.

The typical method is to reset the NIC hardware, and either requeue
waiting packets or drop all the packets you have waiting on the floor.
tx_timeout is a generic catch-all that normally happens when the NIC is
wedged.

Jeff