From patchwork Fri Sep 30 05:24:49 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kirsher, Jeffrey T" X-Patchwork-Id: 117024 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id E4EEC1007D6 for ; Fri, 30 Sep 2011 15:25:11 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755216Ab1I3FZC (ORCPT ); Fri, 30 Sep 2011 01:25:02 -0400 Received: from mga03.intel.com ([143.182.124.21]:2856 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754239Ab1I3FZA (ORCPT ); Fri, 30 Sep 2011 01:25:00 -0400 Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga101.ch.intel.com with ESMTP; 29 Sep 2011 22:24:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.68,465,1312182000"; d="scan'208";a="57239743" Received: from unknown (HELO jtkirshe-mobl.amr.corp.intel.com) ([10.255.15.18]) by azsmga001.ch.intel.com with ESMTP; 29 Sep 2011 22:24:59 -0700 From: Jeff Kirsher To: davem@davemloft.net Cc: Mika Lansirinne , netdev@vger.kernel.org, gospo@redhat.com, Jeff Kirsher Subject: [net-next 09/11] ixgbe: get pauseparam autoneg Date: Thu, 29 Sep 2011 22:24:49 -0700 Message-Id: <1317360291-5576-10-git-send-email-jeffrey.t.kirsher@intel.com> X-Mailer: git-send-email 1.7.6.2 In-Reply-To: <1317360291-5576-1-git-send-email-jeffrey.t.kirsher@intel.com> References: <1317360291-5576-1-git-send-email-jeffrey.t.kirsher@intel.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: 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 Reviewed-by: Esa-Pekka Pyokkimies Signed-off-by: Jeff Kirsher --- drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 8 +------- 1 files changed, 1 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c index db255fc..10ea29f 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c @@ -372,13 +372,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;