netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ixgbe: get pauseparam autoneg
       [not found] <op.v1ozj4zk6ywr33@esapekka-pc.rad1>
@ 2011-09-16  6:20 ` Esa-Pekka Pyokkimies
  2011-09-16  8:19   ` Jeff Kirsher
  0 siblings, 1 reply; 2+ messages in thread
From: Esa-Pekka Pyokkimies @ 2011-09-16  6:20 UTC (permalink / raw)
  To: netdev; +Cc: mika.lansirinne

There is a problem in the ixgbe driver with the reporting of the flow
control parameters. The autoneg parameter is shown to be of if
*either* it really is off, or current modes for both tx and rx are off.

The problem is seen when the parameters are read or set when the link
is down. In this case, the driver sees that tx and rx are currently off
and therefore autoneg parameter is incorrectly reported to be off too.
Also, the ethtool binary can not set the autoneg off since it sees that
it already is. When a link later comes up, the autonegotiation is
carried out normally and the driver later on reports the autoneg
parameter to be on (as it is) and then it can also be changed with
ethtool.

The patch is made against v3.0 kernel, but the problem seems to be there
since v2.6.30-rc1.

Reviewer comments: What we are trying to do is to disable flow control
while the cable is disconnected. Since ixgbe defaults to full flow
control, we call ethtool -A autoneg off rx off tx off while the cable
is disconnected. This doesn't work, because the driver sets
hw->fc.current_mode = ixgbe_fc_none if the cable is unplugged.
ixgbe_get_pauseparam() then reports to ethtool that nothing needs to be
done. The code fixes this, but it might have some unknown consequences.

Signed-off-by: Mika Lansirinne <mika.lansirinne@stonesoft.com>
Reviewed-by: Esa-Pekka Pyokkimies <esa-pekka.pyokkimies@stonesoft.com>
Cc: Tantilov, Emil S <emil.s.tantilov@intel.com>
---
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c  
b/drivers/net/ixgbe/ixgbe_ethtool.c
index 82d4244..db27c24 100644
--- a/drivers/net/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ixgbe/ixgbe_ethtool.c
@@ -368,13 +368,7 @@ static void ixgbe_get_pauseparam(struct net_device  
*netdev,
         struct ixgbe_adapter *adapter = netdev_priv(netdev);
         struct ixgbe_hw *hw = &adapter->hw;

-       /*
-        * Flow Control Autoneg isn't on if
-        *  - we didn't ask for it OR
-        *  - it failed, we know this by tx & rx being off
-        */
-       if (hw->fc.disable_fc_autoneg ||
-           (hw->fc.current_mode == ixgbe_fc_none))
+       if (hw->fc.disable_fc_autoneg)
                 pause->autoneg = 0;
         else
                 pause->autoneg = 1;

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

* Re: [PATCH] ixgbe: get pauseparam autoneg
  2011-09-16  6:20 ` [PATCH] ixgbe: get pauseparam autoneg Esa-Pekka Pyokkimies
@ 2011-09-16  8:19   ` Jeff Kirsher
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff Kirsher @ 2011-09-16  8:19 UTC (permalink / raw)
  To: Esa-Pekka Pyokkimies; +Cc: netdev, mika.lansirinne

On Thu, Sep 15, 2011 at 23:20, Esa-Pekka Pyokkimies
<esa-pekka.pyokkimies@stonesoft.com> wrote:
> There is a problem in the ixgbe driver with the reporting of the flow
> control parameters. The autoneg parameter is shown to be of if
> *either* it really is off, or current modes for both tx and rx are off.
>
> The problem is seen when the parameters are read or set when the link
> is down. In this case, the driver sees that tx and rx are currently off
> and therefore autoneg parameter is incorrectly reported to be off too.
> Also, the ethtool binary can not set the autoneg off since it sees that
> it already is. When a link later comes up, the autonegotiation is
> carried out normally and the driver later on reports the autoneg
> parameter to be on (as it is) and then it can also be changed with
> ethtool.
>
> The patch is made against v3.0 kernel, but the problem seems to be there
> since v2.6.30-rc1.
>
> Reviewer comments: What we are trying to do is to disable flow control
> while the cable is disconnected. Since ixgbe defaults to full flow
> control, we call ethtool -A autoneg off rx off tx off while the cable
> is disconnected. This doesn't work, because the driver sets
> hw->fc.current_mode = ixgbe_fc_none if the cable is unplugged.
> ixgbe_get_pauseparam() then reports to ethtool that nothing needs to be
> done. The code fixes this, but it might have some unknown consequences.
>
> Signed-off-by: Mika Lansirinne <mika.lansirinne@stonesoft.com>
> Reviewed-by: Esa-Pekka Pyokkimies <esa-pekka.pyokkimies@stonesoft.com>
> Cc: Tantilov, Emil S <emil.s.tantilov@intel.com>
> ---
> diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c
> b/drivers/net/ixgbe/ixgbe_ethtool.c
> index 82d4244..db27c24 100644
> --- a/drivers/net/ixgbe/ixgbe_ethtool.c
> +++ b/drivers/net/ixgbe/ixgbe_ethtool.c
> @@ -368,13 +368,7 @@ static void ixgbe_get_pauseparam(struct net_device
> *netdev,
>        struct ixgbe_adapter *adapter = netdev_priv(netdev);
>        struct ixgbe_hw *hw = &adapter->hw;
>
> -       /*
> -        * Flow Control Autoneg isn't on if
> -        *  - we didn't ask for it OR
> -        *  - it failed, we know this by tx & rx being off
> -        */
> -       if (hw->fc.disable_fc_autoneg ||
> -           (hw->fc.current_mode == ixgbe_fc_none))
> +       if (hw->fc.disable_fc_autoneg)
>                pause->autoneg = 0;
>        else
>                pause->autoneg = 1;
> --

Thanks!  I have applied this patch to my queue.

-- 
Cheers,
Jeff

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

end of thread, other threads:[~2011-09-16  8:19 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <op.v1ozj4zk6ywr33@esapekka-pc.rad1>
2011-09-16  6:20 ` [PATCH] ixgbe: get pauseparam autoneg Esa-Pekka Pyokkimies
2011-09-16  8:19   ` Jeff Kirsher

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