Subject: Re: ixgbe: Question about Flow Control on 10G

From: dom <[email-masked]>
Date: Wed, 15 Oct 2014 11:56:34 -0700

On 10/14/2014 01:54 PM, Tantilov, Emil S wrote:
>> -----Original Message-----
>> From: [email-masked] [mailto:netdev-
>> [email-masked]] On Behalf Of dom
>> Sent: Tuesday, October 14, 2014 12:01 PM
>> To: Skidmore, Donald C; [email-masked]
>> Subject: ixgbe: Question about Flow Control on 10G
>>
>> Hi
>>
>> I have a question about the ixgbe driver's handling of
>> 'ethtool -a ethX'
>> when the NIC is using fibre.
>>
>> Specifically I don't understand the code introduced by this
>> commit:
>>
>> commit 73d80953dfd1d5a92948005798c857c311c2834b
>> Author: Don Skidmore <[email-masked]>
>> Date:   Wed Jul 31 02:19:24 2013 +0000
>> Subject: ixgbe: fix fc autoneg ethtool reporting.
>>
>> The function introduced the function:
>>         ixgbe_device_supports_autoneg_fc()
>>
>> which gets called by
>> ixgbe_get_pauseparam()/ixgbe_set_pauseparam().
>>
>> specifically there is a  case in
>> ixgbe_device_supports_autoneg_fc()
>>
>>      case ixgbe_media_type_fiber_qsfp:
>>      case ixgbe_media_type_fiber:
>>          hw->mac.ops.check_link(hw, &speed, &link_up,
>> false);
>>          /* if link is down, assume supported */
>>          if (link_up)
>>              supported = speed == IXGBE_LINK_SPEED_1GB_FULL ?
>>                  true : false;
>>
>> If link_up=1 then why is supported only true for a
>> speed=IXGBE_LINK_SPEED_1GB_FULL ?
>>
>> Why is Flow Control not supported for IXGBE_LINK_SPEED_10GB_FULL ?
> For SFP modules (media_type_fiber) flow control autoneg is not supported at 10gig. You can still set flow control manually to enabled/disabled, just not autoneg.
>
> Thanks,
> Emil
Hi Emil

Thank you for the quick answer.  I have a one follow-up question if I may...

We noticed that back in 3.2.9 (before 73d80953dfd basically) the 
behaviour was different for 10G fibre.  i.e.  autonegotiate showed 'on'.

# ethtool -a eth1
Pause parameters for eth1:
Autonegotiate:  on
RX:             on
TX:             on

The code:
     if (hw->fc.disable_fc_autoneg ||
         (hw->fc.current_mode == ixgbe_fc_none))
         pause->autoneg = 0;
     else
         pause->autoneg = 1;

So I assume this old output from 'ethtool -a' for autogen was just 
wrong, is that correct ?

[I'm asking cos I _know_ my h/w collegues are going to ask why the change.]

Thanks again
dom