netdev
[Top] [All Lists]

[PATCH] e1000 poll behavior

To: netdev@xxxxxxxxxxx
Subject: [PATCH] e1000 poll behavior
From: Robert Olsson <Robert.Olsson@xxxxxxxxxxx>
Date: Thu, 9 Dec 2004 17:07:17 +0100
Cc: Robert.Olsson@xxxxxxxxxxx
Sender: netdev-bounce@xxxxxxxxxxx
Hello!

Seems e1000 never gets into poll mode when tx_cleaned is false. Compare
irq's on RX interfaces eth0, eth2 in the forwarding test below.

Vanilla:
-------
Iface   MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flags
eth0   1500   0 3983334 8374749 8374749 6016848    111      0      0      0 BRU
eth1   1500   0      1      0      0      0 3982841      0      0      0 BRU
eth2   1500   0 4002156 8507930 8507930 5997844      5      0      0      0 BRU
eth3   1500   0      1      0      0      0 4001653      0      0      0 BRU

           CPU0       
 26:      66366   IO-APIC-level  eth0
 27:      75200   IO-APIC-level  eth1
 28:      66705   IO-APIC-level  eth2
 29:      75132   IO-APIC-level  eth3

--- drivers/net/e1000/e1000_main.c.orig 2004-12-09 17:49:56.000000000 +0100
+++ drivers/net/e1000/e1000_main.c      2004-12-09 19:05:07.000000000 +0100
@@ -2179,8 +2179,8 @@
        *budget -= work_done;
        netdev->quota -= work_done;
        
-       /* if no Rx and Tx cleanup work was done, exit the polling mode */
-       if(!tx_cleaned || (work_done < work_to_do) || 
+       /* if no Tx and not enough Rx work done, exit the polling mode */
+       if((!tx_cleaned && (work_done < work_to_do)) || 
                                !netif_running(netdev)) {
                netif_rx_complete(netdev);
                e1000_irq_enable(adapter);

Patched: 
-------
Iface   MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flags
eth0   1500   0 4193457 8283968 8283968 5806693     99      0      0      0 BRU
eth1   1500   0      1      0      0      0 4192308      0      0      0 BRU
eth2   1500   0 4190698 8441200 8441200 5809302      5      0      0      0 BRU
eth3   1500   0      1      0      0      0 4190171      0      0      0 BRU

           CPU0       
 26:        336   IO-APIC-level  eth0
 27:      58159   IO-APIC-level  eth1
 28:         64   IO-APIC-level  eth2
 29:      58228   IO-APIC-level  eth3

                                                --ro

<Prev in Thread] Current Thread [Next in Thread>