All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
	Bruce Richardson <bruce.richardson@intel.com>,
	Matan Azrad <matan@nvidia.com>
Subject: [RFC] net/vdev_netvsc: disable auto-detection by default
Date: Mon, 23 Feb 2026 17:42:47 -0800	[thread overview]
Message-ID: <20260224014259.443846-1-stephen@networkplumber.org> (raw)

The vdev_netvsc driver auto-injects itself on Hyper-V via an
RTE_INIT constructor. This interferes with tests on github actions
which uses Azure where the driver probes in forked subprocesses
and crashes on uninitialized interrupt instances.

Guard the auto-detection behind RTE_LIBRTE_VDEV_NETVSC_AUTO
(disabled by default). The driver must now be explicitly
requested with --vdev=net_vdev_netvsc.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 config/rte_config.h                    |  3 +++
 doc/guides/nics/vdev_netvsc.rst        | 11 ++++++-----
 doc/guides/rel_notes/release_26_03.rst |  8 ++++++++
 drivers/net/vdev_netvsc/vdev_netvsc.c  | 20 ++++++++++++++++++--
 4 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/config/rte_config.h b/config/rte_config.h
index a2609fa403..e1977081e6 100644
--- a/config/rte_config.h
+++ b/config/rte_config.h
@@ -153,4 +153,7 @@
 /* DLB2 defines */
 // RTE_LIBRTE_PMD_DLB2_QUELL_STATS is not set
 
+/* vdev_netvsc defines */
+// RTE_LIBRTE_VDEV_NETVSC_AUTO is not set
+
 #endif /* _RTE_CONFIG_H_ */
diff --git a/doc/guides/nics/vdev_netvsc.rst b/doc/guides/nics/vdev_netvsc.rst
index 8dd5981947..4a3049ef42 100644
--- a/doc/guides/nics/vdev_netvsc.rst
+++ b/doc/guides/nics/vdev_netvsc.rst
@@ -65,8 +65,9 @@ a new NetVSC driver will be integrated.
 Runtime Configuration
 ---------------------
 
-This driver is invoked automatically in Hyper-V VM systems unless the user
-invoked it by command line using ``--vdev=net_vdev_netvsc`` EAL option.
+This driver can be invoked automatically if ``RTE_LIBRTE_VDEV_NETVSC_AUTO``
+is defined in the build configuration. Otherwise, it must be enabled
+using the ``--vdev=net_vdev_netvsc`` EAL command line option.
 
 The following device parameters are supported:
 
@@ -87,12 +88,12 @@ The following device parameters are supported:
 
 - ``ignore`` [int]
 
-  If nonzero, ignores the driver running (actually used to disable the
-  auto-detection in Hyper-V VM).
+  If auto-detection is enabled in the build, this parameter disables the
+  auto-detection of network interfaces.
 
 .. note::
 
    Not specifying either ``iface`` or ``mac`` makes this driver attach itself to
    all unrouted NetVSC interfaces found on the system.
    Specifying the device makes this driver attach itself to the device
-   regardless the device routes.
+   regardless of the device routes.
diff --git a/doc/guides/rel_notes/release_26_03.rst b/doc/guides/rel_notes/release_26_03.rst
index b4499ec066..43d5b89695 100644
--- a/doc/guides/rel_notes/release_26_03.rst
+++ b/doc/guides/rel_notes/release_26_03.rst
@@ -106,6 +106,14 @@ New Features
   Added handling of the key combination Control+L
   to clear the screen before redisplaying the prompt.
 
+* **Updated Microsoft vdev_netvsc driver.**
+
+  * Disabled automatic detection on Hyper-V/Azure by default.
+    The driver must now be explicitly requested with ``--vdev=net_vdev_netvsc``.
+    The previous auto-detection behavior can be restored by building with
+    ``RTE_LIBRTE_VDEV_NETVSC_AUTO`` defined.
+
+
 Removed Items
 -------------
 
diff --git a/drivers/net/vdev_netvsc/vdev_netvsc.c b/drivers/net/vdev_netvsc/vdev_netvsc.c
index f4a84783ce..a0d9d2aea9 100644
--- a/drivers/net/vdev_netvsc/vdev_netvsc.c
+++ b/drivers/net/vdev_netvsc/vdev_netvsc.c
@@ -42,7 +42,9 @@
 #define VDEV_NETVSC_ARG_IFACE "iface"
 #define VDEV_NETVSC_ARG_MAC "mac"
 #define VDEV_NETVSC_ARG_FORCE "force"
+#ifdef RTE_LIBRTE_VDEV_NETVSC_AUTO
 #define VDEV_NETVSC_ARG_IGNORE "ignore"
+#endif
 #define VDEV_NETVSC_PROBE_MS 1000
 
 #define NETVSC_CLASS_ID "{f8615163-df3e-46c5-913f-f2d2f965ed0e}"
@@ -653,7 +655,9 @@ vdev_netvsc_vdev_probe(struct rte_vdev_device *dev)
 		VDEV_NETVSC_ARG_IFACE,
 		VDEV_NETVSC_ARG_MAC,
 		VDEV_NETVSC_ARG_FORCE,
+#ifdef RTE_LIBRTE_VDEV_NETVSC_AUTO
 		VDEV_NETVSC_ARG_IGNORE,
+#endif
 		NULL,
 	};
 	const char *name = rte_vdev_device_name(dev);
@@ -663,7 +667,9 @@ vdev_netvsc_vdev_probe(struct rte_vdev_device *dev)
 	unsigned int specified = 0;
 	unsigned int matched = 0;
 	int force = 0;
+#ifdef RTE_LIBRTE_VDEV_NETVSC_AUTO
 	int ignore = 0;
+#endif
 	unsigned int i;
 	int ret;
 
@@ -678,14 +684,18 @@ vdev_netvsc_vdev_probe(struct rte_vdev_device *dev)
 
 		if (!strcmp(pair->key, VDEV_NETVSC_ARG_FORCE))
 			force = !!atoi(pair->value);
+#ifdef RTE_LIBRTE_VDEV_NETVSC_AUTO
 		else if (!strcmp(pair->key, VDEV_NETVSC_ARG_IGNORE))
 			ignore = !!atoi(pair->value);
+#endif
 		else if (!strcmp(pair->key, VDEV_NETVSC_ARG_IFACE) ||
 			 !strcmp(pair->key, VDEV_NETVSC_ARG_MAC))
 			++specified;
 	}
+#ifdef RTE_LIBRTE_VDEV_NETVSC_AUTO
 	if (ignore)
 		goto ignore;
+#endif
 	if (specified > 1) {
 		DRV_LOG(ERR, "More than one way used to specify the netvsc"
 			" device.");
@@ -713,7 +723,9 @@ vdev_netvsc_vdev_probe(struct rte_vdev_device *dev)
 	}
 error:
 	++vdev_netvsc_ctx_inst;
+#ifdef RTE_LIBRTE_VDEV_NETVSC_AUTO
 ignore:
+#endif
 	rte_kvargs_free(kvargs);
 	/* Reset alarm if there are device context created */
 	if (vdev_netvsc_ctx_count) {
@@ -765,9 +777,12 @@ RTE_PMD_REGISTER_ALIAS(VDEV_NETVSC_DRIVER, eth_vdev_netvsc);
 RTE_PMD_REGISTER_PARAM_STRING(net_vdev_netvsc,
 			      VDEV_NETVSC_ARG_IFACE "=<string> "
 			      VDEV_NETVSC_ARG_MAC "=<string> "
-			      VDEV_NETVSC_ARG_FORCE "=<int> "
-			      VDEV_NETVSC_ARG_IGNORE "=<int>");
+#ifdef RTE_LIBRTE_VDEV_NETVSC_AUTO
+			      VDEV_NETVSC_ARG_IGNORE "=<int> ");
+#endif
+			      VDEV_NETVSC_ARG_FORCE "=<int>");
 
+#ifdef RTE_LIBRTE_VDEV_NETVSC_AUTO
 /** Compare function for vdev find device operation. */
 static int
 vdev_netvsc_cmp_rte_device(const struct rte_device *dev1,
@@ -808,3 +823,4 @@ RTE_INIT(vdev_netvsc_custom_scan_add)
 	if (rte_hypervisor_get() == RTE_HYPERVISOR_HYPERV)
 		rte_vdev_add_custom_scan(vdev_netvsc_scan_callback, NULL);
 }
+#endif /* RTE_LIBRTE_VDEV_NETVSC_AUTO */
-- 
2.51.0


             reply	other threads:[~2026-02-24  1:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-24  1:42 Stephen Hemminger [this message]
2026-02-24  7:41 ` [RFC] net/vdev_netvsc: disable auto-detection by default David Marchand
2026-02-24  7:58   ` David Marchand
2026-02-24 14:41     ` Stephen Hemminger
2026-02-24 14:44       ` David Marchand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260224014259.443846-1-stephen@networkplumber.org \
    --to=stephen@networkplumber.org \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=matan@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.