Received: by 10.223.148.5 with SMTP id 5csp6995106wrq; Wed, 17 Jan 2018 22:52:15 -0800 (PST) X-Google-Smtp-Source: ACJfBouatb+zpsWdpqRw94Tftwjp838xPkkgH6/L8rF+Xj/OjAzDJKZ61mom0lTAyaWaiKAPAwa5 X-Received: by 10.101.81.7 with SMTP id f7mr35765024pgq.435.1516258335701; Wed, 17 Jan 2018 22:52:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516258335; cv=none; d=google.com; s=arc-20160816; b=VFDoggPeT7+Zkv47ck12/YLPmbeB9UXHK1Xb9sVYh8T33tBrl4fvcUFPxbMJ+ShOKP NhLWhENrB/1W3EPlV/d7lUiUwzJE57WbZW8BZRexS0crJMy8unFnePoIAdy+jV48cULz Yw/3TVy4awKg2HFNR8rEP5Caqw543u2l2a8A5HXzsw0eV8H2xhvuHHomaaCMyzr2u43Y hP9OIGMjmpcyazIxJjJRP8QYRJgOWW5UtS2ODRJFcVPFPvwLx8J55ZPae22Ic0DwP1Zy e3C4148fWNPLlerBSWcyv2tb5gwBZuDT0+df/0dnjPc2supLT4Ona49sWxvSi4I/Oj4X mqkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=+igvjxp2/lZukKZ5ZNbnk3EuzCSgHM1OhTLDcO1et6g=; b=HrAYP3TOPARI4sfG3JC7fDfisSI1JPcnNyeSJrpoSbhK/QMeDHYy4Vzia/gryM+hvH cqKT5At2KVJBCynCqMitA2kksyKC9g0wdodJSQ+y8l2vIehGWaiYoGaSVqr8GW+Qn0Pl RRGbCHXt5cC+ndgpDprWIFaMXPsiJ1qQpZohMoJ3DzF5jJodT37m4L7UP7pPhmYly7em h8FjlO1XUWYSuRPmMG/Z1S78wcCmENQZtey8ySJGGIjDtcZ7qQia/8oY1d2s14L+70CL UbYVVdhQKE6hFmmKOlrRYoJV5bkNuX5VibOJGMHZWOCMIUBs8Pqnw+5A/ePgUFEOUASc ssEw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u10si5946671plu.505.2018.01.17.22.52.01; Wed, 17 Jan 2018 22:52:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754674AbeARGvh (ORCPT + 99 others); Thu, 18 Jan 2018 01:51:37 -0500 Received: from mx2.suse.de ([195.135.220.15]:58821 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752062AbeARGvg (ORCPT ); Thu, 18 Jan 2018 01:51:36 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 5A535AE0B; Thu, 18 Jan 2018 06:51:35 +0000 (UTC) From: Benjamin Poirier To: Jeff Kirsher Cc: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH] e1000e: Remove Other from EIAC. Date: Thu, 18 Jan 2018 15:50:54 +0900 Message-Id: <20180118065054.29844-1-bpoirier@suse.com> X-Mailer: git-send-email 2.15.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It was reported that emulated e1000e devices in vmware esxi 6.5 Build 7526125 do not link up after commit 4aea7a5c5e94 ("e1000e: Avoid receiver overrun interrupt bursts", v4.15-rc1). Some tracing shows that after e1000e_trigger_lsc() is called, ICR reads out as 0x0 in e1000_msix_other() on emulated e1000e devices. In comparison, on real e1000e 82574 hardware, icr=0x80000004 (_INT_ASSERTED | _OTHER) in the same situation. Some experimentation showed that this flaw in vmware e1000e emulation can be worked around by not setting Other in EIAC. This is how it was before 16ecba59bc33 ("e1000e: Do not read ICR in Other interrupt", v4.5-rc1). Fixes: 4aea7a5c5e94 ("e1000e: Avoid receiver overrun interrupt bursts") Signed-off-by: Benjamin Poirier --- Jeff, I'm sending as RFC since it looks like a problem that should be fixed in vmware. If you'd like to have the workaround in e1000e, I'll submit. --- drivers/net/ethernet/intel/e1000e/netdev.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index 9f18d39bdc8f..625a4c9a86a4 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -1918,6 +1918,8 @@ static irqreturn_t e1000_msix_other(int __always_unused irq, void *data) bool enable = true; icr = er32(ICR); + ew32(ICR, E1000_ICR_OTHER); + if (icr & E1000_ICR_RXO) { ew32(ICR, E1000_ICR_RXO); enable = false; @@ -2040,7 +2042,6 @@ static void e1000_configure_msix(struct e1000_adapter *adapter) hw->hw_addr + E1000_EITR_82574(vector)); else writel(1, hw->hw_addr + E1000_EITR_82574(vector)); - adapter->eiac_mask |= E1000_IMS_OTHER; /* Cause Tx interrupts on every write back */ ivar |= BIT(31); @@ -2265,7 +2266,7 @@ static void e1000_irq_enable(struct e1000_adapter *adapter) if (adapter->msix_entries) { ew32(EIAC_82574, adapter->eiac_mask & E1000_EIAC_MASK_82574); - ew32(IMS, adapter->eiac_mask | E1000_IMS_LSC); + ew32(IMS, adapter->eiac_mask | E1000_IMS_OTHER | E1000_IMS_LSC); } else if (hw->mac.type >= e1000_pch_lpt) { ew32(IMS, IMS_ENABLE_MASK | E1000_IMS_ECCER); } else { -- 2.15.1