public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* questions about network device drivers
@ 2002-07-30 14:15 Abraham vd Merwe
  2002-07-30 15:48 ` Alan Cox
  0 siblings, 1 reply; 8+ messages in thread
From: Abraham vd Merwe @ 2002-07-30 14:15 UTC (permalink / raw)
  To: Linux Kernel Development

[-- Attachment #1: Type: text/plain, Size: 2483 bytes --]

Hi!

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() ?

I'd really appreciate it if someone could clear this up. Almost all the
source/docs I've looked at seems to contradict each other ):

also, since hard_start_xmit() is protected by xmit_lock, why are some
drivers (e.g. cs89x0.c) guarding against concurrent calls to
hard_start_xmit (see the spinlock in cs89x0.c:net_send_packet)?

is there any way to control alignment of sk_buff's that gets passed to this
function? e.g. if I want the buffer to be aligned on 16-bit boundary and/or
be padded to a 16-bit boundary - is there any way to tell the kernel to pass
the driver buffers with those characterestics?

get_stats() method
==================

when errors occur that have details error fields in the net_device_stats
structure, am I supposed to increment both the total error count and the
detailed error count or both? also, what about dropped packets?

e.g.

1. i drop a frame because there's no memory left to allocate a sk_buff when
I receive a packet. Do I increment rx_dropped, rx_errors, or both?

2. there's a crc error. do I increment rx_crc_errors and rx_errors or just
rx_crc_errors?

also, I noticed that many drivers keep a private copy of the
net_device_stats structure and just return a pointer to that structure in
the get_stats method. what prevents the other driver methods from racing
with the functions that gets passed this structure?

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...

general
=======

What is the difference between netif_wake_queue() and netif_start_queue()?

-- 

Regards
 Abraham

Humor in the Court:
Q.  And who is this person you are speaking of?
A.  My ex-widow said it.

__________________________________________________________
 Abraham vd Merwe - 2d3D, Inc.

 Device Driver Development, Outsourcing, Embedded Systems

  Cell: +27 82 565 4451         Snailmail:
   Tel: +27 21 761 7549            Block C, Aintree Park
   Fax: +27 21 761 7648            Doncaster Road
 Email: abraham@2d3d.co.za         Kenilworth, 7700
  Http: http://www.2d3d.com        South Africa


[-- Attachment #2: Type: application/pgp-signature, Size: 232 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: questions about network device drivers
  2002-07-30 15:48 ` Alan Cox
@ 2002-07-30 14:48   ` Abraham vd Merwe
  2002-07-30 14:57     ` Jeff Garzik
  2002-07-30 14:54   ` Jeff Garzik
  1 sibling, 1 reply; 8+ messages in thread
From: Abraham vd Merwe @ 2002-07-30 14:48 UTC (permalink / raw)
  To: Alan Cox; +Cc: Linux Kernel Development

[-- Attachment #1: Type: text/plain, Size: 1268 bytes --]

Hi Alan!

> > 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

In both cases, should I free the sk_buff structure or only if I return 0?
Also, if I understand you correctly, I should _only_ call netif_stop_queue()
if the function fails to transmit the packet?

What about cases where the packet will always fail, e.g. the frame length is
bigger than what the device supports. I take it in those cases I should
return 0, but should I call netif_stop_queue() as well?

-- 

Regards
 Abraham

Here there be tygers.

__________________________________________________________
 Abraham vd Merwe - 2d3D, Inc.

 Device Driver Development, Outsourcing, Embedded Systems

  Cell: +27 82 565 4451         Snailmail:
   Tel: +27 21 761 7549            Block C, Aintree Park
   Fax: +27 21 761 7648            Doncaster Road
 Email: abraham@2d3d.co.za         Kenilworth, 7700
  Http: http://www.2d3d.com        South Africa


[-- Attachment #2: Type: application/pgp-signature, Size: 232 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: questions about network device drivers
  2002-07-30 15:48 ` Alan Cox
  2002-07-30 14:48   ` Abraham vd Merwe
@ 2002-07-30 14:54   ` Jeff Garzik
  2002-07-30 15:04     ` Russell King
  1 sibling, 1 reply; 8+ messages in thread
From: Jeff Garzik @ 2002-07-30 14:54 UTC (permalink / raw)
  To: Alan Cox; +Cc: Abraham vd Merwe, Linux Kernel Development

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



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: questions about network device drivers
  2002-07-30 14:48   ` Abraham vd Merwe
@ 2002-07-30 14:57     ` Jeff Garzik
  0 siblings, 0 replies; 8+ messages in thread
From: Jeff Garzik @ 2002-07-30 14:57 UTC (permalink / raw)
  To: Abraham vd Merwe; +Cc: Alan Cox, Linux Kernel Development

Abraham vd Merwe wrote:
> Hi Alan!
> 
> 
>>>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
> 
> 
> In both cases, should I free the sk_buff structure or only if I return 0?
> Also, if I understand you correctly, I should _only_ call netif_stop_queue()
> if the function fails to transmit the packet?
> 
> What about cases where the packet will always fail, e.g. the frame length is
> bigger than what the device supports. I take it in those cases I should
> return 0, but should I call netif_stop_queue() as well?



free it if you are returning zero.  But of course, after the card has 
handled the packet.

If you set your MTU correctly, you shouldn't get frames larger than 
proper length.

netif_stop_queue and netif_start_queue and netif_wake_queue are your 
queue management tools.  _only_ enable the queue when there is room for 
more packets.

	Jeff



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: questions about network device drivers
  2002-07-30 14:54   ` Jeff Garzik
@ 2002-07-30 15:04     ` Russell King
  2002-07-31  8:53       ` Abraham vd Merwe
  0 siblings, 1 reply; 8+ messages in thread
From: Russell King @ 2002-07-30 15:04 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Alan Cox, Abraham vd Merwe, Linux Kernel Development

On Tue, Jul 30, 2002 at 10:54:35AM -0400, Jeff Garzik wrote:
> (lots of useful information)

Any chance of updating Documentation/networking/driver.txt to include
this useful information (even if its just appending the email from Alan
and yourself?)  I was looking for this information recently as well.

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: questions about network device drivers
  2002-07-30 14:15 questions about network device drivers Abraham vd Merwe
@ 2002-07-30 15:48 ` Alan Cox
  2002-07-30 14:48   ` Abraham vd Merwe
  2002-07-30 14:54   ` Jeff Garzik
  0 siblings, 2 replies; 8+ messages in thread
From: Alan Cox @ 2002-07-30 15:48 UTC (permalink / raw)
  To: Abraham vd Merwe; +Cc: Linux Kernel Development

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


> is there any way to control alignment of sk_buff's that gets passed to this
> function? e.g. if I want the buffer to be aligned on 16-bit boundary and/or
> be padded to a 16-bit boundary - is there any way to tell the kernel to pass
> the driver buffers with those characterestics?

There is not. You can expect just about every packet to be 16bit aligned

> when errors occur that have details error fields in the net_device_stats
> structure, am I supposed to increment both the total error count and the
> detailed error count or both? also, what about dropped packets?

total and specific error.

dropped - not sure. Its not a precise science since cards vary
themselves how their hardware accounts such things

> 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.

>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: questions about network device drivers
  2002-07-30 15:04     ` Russell King
@ 2002-07-31  8:53       ` Abraham vd Merwe
  0 siblings, 0 replies; 8+ messages in thread
From: Abraham vd Merwe @ 2002-07-31  8:53 UTC (permalink / raw)
  To: Russell King
  Cc: Jeff Garzik, Alan Cox, Abraham vd Merwe, Linux Kernel Development

[-- Attachment #1: Type: text/plain, Size: 988 bytes --]

Hi Russell!

> > (lots of useful information)
> 
> Any chance of updating Documentation/networking/driver.txt to include
> this useful information (even if its just appending the email from Alan
> and yourself?)  I was looking for this information recently as well.

I'm putting together a few notes on this and other network driver related
things. Will post a patch soon...

-- 

Regards
 Abraham

Unprovided with original learning, unformed in the habits of thinking,
unskilled in the arts of composition, I resolved to write a book.
		-- Edward Gibbon

__________________________________________________________
 Abraham vd Merwe - 2d3D, Inc.

 Device Driver Development, Outsourcing, Embedded Systems

  Cell: +27 82 565 4451         Snailmail:
   Tel: +27 21 761 7549            Block C, Aintree Park
   Fax: +27 21 761 7648            Doncaster Road
 Email: abraham@2d3d.co.za         Kenilworth, 7700
  Http: http://www.2d3d.com        South Africa


[-- Attachment #2: Type: application/pgp-signature, Size: 232 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: questions about network device drivers
@ 2002-07-31 11:14 jamal
  0 siblings, 0 replies; 8+ messages in thread
From: jamal @ 2002-07-31 11:14 UTC (permalink / raw)
  To: Abraham vd Merwe; +Cc: linux-kernel


http://www.firstfloor.org/~andi/softnet/

Slightly dated, mostly still valid.

cheers,
jamal


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2002-07-31 11:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-07-30 14:15 questions about network device drivers Abraham vd Merwe
2002-07-30 15:48 ` Alan Cox
2002-07-30 14:48   ` Abraham vd Merwe
2002-07-30 14:57     ` Jeff Garzik
2002-07-30 14:54   ` Jeff Garzik
2002-07-30 15:04     ` Russell King
2002-07-31  8:53       ` Abraham vd Merwe
  -- strict thread matches above, loose matches on Subject: below --
2002-07-31 11:14 jamal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox