From patchwork Fri Feb 12 15:58:47 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Nussbaum X-Patchwork-Id: 582223 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 A38CC140556 for ; Sat, 13 Feb 2016 03:17:33 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751200AbcBLQRP (ORCPT ); Fri, 12 Feb 2016 11:17:15 -0500 Received: from xanadu.blop.info ([178.79.145.134]:56987 "EHLO xanadu.blop.info" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750853AbcBLQRO (ORCPT ); Fri, 12 Feb 2016 11:17:14 -0500 X-Greylist: delayed 1093 seconds by postgrey-1.27 at vger.kernel.org; Fri, 12 Feb 2016 11:17:14 EST Received: from xanadu.blop.info ([127.0.0.1]) by xanadu.blop.info with smtp (Exim 4.84) (envelope-from ) id 1aUG73-0008Um-Of; Fri, 12 Feb 2016 16:58:29 +0100 Received: (nullmailer pid 25216 invoked by uid 1000); Fri, 12 Feb 2016 15:58:47 -0000 Date: Fri, 12 Feb 2016 16:58:47 +0100 From: Lucas Nussbaum To: Linux Kernel Network Developers Cc: David Ertman , Jeff Kirsher , Bruce Allan , linux.nics@intel.com, e1000-devel@lists.sourceforge.net Subject: e1000e: initialization breaks IPMI support on 80003ES2LAN Message-ID: <20160212155847.GA22910@xanadu.blop.info> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hi, We have Intel 80003ES2LAN nics on SGI Altix XE310 servers (SuperMicro Baseboard, with product name X7DGT). On those machines, one of the NIC port is bridged internally with the BMC. It seems that during the e1000e driver initialization (at boot time), the NIC is reset, which causes the BMC to stop working (it stops responding to pings, the IPMI SOL console stops working; a reboot restores it, until the next driver initialization). The exact same problem also occurs on Bull Novascale R422E1 nodes, with the SuperMicro X7DWT baseboard. It worked in the past (we noticed it when upgrading from Debian wheezy (3.2 kernel) to Debian jessie (3.16 kernel)). Using git bisect, I tracked this down to commit 2800209994f878b00724ceabb65d744855c8f99a (included in Linux 3.15). Digging further (as this commit is quite large), it seems that this specific change introduced the problem: My understanding is that, during driver initialization, e1000e_reset() is called, which calls e1000_power_down_phy(), which breaks the BMC. Given the comment above the code that was removed, I suspected that it could also break WoL, but I haven't confirmed that. I can test patches if needed. --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -3687,10 +3687,6 @@ void e1000e_power_up_phy(struct e1000_adapter *adapter) */ static void e1000_power_down_phy(struct e1000_adapter *adapter) { - /* WoL is enabled */ - if (adapter->wol) - return; - if (adapter->hw.phy.ops.power_down) adapter->hw.phy.ops.power_down(&adapter->hw); } I also confirmed that reverting this change on top of a 4.4 kernel, with the following patch, fixes the problem (i.e. the BMC works again). --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -3791,6 +3791,8 @@ void e1000e_power_up_phy(struct e1000_adapter *adapter) */ static void e1000_power_down_phy(struct e1000_adapter *adapter) { + return; + if (adapter->hw.phy.ops.power_down) adapter->hw.phy.ops.power_down(&adapter->hw); }