From patchwork Fri Sep 21 16:36:20 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 185828 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 E2E962C0079 for ; Sat, 22 Sep 2012 02:36:27 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753685Ab2IUQgX (ORCPT ); Fri, 21 Sep 2012 12:36:23 -0400 Received: from cmexedge2.ext.emulex.com ([138.239.224.100]:34660 "EHLO CMEXEDGE2.ext.emulex.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751932Ab2IUQgW (ORCPT ); Fri, 21 Sep 2012 12:36:22 -0400 Received: from CMEXHTCAS1.ad.emulex.com (138.239.115.217) by CMEXEDGE2.ext.emulex.com (138.239.224.100) with Microsoft SMTP Server (TLS) id 14.2.283.3; Fri, 21 Sep 2012 09:37:07 -0700 Received: from akhaparde-VBox (138.239.131.157) by smtp.emulex.com (138.239.115.207) with Microsoft SMTP Server (TLS) id 14.2.283.3; Fri, 21 Sep 2012 09:36:22 -0700 Date: Fri, 21 Sep 2012 11:36:20 -0500 From: Ajit Khaparde To: CC: Subject: [PATCH net-next] be2net: Ignore spurious UE indication from NIC Message-ID: <20120921163620.GA6147@akhaparde-VBox> Reply-To: Ajit Khaparde MIME-Version: 1.0 Content-Disposition: inline X-URL: http://www.emulex.com Organization: Emulex Corp User-Agent: "Ajit's Mutt" X-OS: Linux i686 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Ignore spurious UE indication seen on some platforms. Consider the error as un-recoverable only when the bits stay high during second sampling. Signed-off-by: Ajit Khaparde --- drivers/net/ethernet/emulex/benet/be.h | 2 ++ drivers/net/ethernet/emulex/benet/be_main.c | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h index 5b622993..3d4a7bc 100644 --- a/drivers/net/ethernet/emulex/benet/be.h +++ b/drivers/net/ethernet/emulex/benet/be.h @@ -401,6 +401,8 @@ struct be_adapter { bool eeh_error; bool fw_timeout; bool hw_error; + u32 ue_lo; + u32 ue_hi; u32 port_num; bool promiscuous; diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index 84379f4..e970f77 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c @@ -2105,6 +2105,7 @@ void be_detect_error(struct be_adapter *adapter) u32 ue_lo = 0, ue_hi = 0, ue_lo_mask = 0, ue_hi_mask = 0; u32 sliport_status = 0, sliport_err1 = 0, sliport_err2 = 0; u32 i; + struct device *dev = &adapter->pdev->dev; if (be_crit_error(adapter)) return; @@ -2129,13 +2130,22 @@ void be_detect_error(struct be_adapter *adapter) ue_lo = (ue_lo & ~ue_lo_mask); ue_hi = (ue_hi & ~ue_hi_mask); + if (ue_lo != adapter->ue_lo || ue_hi != adapter->ue_hi) { + dev_err(dev, "UE read: 0x%x/0x%x\n", ue_lo, ue_hi); + goto done; + } + } + + if (ue_lo == 0xffffffff || ue_hi == 0xffffffff) { + adapter->eeh_error = true; + dev_err(dev, "PCI slot disconnected\n"); + goto done; } if (ue_lo || ue_hi || sliport_status & SLIPORT_STATUS_ERR_MASK) { adapter->hw_error = true; - dev_err(&adapter->pdev->dev, - "Error detected in the card\n"); + dev_err(dev, "UE detected\n"); } if (sliport_status & SLIPORT_STATUS_ERR_MASK) { @@ -2162,7 +2172,9 @@ void be_detect_error(struct be_adapter *adapter) "UE: %s bit set\n", ue_status_hi_desc[i]); } } - +done: + adapter->ue_lo = ue_lo; + adapter->ue_hi = ue_hi; } static void be_msix_disable(struct be_adapter *adapter)