netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* RE: e100 "Ferguson" release
@ 2003-08-05  3:45 Feldman, Scott
  2003-08-05  5:29 ` Jeff Garzik
  2003-08-05  7:16 ` David S. Miller
  0 siblings, 2 replies; 21+ messages in thread
From: Feldman, Scott @ 2003-08-05  3:45 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev

New one:

	http://sf.net/projects/e1000, e100-3.0.0_dev12.tar.gz

> Comments:

Thanks Jeff!
 
> * (API) Does the out-of-tx-resources condition in 
> e100_xmit_frame ever really happen?  I am under the
> impression that returning non-zero in ->hard_start_xmit
> results in the packet sometimes being requeued and
> sometimes dropped.  I prefer to guarantee a more-steady 
> state, by simply dropping the packet unconditionally,
> when this uncommon condition occurs.  So, I would
> a) mark the failure condition with unlikely(), and
> b) if the condition occurs, simply drop the packet 
> (tx_dropped++, kfree 
> skb), and return zero.

Stop the queue also?

if(unlikely(e100_exec_cb(nic, skb, e100_xmit_prepare) == -ENOMEM)) {
        netif_stop_queue(netdev);
        nic->net_stats.tx_dropped++;
        dev_kfree_skb(skb);
        return 0;
}

Added some more likely/unlikely's in the perf paths.
 
> * (minor) for completeness, you should limit the PCI class in the 
> pci_device_id table to PCI_CLASS_NETWORK_ETHERNET.  There are 
> one-in-a-million cases where this matters, but it's usually a 
> BIOS bug. Still, it's there in pci_device_id table, and it's an easy 
> change, so might as well use it.

OK

> * (style) your struct config definition is terribly clever.  
> perhaps too clever, making it unreadable?  Not a specific complaint,
> mind you, just something that caught my eye.

Then the driver would be perfect.  We can't have that.  ;-)

> * (minor) in tg3, my own benchmarks and experiments showed it 
> helped to explictly use ____cacheline_aligned markers when
> defining certain sections of members in struct tg3
> (or struct nic, in e100's case).  You already clearly pay
> attention to member layout WRT cache effects, but if 
> you have a clear dividing line, or lines, in struct nic you can use 
> _____cacheline_aligned for even greater benefit.  At a 
> minimum test it with a cpu-usage-measuring benchmark like ttcp,
> though, of course :) 

OK

> * (extremely minor) some people (like me :)) consider dead reads like 
> the readb() call in e100_write_flush

OK
 
> * (major?) Aren't there some clunky e100 adapters that don't do MMIO? 
> Do we care?

Not that I'm aware of.  Current e100 doesn't support them if they're out
there.
 
> * I would love to see feedback from people testing this 
> driver on ppc64 and sparc64, particularly.

Me too.  Things seem to work on ppc (Mac) and ia64.

> * (style, minor) My eyes would prefer functions like e100_hw_reset to 
> have a few more blank lines in them, spreading code+comment 
> blocks out a  bit.

OK
 
> * (extremely minor) one wonders if you really need the write flush in 
> mdio_ctrl.  If the flush is removed, the same net effect 
> appears to occur.

Good catch.

> * (boring but needed) convert all the magic numbers in e100_configure 
> into constants, or at least add comments describing the magic 
> numbers. If the value is just one bit, you might simply append "/* 
> true */", for example.  The general idea is to make the "member name =

> value" list a little bit more readable to somebody who doesn't know
the 
> hardware, and struct config, intimately.

That _was_ boring.
 
> * IIRC Donald's MII phy scanning code scans MII phy ids like this: 
> 1..31,0.  Or maybe 1..31, and then 0 iff no MII phys were found.  In 
> general I would prefer to follow his eepro100.c probe order.  
> Some phys need this because they will report on both phy id #0 (which 
> is magical) and phy id #(non-zero).  Donald would know more than me,
here.

[kernel] eepro100 gets the ID from the eeprom, so no scanning there.
Current e100 goes 1, 0..31, which is what we've always done, IIRC.

> * Is it easy to support MII phy interrupts?  It would be nice 
> to get a callback that was handled immediately, on phys that 
> do support such interrupts.

I don't see those being passed through and handled by the MAC.

> * do we care about spinlocks around the update_stats and 
> get_stats code?

Not sure.  update_stats runs in a timer callback.  Can get_stats jump
in?

> * (bugs) in e100_up, you should undo mod_timer [major] and 
> netif_start_queue [minor], if request_irq fails.  And maybe stop the 
> receiver, too?

OK

> * for all constants 0xffffffff (and others as well if you so choose), 
> prefer the C99 suffix to a cast.  This is particularly relevant in 
> pci_set_dma_mask calls, where one should be using 0xffffffffULL, but 
> applies to other constants as well.

I didn't see any other constant casts besides the pci_set_dma_mask call.
That one is fixed.

> * (potential races) in e100_probe, you want to call 
> register_netdev as basically the last operation that can
> fail, if possible.  Particularly, you need to move the
> PCI API operations above register_netdev. 
> Remember, register_netdev winds up calling /sbin/hotplug, 
> which in turn calls programs that will want to start using
> the interface.  So you need to have everything set up by
> that point, really.

OK (nice catch).
 
> * in e100_probe, "if(nic->csr == 0UL) {" should really just test for 
> NULL, because ioremap is defined to return a pointer...

OK
 
> * (minor) use a netif_msg_xxx wrapper/constant in 
> e100_init_module test?

Can't - don't have nic->msg_enable allocated yet.  :(

-scott

^ permalink raw reply	[flat|nested] 21+ messages in thread
* RE: e100 "Ferguson" release
@ 2003-08-05 15:19 Feldman, Scott
  2003-08-05 15:24 ` Jeff Garzik
  2003-08-05 15:44 ` Felix Radensky
  0 siblings, 2 replies; 21+ messages in thread
From: Feldman, Scott @ 2003-08-05 15:19 UTC (permalink / raw)
  To: Felix Radensky, Ben Greear; +Cc: Jeff Garzik, netdev

> I've also noticed that the number of hard_start_xmit failures 
> in e1000 has increased significantly in version 5.1.13-k1. In 
> version 5.0.43-k1 the number of failures was much smaller.

Interesting.  Felix, would you undo the change[1] below in 5.1.13-k1 and
see what happens?  With the change below, 5.1.13 would be more
aggressive on Tx cleanup, so we'll be quicker waking the queue than
before. 

-scott

        for(i = 0; i < E1000_MAX_INTR; i++)
-               if(!e1000_clean_rx_irq(adapter) &&
+               if(!e1000_clean_rx_irq(adapter) &
                   !e1000_clean_tx_irq(adapter))
                        break;

[1] Something still bothers me about this new form where we're mixing a
bit-wise operator with logical operands.  Should this bother me?

^ permalink raw reply	[flat|nested] 21+ messages in thread
* RE: e100 "Ferguson" release
@ 2003-08-05 14:28 Feldman, Scott
  0 siblings, 0 replies; 21+ messages in thread
From: Feldman, Scott @ 2003-08-05 14:28 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev

> > if(unlikely(e100_exec_cb(nic, skb, e100_xmit_prepare) == -ENOMEM)) {
> >         netif_stop_queue(netdev);
> >         nic->net_stats.tx_dropped++;
> >         dev_kfree_skb(skb);
> >         return 0;
> > }
> 
> Yes.  I would also printk(KERN_ERR "we have a bug!") or 
> somesuch, like several other drivers do, too.

It's there, sorry, was trying to keep the code snippet small.

> >>* (minor) use a netif_msg_xxx wrapper/constant in
> >>e100_init_module test?
> > 
> > 
> > Can't - don't have nic->msg_enable allocated yet.  :(
> 
> You could always use "(1 << debug) - 1"... :)  I dunno if it's worth 
> worrying about.

(1 << debug) - 1) & NETIF_MSG_DRV is what's there now.

-scott

^ permalink raw reply	[flat|nested] 21+ messages in thread
* e100 "Ferguson" release
@ 2003-08-03  4:34 Feldman, Scott
  2003-08-03  6:06 ` Jeff Garzik
  0 siblings, 1 reply; 21+ messages in thread
From: Feldman, Scott @ 2003-08-03  4:34 UTC (permalink / raw)
  To: netdev

New development version:

	http://sf.net/projects/e1000, e100-3.0.0_dev11.tar.gz

Many thanks to JC [jchapman@katalix.com] for exploring the small packet
performance w/ and w/o NAPI.  This version includes one of his
optimization; others may follow, but I wanted to get this goodness out
now.

* added opportunistic fast loop (no udelays) in 
  e100_exec_cmd to wait for previous cmd to be
  accepted before queuing next cmd.  Boost 
  small packet performance.  [jchapman@katalix.com].
* Use correct versions of dev_kfree_skb for depending
  on possible contexts.  [jchapman@katalix.com].
* Added SET_NETDEV_DEV().

Looking for more testing on non-IA archs, power management, cardbus
nics, and WoL.

-scott

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

end of thread, other threads:[~2003-08-10  9:00 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-08-05  3:45 e100 "Ferguson" release Feldman, Scott
2003-08-05  5:29 ` Jeff Garzik
2003-08-05  7:16 ` David S. Miller
  -- strict thread matches above, loose matches on Subject: below --
2003-08-05 15:19 Feldman, Scott
2003-08-05 15:24 ` Jeff Garzik
2003-08-10  9:00   ` Felix Radensky
2003-08-05 15:44 ` Felix Radensky
2003-08-05 14:28 Feldman, Scott
2003-08-03  4:34 Feldman, Scott
2003-08-03  6:06 ` Jeff Garzik
2003-08-03  6:12   ` Jeff Garzik
2003-08-03  7:32   ` Ben Greear
2003-08-03  7:32     ` David S. Miller
2003-08-04  3:09       ` David Brownell
2003-08-04  3:08         ` David S. Miller
2003-08-04  3:45           ` David Brownell
2003-08-04  3:46             ` David S. Miller
2003-08-04  4:08               ` David Brownell
2003-08-04  4:13                 ` David S. Miller
2003-08-04 17:38                   ` David Brownell
2003-08-05  8:23     ` Felix Radensky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).