patch 'net/iavf: wait for PF reset start before reinitializing' has been queued to stable release 25.11.3

Kevin Traynor ktraynor at redhat.com
Tue Jul 28 17:55:33 CEST 2026


Hi,

FYI, your patch has been queued to stable release 25.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 08/01/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/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/3c2cb5130edd8f2220f46f3392b7bd9aae35ba97

Thanks.

Kevin

---
>From 3c2cb5130edd8f2220f46f3392b7bd9aae35ba97 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/intel/iavf/iavf.h        |  1 +
 drivers/net/intel/iavf/iavf_ethdev.c | 12 ++++++++++++
 2 files changed, 13 insertions(+)

diff --git a/drivers/net/intel/iavf/iavf.h b/drivers/net/intel/iavf/iavf.h
index a78ab020ba..211d32ef1d 100644
--- a/drivers/net/intel/iavf/iavf.h
+++ b/drivers/net/intel/iavf/iavf.h
@@ -286,4 +286,5 @@ struct iavf_info {
 
 	bool in_reset_recovery;
+	bool reset_pending;
 
 	uint32_t ptp_caps;
diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c
index 4e24a37b47..c43843c4e4 100644
--- a/drivers/net/intel/iavf/iavf_ethdev.c
+++ b/drivers/net/intel/iavf/iavf_ethdev.c
@@ -103,4 +103,5 @@ 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);
@@ -3135,4 +3136,12 @@ iavf_dev_close(struct rte_eth_dev *dev)
 
 	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) {
@@ -3214,4 +3223,5 @@ iavf_dev_reset(struct rte_eth_dev *dev)
 		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,
@@ -3226,6 +3236,8 @@ 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.55.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2026-07-28 16:54:50.944351351 +0100
+++ 0003-net-iavf-wait-for-PF-reset-start-before-reinitializi.patch	2026-07-28 16:54:50.751728346 +0100
@@ -1 +1 @@
-From 1ce3cb5d40de225380fc917ea07081589ad18976 Mon Sep 17 00:00:00 2001
+From 3c2cb5130edd8f2220f46f3392b7bd9aae35ba97 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 1ce3cb5d40de225380fc917ea07081589ad18976 ]
+
@@ -21 +22,0 @@
-Cc: stable at dpdk.org
@@ -32 +33 @@
-index 2615b6f034..4444602a30 100644
+index a78ab020ba..211d32ef1d 100644
@@ -35 +36 @@
-@@ -292,4 +292,5 @@ struct iavf_info {
+@@ -286,4 +286,5 @@ struct iavf_info {
@@ -42 +43 @@
-index a8031e23a5..a38132e80e 100644
+index 4e24a37b47..c43843c4e4 100644
@@ -45 +46 @@
-@@ -107,4 +107,5 @@ static int iavf_dev_stop(struct rte_eth_dev *dev);
+@@ -103,4 +103,5 @@ static int iavf_dev_stop(struct rte_eth_dev *dev);
@@ -51 +52 @@
-@@ -3197,4 +3198,12 @@ iavf_dev_close(struct rte_eth_dev *dev)
+@@ -3135,4 +3136,12 @@ iavf_dev_close(struct rte_eth_dev *dev)
@@ -62 +62,0 @@
- 	vf->aq_intr_enabled = false;
@@ -64 +64,2 @@
-@@ -3274,4 +3283,5 @@ iavf_dev_reset(struct rte_eth_dev *dev)
+ 	if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) {
+@@ -3214,4 +3223,5 @@ iavf_dev_reset(struct rte_eth_dev *dev)
@@ -70 +71 @@
-@@ -3286,6 +3296,8 @@ iavf_dev_reset(struct rte_eth_dev *dev)
+@@ -3226,6 +3236,8 @@ iavf_dev_reset(struct rte_eth_dev *dev)



More information about the stable mailing list