From patchwork Thu Mar 20 08:32:57 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kirsher, Jeffrey T" X-Patchwork-Id: 332027 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 EC5342C00A1 for ; Thu, 20 Mar 2014 19:34:54 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755935AbaCTIes (ORCPT ); Thu, 20 Mar 2014 04:34:48 -0400 Received: from mga09.intel.com ([134.134.136.24]:8080 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755487AbaCTIdu (ORCPT ); Thu, 20 Mar 2014 04:33:50 -0400 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga102.jf.intel.com with ESMTP; 20 Mar 2014 01:29:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.97,693,1389772800"; d="scan'208";a="503652945" Received: from unknown (HELO jtkirshe-mobl.amr.corp.intel.com) ([10.255.13.129]) by orsmga002.jf.intel.com with ESMTP; 20 Mar 2014 01:33:19 -0700 From: Jeff Kirsher To: davem@davemloft.net Cc: Don Skidmore , netdev@vger.kernel.org, gospo@redhat.com, sassmann@redhat.com, Arun Sharma , Emil Tantilov , Jeff Kirsher Subject: [net-next 07/15] ixgbe: fix errors related to protected AUTOC calls Date: Thu, 20 Mar 2014 01:32:57 -0700 Message-Id: <1395304385-6874-8-git-send-email-jeffrey.t.kirsher@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1395304385-6874-1-git-send-email-jeffrey.t.kirsher@intel.com> References: <1395304385-6874-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: Don Skidmore Found several incorrect conditionals after calling the prot_autoc_* functions. Likewise we weren't always freeing the FWSW semaphore after grabbing it. This would lead to DA cables being unable to link along with possible other errors. CC: Arun Sharma CC: Emil Tantilov Signed-off-by: Don Skidmore Tested-by: Phil Schmitt Signed-off-by: Jeff Kirsher --- drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 10 ++++++---- drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 10 +++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c index 3bc9b67..572cce4 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c @@ -210,7 +210,7 @@ static s32 prot_autoc_read_82599(struct ixgbe_hw *hw, bool *locked, if (ixgbe_verify_lesm_fw_enabled_82599(hw)) { ret_val = hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM); - if (!ret_val) + if (ret_val) return IXGBE_ERR_SWFW_SYNC; *locked = true; @@ -245,8 +245,10 @@ static s32 prot_autoc_write_82599(struct ixgbe_hw *hw, u32 autoc, bool locked) if (!locked && ixgbe_verify_lesm_fw_enabled_82599(hw)) { ret_val = hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM); - if (!ret_val) + if (ret_val) return IXGBE_ERR_SWFW_SYNC; + + locked = true; } IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc); @@ -1094,7 +1096,7 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw, if (autoc != start_autoc) { /* Restart link */ status = hw->mac.ops.prot_autoc_write(hw, autoc, false); - if (!status) + if (status) goto out; /* Only poll for autoneg to complete if specified to do so */ @@ -1277,7 +1279,7 @@ mac_reset_top: status = hw->mac.ops.prot_autoc_write(hw, hw->mac.orig_autoc, false); - if (!status) + if (status) goto reset_hw_out; } diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c index 6149c65..38ca240 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c @@ -143,7 +143,7 @@ static s32 ixgbe_setup_fc(struct ixgbe_hw *hw) case ixgbe_media_type_backplane: /* some MAC's need RMW protection on AUTOC */ ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, ®_bp); - if (!ret_val) + if (ret_val) goto out; /* only backplane uses autoc so fall though */ @@ -2723,14 +2723,14 @@ s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index) if (!link_up) { ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, &autoc_reg); - if (!ret_val) + if (ret_val) goto out; autoc_reg |= IXGBE_AUTOC_AN_RESTART; autoc_reg |= IXGBE_AUTOC_FLU; ret_val = hw->mac.ops.prot_autoc_write(hw, autoc_reg, locked); - if (!ret_val) + if (ret_val) goto out; IXGBE_WRITE_FLUSH(hw); @@ -2760,14 +2760,14 @@ s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index) bool locked = false; ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, &autoc_reg); - if (!ret_val) + if (ret_val) goto out; autoc_reg &= ~IXGBE_AUTOC_FLU; autoc_reg |= IXGBE_AUTOC_AN_RESTART; ret_val = hw->mac.ops.prot_autoc_write(hw, autoc_reg, locked); - if (!ret_val) + if (ret_val) goto out; led_reg &= ~IXGBE_LED_MODE_MASK(index);