From: Benjamin Poirier <hidden> Date: 2018-02-08 06:47:23
This partially reverts commit 4aea7a5c5e940c1723add439f4088844cd26196d.
We keep the fix for the first part of the problem (1) described in the log
of that commit, that is to read ICR in the other interrupt handler. We
remove the fix for the second part of the problem (2), Other interrupt
throttling.
Bursts of "Other" interrupts may once again occur during rxo (receive
overflow) traffic conditions. This is deemed acceptable in the interest of
avoiding unforeseen fallout from changes that are not strictly necessary.
As discussed, the e1000e driver should be in "maintenance mode".
Link: https://www.spinics.net/lists/netdev/msg480675.html
Signed-off-by: Benjamin Poirier <redacted>
---
drivers/net/ethernet/intel/e1000e/netdev.c | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)
From: Benjamin Poirier <hidden> Date: 2018-02-08 06:47:26
restores the ICS write for rx/tx queue interrupts which was present before
commit 16ecba59bc33 ("e1000e: Do not read ICR in Other interrupt",
v4.5-rc1) but was not restored in commit 4aea7a5c5e94 ("e1000e: Avoid
receiver overrun interrupt bursts", v4.15-rc1).
This re-raises the queue interrupts in case the txq or rxq bits were set in
ICR and the Other interrupt handler read and cleared ICR before the queue
interrupt was raised.
Fixes: 4aea7a5c5e94 ("e1000e: Avoid receiver overrun interrupt bursts")
Signed-off-by: Benjamin Poirier <redacted>
---
drivers/net/ethernet/intel/e1000e/netdev.c | 3 +++
1 file changed, 3 insertions(+)
From: Benjamin Poirier <hidden> Date: 2018-02-08 06:47:30
The 82574 specification update errata 12 states that interrupts may be
missed if ICR is read while INT_ASSERTED is not set. Avoid that problem by
setting all bits related to events that can trigger the Other interrupt in
IMS.
The Other interrupt is raised for such events regardless of whether or not
they are set in IMS. However, only when they are set is the INT_ASSERTED
bit also set in ICR.
By doing this, we ensure that INT_ASSERTED is always set when we read ICR
in e1000_msix_other() and steer clear of the errata. This also ensures that
ICR will automatically be cleared on read, therefore we no longer need to
clear bits explicitly.
Signed-off-by: Benjamin Poirier <redacted>
---
drivers/net/ethernet/intel/e1000e/defines.h | 21 ++++++++++++++++++++-
drivers/net/ethernet/intel/e1000e/netdev.c | 11 ++++-------
2 files changed, 24 insertions(+), 8 deletions(-)
From: Benjamin Poirier <hidden> Date: 2018-02-08 08:06:04
I forgot to mark it as such but this is v2 of the series originally
submitted in this thread:
https://lkml.org/lkml/2018/1/26/93
Changes since v1:
* series rebased to apply over "e1000e: Remove Other from EIAC."
http://patchwork.ozlabs.org/patch/867833/
This essentially removes patch 3/3 from the original series.
* dropped [PATCH 2/3] Revert "e1000e: Separate signaling for link
check/link up". After Alex's feedback, I think that problem needs to
be addressed differently and I will submit a separate patch for it.
* patch 1 was split into three parts. Instead of manually clearing OTHER
via a write to icr as in v1, in v2 we make sure that INT_ASSERTED is
always set via bits for all events related to the Other interrupt in
IMS.
Benjamin Poirier (3):
Partial revert "e1000e: Avoid receiver overrun interrupt bursts"
e1000e: Fix queue interrupt re-raising in Other interrupt.
e1000e: Avoid missed interrupts following ICR read.
drivers/net/ethernet/intel/e1000e/defines.h | 21 ++++++++++++++++++-
drivers/net/ethernet/intel/e1000e/netdev.c | 32 +++++++++--------------------
2 files changed, 30 insertions(+), 23 deletions(-)
On 2018/02/08 15:47, Benjamin Poirier wrote:
quoted hunk
This partially reverts commit 4aea7a5c5e940c1723add439f4088844cd26196d.
We keep the fix for the first part of the problem (1) described in the log
of that commit, that is to read ICR in the other interrupt handler. We
remove the fix for the second part of the problem (2), Other interrupt
throttling.
Bursts of "Other" interrupts may once again occur during rxo (receive
overflow) traffic conditions. This is deemed acceptable in the interest of
avoiding unforeseen fallout from changes that are not strictly necessary.
As discussed, the e1000e driver should be in "maintenance mode".
Link: https://www.spinics.net/lists/netdev/msg480675.html
Signed-off-by: Benjamin Poirier <redacted>
---
drivers/net/ethernet/intel/e1000e/netdev.c | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)
From: Alexander Duyck <hidden> Date: 2018-02-08 14:23:05
On Wed, Feb 7, 2018 at 10:47 PM, Benjamin Poirier [off-list ref] wrote:
This partially reverts commit 4aea7a5c5e940c1723add439f4088844cd26196d.
We keep the fix for the first part of the problem (1) described in the log
of that commit, that is to read ICR in the other interrupt handler. We
remove the fix for the second part of the problem (2), Other interrupt
throttling.
Bursts of "Other" interrupts may once again occur during rxo (receive
overflow) traffic conditions. This is deemed acceptable in the interest of
avoiding unforeseen fallout from changes that are not strictly necessary.
As discussed, the e1000e driver should be in "maintenance mode".
Link: https://www.spinics.net/lists/netdev/msg480675.html
Signed-off-by: Benjamin Poirier <redacted>
From: Alexander Duyck <hidden> Date: 2018-02-08 14:23:28
On Wed, Feb 7, 2018 at 10:47 PM, Benjamin Poirier [off-list ref] wrote:
restores the ICS write for rx/tx queue interrupts which was present before
commit 16ecba59bc33 ("e1000e: Do not read ICR in Other interrupt",
v4.5-rc1) but was not restored in commit 4aea7a5c5e94 ("e1000e: Avoid
receiver overrun interrupt bursts", v4.15-rc1).
This re-raises the queue interrupts in case the txq or rxq bits were set in
ICR and the Other interrupt handler read and cleared ICR before the queue
interrupt was raised.
Fixes: 4aea7a5c5e94 ("e1000e: Avoid receiver overrun interrupt bursts")
Signed-off-by: Benjamin Poirier <redacted>
From: Alexander Duyck <hidden> Date: 2018-02-08 14:24:10
On Wed, Feb 7, 2018 at 10:47 PM, Benjamin Poirier [off-list ref] wrote:
The 82574 specification update errata 12 states that interrupts may be
missed if ICR is read while INT_ASSERTED is not set. Avoid that problem by
setting all bits related to events that can trigger the Other interrupt in
IMS.
The Other interrupt is raised for such events regardless of whether or not
they are set in IMS. However, only when they are set is the INT_ASSERTED
bit also set in ICR.
By doing this, we ensure that INT_ASSERTED is always set when we read ICR
in e1000_msix_other() and steer clear of the errata. This also ensures that
ICR will automatically be cleared on read, therefore we no longer need to
clear bits explicitly.
Signed-off-by: Benjamin Poirier <redacted>
From: Brown, Aaron F <hidden> Date: 2018-02-15 03:23:16
From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On
Behalf Of Benjamin Poirier
Sent: Wednesday, February 7, 2018 10:47 PM
To: Kirsher, Jeffrey T <redacted>
Cc: netdev@vger.kernel.org; intel-wired-lan@lists.osuosl.org; linux-
kernel@vger.kernel.org
Subject: [Intel-wired-lan] [PATCH net-queue 1/3] Partial revert "e1000e:
Avoid receiver overrun interrupt bursts"
This partially reverts commit 4aea7a5c5e940c1723add439f4088844cd26196d.
We keep the fix for the first part of the problem (1) described in the log
of that commit, that is to read ICR in the other interrupt handler. We
remove the fix for the second part of the problem (2), Other interrupt
throttling.
Bursts of "Other" interrupts may once again occur during rxo (receive
overflow) traffic conditions. This is deemed acceptable in the interest of
avoiding unforeseen fallout from changes that are not strictly necessary.
As discussed, the e1000e driver should be in "maintenance mode".
Link: https://www.spinics.net/lists/netdev/msg480675.html
Signed-off-by: Benjamin Poirier <redacted>
---
drivers/net/ethernet/intel/e1000e/netdev.c | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)
From: Brown, Aaron F <hidden> Date: 2018-02-15 03:23:40
From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On
Behalf Of Benjamin Poirier
Sent: Wednesday, February 7, 2018 10:47 PM
To: Kirsher, Jeffrey T <redacted>
Cc: netdev@vger.kernel.org; intel-wired-lan@lists.osuosl.org; linux-
kernel@vger.kernel.org
Subject: [Intel-wired-lan] [PATCH net-queue 2/3] e1000e: Fix queue
interrupt re-raising in Other interrupt.
restores the ICS write for rx/tx queue interrupts which was present before
commit 16ecba59bc33 ("e1000e: Do not read ICR in Other interrupt",
v4.5-rc1) but was not restored in commit 4aea7a5c5e94 ("e1000e: Avoid
receiver overrun interrupt bursts", v4.15-rc1).
This re-raises the queue interrupts in case the txq or rxq bits were set in
ICR and the Other interrupt handler read and cleared ICR before the queue
interrupt was raised.
Fixes: 4aea7a5c5e94 ("e1000e: Avoid receiver overrun interrupt bursts")
Signed-off-by: Benjamin Poirier <redacted>
---
drivers/net/ethernet/intel/e1000e/netdev.c | 3 +++
1 file changed, 3 insertions(+)
From: Brown, Aaron F <hidden> Date: 2018-02-15 03:24:00
From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On
Behalf Of Benjamin Poirier
Sent: Wednesday, February 7, 2018 10:47 PM
To: Kirsher, Jeffrey T <redacted>
Cc: netdev@vger.kernel.org; intel-wired-lan@lists.osuosl.org; linux-
kernel@vger.kernel.org
Subject: [Intel-wired-lan] [PATCH net-queue 3/3] e1000e: Avoid missed
interrupts following ICR read.
The 82574 specification update errata 12 states that interrupts may be
missed if ICR is read while INT_ASSERTED is not set. Avoid that problem by
setting all bits related to events that can trigger the Other interrupt in
IMS.
The Other interrupt is raised for such events regardless of whether or not
they are set in IMS. However, only when they are set is the INT_ASSERTED
bit also set in ICR.
By doing this, we ensure that INT_ASSERTED is always set when we read ICR
in e1000_msix_other() and steer clear of the errata. This also ensures that
ICR will automatically be cleared on read, therefore we no longer need to
clear bits explicitly.
Signed-off-by: Benjamin Poirier <redacted>
---
drivers/net/ethernet/intel/e1000e/defines.h | 21
++++++++++++++++++++-
drivers/net/ethernet/intel/e1000e/netdev.c | 11 ++++-------
2 files changed, 24 insertions(+), 8 deletions(-)