patch 'net/ixgbe: fix spurious MACsec event on E610' has been queued to stable release 24.11.9

luca.boccassi at gmail.com luca.boccassi at gmail.com
Tue Oct 27 12:50:37 CET 2026


Hi,

FYI, your patch has been queued to stable release 24.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/26. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/459fc6b93d9c92750c82632c88ab7c53991f19b3

Thanks.

Luca Boccassi

---
>From 459fc6b93d9c92750c82632c88ab7c53991f19b3 Mon Sep 17 00:00:00 2001
From: Sandeep Penigalapati <sandeep.penigalapati at intel.com>
Date: Wed, 23 Sep 2026 07:25:19 -0400
Subject: [PATCH] net/ixgbe: fix spurious MACsec event on E610

[ upstream commit 3d0e5c654da26992fb31ab4246985199cbfe3df1 ]

On 82599 and X5xx, EICR bit 0x00200000 is the MACsec PN-threshold cause
(IXGBE_EICR_LINKSEC). On E610 the very same bit is redefined as the
asynchronous firmware event cause (IXGBE_EICR_FW_EVENT). The interrupt
handler decoded this bit unconditionally as LINKSEC and raised
RTE_ETH_EVENT_MACSEC.

As E610 does not support MACsec, every firmware event (for example a
link change) was reported to the application as a spurious MACsec event.
In addition, the firmware events posted on the Admin Command Interface
(ACI) receive queue were never drained, so the cause was not cleared.

Decode the bit per MAC type: on E610 treat it as a firmware event and
drain the ACI receive queue until empty; keep the MACsec handling for
the other MAC types. Link changes continue to be handled through the
existing IXGBE_EICR_LSC path.

Fixes: 316637762a5f ("net/ixgbe/base: enable E610 device")

Signed-off-by: Sandeep Penigalapati <sandeep.penigalapati at intel.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov at intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 46 ++++++++++++++++++++++++++++++--
 drivers/net/ixgbe/ixgbe_ethdev.h |  1 +
 2 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index bf6906415d2..04880fd5209 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -41,6 +41,7 @@
 #include "base/ixgbe_api.h"
 #include "base/ixgbe_vf.h"
 #include "base/ixgbe_common.h"
+#include "base/ixgbe_e610.h"
 #include "ixgbe_ethdev.h"
 #include "ixgbe_bypass.h"
 #include "ixgbe_rxtx.h"
@@ -4651,8 +4652,17 @@ ixgbe_dev_interrupt_get_status(struct rte_eth_dev *dev)
 	if (eicr & IXGBE_EICR_MAILBOX)
 		intr->flags |= IXGBE_FLAG_MAILBOX;
 
-	if (eicr & IXGBE_EICR_LINKSEC)
-		intr->flags |= IXGBE_FLAG_MACSEC;
+	/*
+	 * Bit 0x00200000 is LINKSEC (MACsec) on 82599/X5xx, but FW_EVENT
+	 * (async firmware event) on E610, which has no MACsec. Decode it per
+	 * MAC type to avoid reporting a spurious RTE_ETH_EVENT_MACSEC on E610.
+	 */
+	if (eicr & IXGBE_EICR_LINKSEC) {
+		if (hw->mac.type == ixgbe_mac_E610)
+			intr->flags |= IXGBE_FLAG_FW_EVENT;
+		else
+			intr->flags |= IXGBE_FLAG_MACSEC;
+	}
 
 	if (hw->mac.type ==  ixgbe_mac_X550EM_x &&
 	    hw->phy.type == ixgbe_phy_x550em_ext_t &&
@@ -4697,6 +4707,33 @@ ixgbe_dev_link_status_print(struct rte_eth_dev *dev)
 				pci_dev->addr.function);
 }
 
+static void
+ixgbe_dev_handle_fw_event(struct rte_eth_dev *dev)
+{
+	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	uint8_t buf[IXGBE_ACI_MAX_BUFFER_SIZE];
+	struct ixgbe_aci_event event;
+	bool pending = false;
+	s32 status;
+
+	memset(&event, 0, sizeof(event));
+	event.buf_len = sizeof(buf);
+	event.msg_buf = buf;
+
+	do {
+		status = ixgbe_aci_get_event(hw, &event, &pending);
+		if (status) {
+			if (status != IXGBE_ERR_ACI_NO_EVENTS)
+				PMD_DRV_LOG(DEBUG,
+					"Failed to read FW event from ACI: %d",
+					status);
+			break;
+		}
+		PMD_DRV_LOG(DEBUG, "Received FW event, opcode 0x%04x",
+			rte_le_to_cpu_16(event.desc.opcode));
+	} while (pending);
+}
+
 /*
  * It executes link_update after knowing an interrupt occurred.
  *
@@ -4728,6 +4765,11 @@ ixgbe_dev_interrupt_action(struct rte_eth_dev *dev)
 		intr->flags &= ~IXGBE_FLAG_PHY_INTERRUPT;
 	}
 
+	if (intr->flags & IXGBE_FLAG_FW_EVENT) {
+		ixgbe_dev_handle_fw_event(dev);
+		intr->flags &= ~IXGBE_FLAG_FW_EVENT;
+	}
+
 	if (intr->flags & IXGBE_FLAG_NEED_LINK_UPDATE) {
 		struct rte_eth_link link;
 
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
index 857e202bf5e..10ae1ae1141 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.h
+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
@@ -30,6 +30,7 @@
 #define IXGBE_FLAG_PHY_INTERRUPT    (uint32_t)(1 << 2)
 #define IXGBE_FLAG_MACSEC           (uint32_t)(1 << 3)
 #define IXGBE_FLAG_NEED_LINK_CONFIG (uint32_t)(1 << 4)
+#define IXGBE_FLAG_FW_EVENT         (uint32_t)(1 << 5)
 
 /*
  * Defines that were not part of ixgbe_type.h as they are not used by the
-- 
2.47.3

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2026-10-27 11:43:59.194910449 +0000
+++ 0143-net-ixgbe-fix-spurious-MACsec-event-on-E610.patch	2026-10-27 11:43:53.666064153 +0000
@@ -1 +1 @@
-From 3d0e5c654da26992fb31ab4246985199cbfe3df1 Mon Sep 17 00:00:00 2001
+From 459fc6b93d9c92750c82632c88ab7c53991f19b3 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3d0e5c654da26992fb31ab4246985199cbfe3df1 ]
+
@@ -23 +24,0 @@
-Cc: stable at dpdk.org
@@ -28,2 +29,2 @@
- drivers/net/intel/ixgbe/ixgbe_ethdev.c | 46 ++++++++++++++++++++++++--
- drivers/net/intel/ixgbe/ixgbe_ethdev.h |  1 +
+ drivers/net/ixgbe/ixgbe_ethdev.c | 46 ++++++++++++++++++++++++++++++--
+ drivers/net/ixgbe/ixgbe_ethdev.h |  1 +
@@ -32,5 +33,5 @@
-diff --git a/drivers/net/intel/ixgbe/ixgbe_ethdev.c b/drivers/net/intel/ixgbe/ixgbe_ethdev.c
-index 284df77023..1c028a5f54 100644
---- a/drivers/net/intel/ixgbe/ixgbe_ethdev.c
-+++ b/drivers/net/intel/ixgbe/ixgbe_ethdev.c
-@@ -39,6 +39,7 @@
+diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
+index bf6906415d2..04880fd5209 100644
+--- a/drivers/net/ixgbe/ixgbe_ethdev.c
++++ b/drivers/net/ixgbe/ixgbe_ethdev.c
+@@ -41,6 +41,7 @@
@@ -44 +45 @@
-@@ -4605,8 +4606,17 @@ ixgbe_dev_interrupt_get_status(struct rte_eth_dev *dev)
+@@ -4651,8 +4652,17 @@ ixgbe_dev_interrupt_get_status(struct rte_eth_dev *dev)
@@ -64 +65 @@
-@@ -4651,6 +4661,33 @@ ixgbe_dev_link_status_print(struct rte_eth_dev *dev)
+@@ -4697,6 +4707,33 @@ ixgbe_dev_link_status_print(struct rte_eth_dev *dev)
@@ -98 +99 @@
-@@ -4682,6 +4719,11 @@ ixgbe_dev_interrupt_action(struct rte_eth_dev *dev)
+@@ -4728,6 +4765,11 @@ ixgbe_dev_interrupt_action(struct rte_eth_dev *dev)
@@ -110,5 +111,5 @@
-diff --git a/drivers/net/intel/ixgbe/ixgbe_ethdev.h b/drivers/net/intel/ixgbe/ixgbe_ethdev.h
-index 0efef29a5d..2e9d166e29 100644
---- a/drivers/net/intel/ixgbe/ixgbe_ethdev.h
-+++ b/drivers/net/intel/ixgbe/ixgbe_ethdev.h
-@@ -28,6 +28,7 @@
+diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
+index 857e202bf5e..10ae1ae1141 100644
+--- a/drivers/net/ixgbe/ixgbe_ethdev.h
++++ b/drivers/net/ixgbe/ixgbe_ethdev.h
+@@ -30,6 +30,7 @@


More information about the stable mailing list