All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH] e1000e: Remove Other from EIAC.
@ 2018-01-18  6:50 ` Benjamin Poirier
  0 siblings, 0 replies; 41+ messages in thread
From: Benjamin Poirier @ 2018-01-18  6:50 UTC (permalink / raw)
  To: Jeff Kirsher; +Cc: intel-wired-lan, netdev, linux-kernel

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 <bpoirier@suse.com>
---

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

^ permalink raw reply related	[flat|nested] 41+ messages in thread

end of thread, other threads:[~2018-02-02  4:31 UTC | newest]

Thread overview: 41+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-18  6:50 [RFC PATCH] e1000e: Remove Other from EIAC Benjamin Poirier
2018-01-18  6:50 ` [Intel-wired-lan] " Benjamin Poirier
2018-01-18  7:27 ` Benjamin Poirier
2018-01-18  7:27   ` [Intel-wired-lan] " Benjamin Poirier
2018-01-19  2:42   ` Shrikrishna Khare
2018-01-19  2:42     ` [Intel-wired-lan] " Shrikrishna Khare
2018-01-19  5:36     ` Benjamin Poirier
2018-01-19  5:36       ` [Intel-wired-lan] " Benjamin Poirier
2018-01-18  7:41 ` Benjamin Poirier
2018-01-18  7:41   ` [Intel-wired-lan] " Benjamin Poirier
2018-01-18 11:59 ` Neftin, Sasha
2018-01-18 15:51 ` Alexander Duyck
2018-01-18 15:51   ` Alexander Duyck
2018-01-19  8:59   ` Benjamin Poirier
2018-01-19  8:59     ` Benjamin Poirier
2018-01-19 13:36     ` Benjamin Poirier
2018-01-19 13:36       ` Benjamin Poirier
2018-01-19 16:22       ` Alexander Duyck
2018-01-19 16:22         ` Alexander Duyck
2018-01-19 22:45         ` Benjamin Poirier
2018-01-19 22:45           ` Benjamin Poirier
2018-01-19 22:55           ` Benjamin Poirier
2018-01-19 22:55             ` Benjamin Poirier
2018-01-20 17:21             ` Alexander Duyck
2018-01-20 17:21               ` Alexander Duyck
2018-01-22  7:12               ` Benjamin Poirier
2018-01-22  7:12                 ` Benjamin Poirier
2018-01-22 18:01                 ` Alexander Duyck
2018-01-22 18:01                   ` Alexander Duyck
2018-01-24  8:35                   ` Benjamin Poirier
2018-01-24  8:35                     ` Benjamin Poirier
2018-01-24 16:01                     ` Alexander Duyck
2018-01-24 16:01                       ` Alexander Duyck
2018-01-30 19:46 ` Alexander Duyck
2018-01-30 19:46   ` Alexander Duyck
2018-01-31  7:31   ` Benjamin Poirier
2018-01-31  7:31     ` Benjamin Poirier
2018-02-02  4:29     ` Brown, Aaron F
2018-02-02  4:29       ` Brown, Aaron F
2018-02-02  4:31     ` Brown, Aaron F
2018-02-02  4:31       ` Brown, Aaron F

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.