Subject: Re: [PATCH -rt DO NOT APPLY] Fix for tg3 networking lockup

From: "Michael Chan" <[email-masked]>
Date: Fri, 25 Aug 2006 15:55:33 -0700

On Fri, 2006-08-25 at 22:33 +0000, Marc Bevand wrote:

> Still, it would be great if ASF could be disabled, because I have
> noticed that when ASF is enabled, the tg3 driver automatically disables
> TSO (TCP Segmentation Offloading). Here is a dmesg output from a server
> where I am seeing that behavior:
> 
>   eth0: Tigon3 [partno(BCM95704A6) rev 2100 PHY(5704)] (PCIX:133MHz:64-bit) \
>     10/100/1000BaseT Ethernet 00:30:48:59:c4:94
>   eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[1] Split[0] WireSpeed[1] TSOcap[0]
>   [...]
>   eth1: Tigon3 [partno(BCM95704A6) rev 2100 PHY(5704)] (PCIX:133MHz:64-bit) \
>     10/100/1000BaseT Ethernet 00:30:48:59:c4:95
>   eth1: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] Split[0] WireSpeed[1] TSOcap[1]
> 
> Both interfaces are fundamentally TSO-capable, but since ASF is enabled
> on eth0, tg3 disables TSO on this interface. Of course at this point it
> is not even possible to use ethtool to re-enable it because the driver
> considers eth0 as not TSO-capable at all.
> 

The reason is that TSO on 5704 and older chips is done by firmware.  ASF
is also implemented by firmware.  If ASF is enabled, there is no room to
do TSO and ASF at the same time.

Firmware-based TSO is actually slower than no TSO.  The only benefit is
a little better CPU utilization.

On the newer chips, TSO is done by hardware which solves both the ASF
and throughput problems.