patch 'net/iavf: wait for PF reset start before reinitializing' has been queued to stable release 24.11.7
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Thu Jun 11 15:20:36 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 06/13/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/73c6cad94d4da7938de25223b1408b3b9afdf6b9
Thanks.
Luca Boccassi
---
>From 73c6cad94d4da7938de25223b1408b3b9afdf6b9 Mon Sep 17 00:00:00 2001
From: Ciara Loftus <ciara.loftus at intel.com>
Date: Mon, 8 Jun 2026 14:55:17 +0000
Subject: [PATCH] net/iavf: wait for PF reset start before reinitializing
[ upstream commit 1ce3cb5d40de225380fc917ea07081589ad18976 ]
Commit 1428895ad417 ("net/iavf: fix disabling of promiscuous modes on
close") added a synchronous VIRTCHNL round-trip on the close path
before the reset request is sent. This delays the reset just long
enough that `IAVF_VFGEN_RSTAT` still reads `VIRTCHNL_VFR_VFACTIVE`
when the re-init path polls it for reset completion. The driver
interprets this as the reset being complete, when in fact it has not
yet started, and proceeds to issue VIRTCHNL commands before the PF
has disabled the VF mailbox.
Fix by polling `IAVF_VF_ARQLEN1.ARQENABLE` immediately after the reset
request and before shutting down the admin queue, when the close is
triggered by a reset. The PF clears this bit as its first reset action,
providing an unambiguous signal that the reset is in progress.
Fixes: 1428895ad417 ("net/iavf: fix disabling of promiscuous modes on close")
Reported-by: Talluri Chaitanyababu <chaitanyababux.talluri at intel.com>
Signed-off-by: Ciara Loftus <ciara.loftus at intel.com>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
---
drivers/net/iavf/iavf.h | 1 +
drivers/net/iavf/iavf_ethdev.c | 12 ++++++++++++
2 files changed, 13 insertions(+)
diff --git a/drivers/net/iavf/iavf.h b/drivers/net/iavf/iavf.h
index bdebf7745a..dc34429f52 100644
--- a/drivers/net/iavf/iavf.h
+++ b/drivers/net/iavf/iavf.h
@@ -284,6 +284,7 @@ struct iavf_info {
struct rte_eth_dev *eth_dev;
bool in_reset_recovery;
+ bool reset_pending;
uint32_t ptp_caps;
rte_spinlock_t phc_time_aq_lock;
diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index 8c3ecf75e1..c6394bed9e 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -100,6 +100,7 @@ static int iavf_dev_start(struct rte_eth_dev *dev);
static int iavf_dev_stop(struct rte_eth_dev *dev);
static int iavf_dev_close(struct rte_eth_dev *dev);
static int iavf_dev_reset(struct rte_eth_dev *dev);
+static bool iavf_is_reset_detected(struct iavf_adapter *adapter);
static int iavf_dev_info_get(struct rte_eth_dev *dev,
struct rte_eth_dev_info *dev_info);
static const uint32_t *iavf_dev_supported_ptypes_get(struct rte_eth_dev *dev,
@@ -2988,6 +2989,14 @@ iavf_dev_close(struct rte_eth_dev *dev)
iavf_flow_uninit(adapter);
iavf_vf_reset(hw);
+ /*
+ * If a reset is pending, wait for the PF to disable the VF's admin
+ * receive queue (its first reset action) before we shut it down
+ * ourselves. This ensures iavf_check_vf_reset_done() does not see
+ * a stale VFACTIVE value on the re-init path.
+ */
+ if (vf->reset_pending)
+ iavf_is_reset_detected(adapter);
iavf_shutdown_adminq(hw);
if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) {
/* disable uio intr before callback unregister */
@@ -3067,6 +3076,7 @@ iavf_dev_reset(struct rte_eth_dev *dev)
struct iavf_adapter *adapter =
IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
struct iavf_hw *hw = IAVF_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+ struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
/*
* Check whether the VF reset has been done and inform application,
* to avoid calling the virtual channel command, which may cause
@@ -3079,8 +3089,10 @@ iavf_dev_reset(struct rte_eth_dev *dev)
}
iavf_set_no_poll(adapter, false);
+ vf->reset_pending = true;
PMD_DRV_LOG(DEBUG, "Start dev_reset ...");
ret = iavf_dev_uninit(dev);
+ vf->reset_pending = false;
if (ret)
return ret;
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-06-11 14:20:04.758004439 +0100
+++ 0087-net-iavf-wait-for-PF-reset-start-before-reinitializi.patch 2026-06-11 14:20:01.334748898 +0100
@@ -1 +1 @@
-From 1ce3cb5d40de225380fc917ea07081589ad18976 Mon Sep 17 00:00:00 2001
+From 73c6cad94d4da7938de25223b1408b3b9afdf6b9 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 1ce3cb5d40de225380fc917ea07081589ad18976 ]
+
@@ -21 +22,0 @@
-Cc: stable at dpdk.org
@@ -27,2 +28,2 @@
- drivers/net/intel/iavf/iavf.h | 1 +
- drivers/net/intel/iavf/iavf_ethdev.c | 12 ++++++++++++
+ drivers/net/iavf/iavf.h | 1 +
+ drivers/net/iavf/iavf_ethdev.c | 12 ++++++++++++
@@ -31,5 +32,5 @@
-diff --git a/drivers/net/intel/iavf/iavf.h b/drivers/net/intel/iavf/iavf.h
-index 2615b6f034..4444602a30 100644
---- a/drivers/net/intel/iavf/iavf.h
-+++ b/drivers/net/intel/iavf/iavf.h
-@@ -291,6 +291,7 @@ struct iavf_info {
+diff --git a/drivers/net/iavf/iavf.h b/drivers/net/iavf/iavf.h
+index bdebf7745a..dc34429f52 100644
+--- a/drivers/net/iavf/iavf.h
++++ b/drivers/net/iavf/iavf.h
+@@ -284,6 +284,7 @@ struct iavf_info {
@@ -43,5 +44,5 @@
-diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c
-index a8031e23a5..a38132e80e 100644
---- a/drivers/net/intel/iavf/iavf_ethdev.c
-+++ b/drivers/net/intel/iavf/iavf_ethdev.c
-@@ -106,6 +106,7 @@ static int iavf_dev_start(struct rte_eth_dev *dev);
+diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
+index 8c3ecf75e1..c6394bed9e 100644
+--- a/drivers/net/iavf/iavf_ethdev.c
++++ b/drivers/net/iavf/iavf_ethdev.c
+@@ -100,6 +100,7 @@ static int iavf_dev_start(struct rte_eth_dev *dev);
@@ -55 +56 @@
-@@ -3196,6 +3197,14 @@ iavf_dev_close(struct rte_eth_dev *dev)
+@@ -2988,6 +2989,14 @@ iavf_dev_close(struct rte_eth_dev *dev)
@@ -67 +67,0 @@
- vf->aq_intr_enabled = false;
@@ -70 +70,2 @@
-@@ -3273,6 +3282,7 @@ iavf_dev_reset(struct rte_eth_dev *dev)
+ /* disable uio intr before callback unregister */
+@@ -3067,6 +3076,7 @@ iavf_dev_reset(struct rte_eth_dev *dev)
@@ -78 +79 @@
-@@ -3285,8 +3295,10 @@ iavf_dev_reset(struct rte_eth_dev *dev)
+@@ -3079,8 +3089,10 @@ iavf_dev_reset(struct rte_eth_dev *dev)
More information about the stable
mailing list