patch 'net/i40e: activate alarm if interrupt delivery unavailable' has been queued to stable release 24.11.7
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Mon Jul 13 19:17:42 CEST 2026
Hi,
FYI, your patch has been queued to stable release 24.11.7
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 07/15/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/9f0090ade38a7d4a6710a18fb2de3f49e702356a
Thanks.
Luca Boccassi
---
>From 9f0090ade38a7d4a6710a18fb2de3f49e702356a Mon Sep 17 00:00:00 2001
From: Ciara Loftus <ciara.loftus at intel.com>
Date: Thu, 9 Jul 2026 11:25:55 +0000
Subject: [PATCH] net/i40e: activate alarm if interrupt delivery unavailable
[ upstream commit 1356e05e85b5463fd7b662ea938c24e2ddd50300 ]
If interrupt registration fails eg. on FreeBSD with nic_uio, and Rx
queue interrupts are configured (intr_conf.rxq != 0), the interrupt
handler is never called and ICR0 events, including AdminQ messages
carrying link state notifications, are never processed. In polling mode
(rxq == 0) a periodic alarm already drains these events, but in the
interrupt-enabled configuration no such fallback existed.
This gap has always existed but was partially masked by the blocking
link status poll in the i40e dev_start function, which would delay some
time until the link was up before returning. In this case, the link
status was typically correct after dev_start. However after that delay
was removed in commit 111965395b37 ("net/i40e: fix blocking link wait on
device start"), the link status was often wrong after dev_start, and
there was no mechanism to self-correct.
Rather than restoring the blocking wait removed by that commit which
would re-impose a startup delay on every platform, activate the existing
periodic alarm on platforms where interrupt delivery is unavailable.
Fixes: 111965395b37 ("net/i40e: fix blocking link wait on device start")
Signed-off-by: Ciara Loftus <ciara.loftus at intel.com>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
---
drivers/net/i40e/i40e_ethdev.c | 11 ++++++++++-
drivers/net/i40e/i40e_ethdev.h | 2 ++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 0bc7394552..2c7301fdf1 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -2579,7 +2579,13 @@ i40e_dev_start(struct rte_eth_dev *dev)
i40e_dev_link_update(dev, !rte_intr_allow_others(intr_handle));
pf->mac_config_on_link_up = !dev->data->dev_link.link_status;
/* enable uio intr after callback register */
- rte_intr_enable(intr_handle);
+ if (rte_intr_enable(intr_handle) != 0) {
+ if (rte_eal_alarm_set(I40E_ALARM_INTERVAL,
+ i40e_dev_alarm_handler, dev) != 0)
+ PMD_DRV_LOG(WARNING, "Failed to set alarm");
+ else
+ pf->use_aq_polling = true;
+ }
}
i40e_filter_restore(pf);
@@ -2625,6 +2631,9 @@ i40e_dev_stop(struct rte_eth_dev *dev)
if (dev->data->dev_conf.intr_conf.rxq == 0) {
rte_eal_alarm_cancel(i40e_dev_alarm_handler, dev);
rte_intr_enable(intr_handle);
+ } else if (pf->use_aq_polling) {
+ rte_eal_alarm_cancel(i40e_dev_alarm_handler, dev);
+ pf->use_aq_polling = false;
}
/* Disable all queues */
diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h
index 59ec0f880d..f4ff945a60 100644
--- a/drivers/net/i40e/i40e_ethdev.h
+++ b/drivers/net/i40e/i40e_ethdev.h
@@ -1192,6 +1192,8 @@ struct i40e_pf {
bool fw8_3gt;
/* MAC config needs re-applying when link first comes up */
bool mac_config_on_link_up;
+ /* true when interrupt path unavailable */
+ bool use_aq_polling;
struct i40e_vf_msg_cfg vf_msg_cfg;
uint64_t prev_rx_bytes;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-07-13 18:17:05.679318025 +0100
+++ 0002-net-i40e-activate-alarm-if-interrupt-delivery-unavai.patch 2026-07-13 18:17:05.566282687 +0100
@@ -1 +1 @@
-From 1356e05e85b5463fd7b662ea938c24e2ddd50300 Mon Sep 17 00:00:00 2001
+From 9f0090ade38a7d4a6710a18fb2de3f49e702356a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 1356e05e85b5463fd7b662ea938c24e2ddd50300 ]
+
@@ -26 +27,0 @@
-Cc: stable at dpdk.org
@@ -31,2 +32,2 @@
- drivers/net/intel/i40e/i40e_ethdev.c | 11 ++++++++++-
- drivers/net/intel/i40e/i40e_ethdev.h | 2 ++
+ drivers/net/i40e/i40e_ethdev.c | 11 ++++++++++-
+ drivers/net/i40e/i40e_ethdev.h | 2 ++
@@ -35,4 +36,4 @@
-diff --git a/drivers/net/intel/i40e/i40e_ethdev.c b/drivers/net/intel/i40e/i40e_ethdev.c
-index b2694cd33a..b6b2d291ee 100644
---- a/drivers/net/intel/i40e/i40e_ethdev.c
-+++ b/drivers/net/intel/i40e/i40e_ethdev.c
+diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
+index 0bc7394552..2c7301fdf1 100644
+--- a/drivers/net/i40e/i40e_ethdev.c
++++ b/drivers/net/i40e/i40e_ethdev.c
@@ -64,5 +65,5 @@
-diff --git a/drivers/net/intel/i40e/i40e_ethdev.h b/drivers/net/intel/i40e/i40e_ethdev.h
-index 5a009393b0..9d9bde6aeb 100644
---- a/drivers/net/intel/i40e/i40e_ethdev.h
-+++ b/drivers/net/intel/i40e/i40e_ethdev.h
-@@ -1193,6 +1193,8 @@ struct i40e_pf {
+diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h
+index 59ec0f880d..f4ff945a60 100644
+--- a/drivers/net/i40e/i40e_ethdev.h
++++ b/drivers/net/i40e/i40e_ethdev.h
+@@ -1192,6 +1192,8 @@ struct i40e_pf {
More information about the stable
mailing list