Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2226534/?format=api
{ "id": 2226534, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2226534/?format=api", "web_url": "http://patchwork.ozlabs.org/project/openvswitch/patch/20260422145231.1537664-3-david.marchand@redhat.com/", "project": { "id": 47, "url": "http://patchwork.ozlabs.org/api/1.1/projects/47/?format=api", "name": "Open vSwitch", "link_name": "openvswitch", "list_id": "ovs-dev.openvswitch.org", "list_email": "ovs-dev@openvswitch.org", "web_url": "http://openvswitch.org/", "scm_url": "git@github.com:openvswitch/ovs.git", "webscm_url": "https://github.com/openvswitch/ovs" }, "msgid": "<20260422145231.1537664-3-david.marchand@redhat.com>", "date": "2026-04-22T14:52:31", "name": "[ovs-dev,v2,2/2] dpdk: Disable initial device probe.", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "6c455fea91d20a01fffb6329e07e57eb608315bf", "submitter": { "id": 75396, "url": "http://patchwork.ozlabs.org/api/1.1/people/75396/?format=api", "name": "David Marchand", "email": "david.marchand@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/openvswitch/patch/20260422145231.1537664-3-david.marchand@redhat.com/mbox/", "series": [ { "id": 501027, "url": "http://patchwork.ozlabs.org/api/1.1/series/501027/?format=api", "web_url": "http://patchwork.ozlabs.org/project/openvswitch/list/?series=501027", "date": "2026-04-22T14:52:29", "name": "Disable initial device probe in DPDK.", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/501027/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2226534/comments/", "check": "warning", "checks": "http://patchwork.ozlabs.org/api/patches/2226534/checks/", "tags": {}, "headers": { "Return-Path": "<ovs-dev-bounces@openvswitch.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "dev@openvswitch.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "ovs-dev@lists.linuxfoundation.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=UkMJe8/L;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=140.211.166.136; helo=smtp3.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org)", "smtp3.osuosl.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key)\n header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=UkMJe8/L", "smtp1.osuosl.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com", "smtp1.osuosl.org;\n dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com\n header.a=rsa-sha256 header.s=mimecast20190719 header.b=UkMJe8/L" ], "Received": [ "from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g12K12ncsz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 00:53:09 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby smtp3.osuosl.org (Postfix) with ESMTP id C11CD61B5F;\n\tWed, 22 Apr 2026 14:53:06 +0000 (UTC)", "from smtp3.osuosl.org ([127.0.0.1])\n by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id mR8fvOsaYzvz; Wed, 22 Apr 2026 14:53:04 +0000 (UTC)", "from lists.linuxfoundation.org (lf-lists.osuosl.org\n [IPv6:2605:bc80:3010:104::8cd3:938])\n\tby smtp3.osuosl.org (Postfix) with ESMTPS id 0B68961B4B;\n\tWed, 22 Apr 2026 14:53:04 +0000 (UTC)", "from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id EA894C058E;\n\tWed, 22 Apr 2026 14:53:03 +0000 (UTC)", "from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138])\n by lists.linuxfoundation.org (Postfix) with ESMTP id 40BC4C058D\n for <dev@openvswitch.org>; Wed, 22 Apr 2026 14:53:02 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n by smtp1.osuosl.org (Postfix) with ESMTP id 79C4E849D7\n for <dev@openvswitch.org>; Wed, 22 Apr 2026 14:52:56 +0000 (UTC)", "from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id uzV1t7smv2bx for <dev@openvswitch.org>;\n Wed, 22 Apr 2026 14:52:55 +0000 (UTC)", "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by smtp1.osuosl.org (Postfix) with ESMTPS id D22A2849CF\n for <dev@openvswitch.org>; Wed, 22 Apr 2026 14:52:54 +0000 (UTC)", "from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-467-LOGFQp-lMaaBM1XpfVt29w-1; Wed,\n 22 Apr 2026 10:52:50 -0400", "from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 197C819560AA; Wed, 22 Apr 2026 14:52:49 +0000 (UTC)", "from dmarchan.lan (unknown [10.44.49.81])\n by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 58C753000C15; Wed, 22 Apr 2026 14:52:47 +0000 (UTC)" ], "X-Virus-Scanned": [ "amavis at osuosl.org", "amavis at osuosl.org" ], "X-Comment": "SPF check N/A for local connections -\n client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN> ", "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 smtp3.osuosl.org 0B68961B4B", "OpenDKIM Filter v2.11.0 smtp1.osuosl.org D22A2849CF" ], "Received-SPF": "Pass (mailfrom) identity=mailfrom; client-ip=170.10.129.124;\n helo=us-smtp-delivery-124.mimecast.com;\n envelope-from=david.marchand@redhat.com; receiver=<UNKNOWN>", "DMARC-Filter": "OpenDMARC Filter v1.4.2 smtp1.osuosl.org D22A2849CF", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776869573;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=80pPcFpAnK+R21fmBhY/fkxNtJ2Q2Lg9Le//cO71WDc=;\n b=UkMJe8/LGZ8oWnJnDbH553hmgKyZW+pwsBol19vTYxv46n7GnqeGrRGE9Cid+wkp2u6DKB\n PxfXUVJ7qdggkU+1VcZm/525RcSYBoI37yHde1ideEb/JZXXVD2BOYXi+oQpfomk05kDU3\n 3bapv1sPwuzGXN/GCCN584EbDmbqClY=", "X-MC-Unique": "LOGFQp-lMaaBM1XpfVt29w-1", "X-Mimecast-MFC-AGG-ID": "LOGFQp-lMaaBM1XpfVt29w_1776869569", "To": "dev@openvswitch.org", "Date": "Wed, 22 Apr 2026 16:52:31 +0200", "Message-ID": "<20260422145231.1537664-3-david.marchand@redhat.com>", "In-Reply-To": "<20260422145231.1537664-1-david.marchand@redhat.com>", "References": "<20260422145231.1537664-1-david.marchand@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.4", "X-Mimecast-Spam-Score": "0", "X-Mimecast-MFC-PROC-ID": "BJGURPVfheVAl-_Z4EVFkMQC0WwfoLKg1377SjAZCYU_1776869569", "X-Mimecast-Originator": "redhat.com", "Subject": "[ovs-dev] [PATCH v2 2/2] dpdk: Disable initial device probe.", "X-BeenThere": "ovs-dev@openvswitch.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "<ovs-dev.openvswitch.org>", "List-Unsubscribe": "<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>", "List-Archive": "<http://mail.openvswitch.org/pipermail/ovs-dev/>", "List-Post": "<mailto:ovs-dev@openvswitch.org>", "List-Help": "<mailto:ovs-dev-request@openvswitch.org?subject=help>", "List-Subscribe": "<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>", "From": "David Marchand via dev <ovs-dev@openvswitch.org>", "Reply-To": "David Marchand <david.marchand@redhat.com>", "Cc": "elibr@nvidia.com", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "ovs-dev-bounces@openvswitch.org", "Sender": "\"dev\" <ovs-dev-bounces@openvswitch.org>" }, "content": "By default, DPDK probes all available resources (like PCI devices) and\npartially initialises them (/ takes over them).\nThis behavior has been relied on by OVS, since netdev-dpdk introduction.\nIt is not needed since DPDK device hotplug has been supported and used\nfor some time now.\n\nBesides, this initial probing may not be desirable:\n- for PCI devices bound to vfio-pci, the first application taking over\n them \"wins\", meaning that OVS would prevent qemu from using some VF\n devices,\n- for mlx5 devices,\n - the driver maintains link status and liveness of all ports\n (taking some kernel lock) even when OVS only uses a subset of them,\n - if some driver feature needs to be enabled for one port via a devargs,\n this would have to be set in dpdk-extra,\n\nChange this behavior and disable the initial PCI probing by passing\na specially crafted allow list: this implementation is not elegant\nbut it has been successfully used (for the PCI part) in a number of\nsetups I know, and there is no better DPDK API to achieve the same\nat the moment.\n\nThis behavior change breaks setups that were using the\nclass=eth,mac=XX:XX:XX:XX:XX:XX syntax because OVS was relying on the\n(fragile) assumption that all DPDK ports were probed at init once and\nfor all.\nAdd a warning for users of this syntax, update the documentation and\nadd an option to restore the original behavior via\n'dpdk-probe-at-init=true'.\n\nThis option also helps for unexpected cases like https://xkcd.com/1172/.\n\nAcked-by: Eli Britstein <elibr@nvidia.com>\nAcked-by: Eelco Chaudron <echaudro@redhat.com>\nSigned-off-by: David Marchand <david.marchand@redhat.com>\n---\nChanges since v1:\n- improved documentation wording and references,\n- added checks for --allow/--block and --no-pci options,\n\nChanges since RFC v2:\n- updated descriptions and comments,\n\nChanges since RFC v1:\n- updated commitlog (mentionning devargs),\n- handled other DPDK buses,\n\n---\n Documentation/howto/dpdk.rst | 6 +++++\n Documentation/intro/install/dpdk.rst | 6 +++++\n NEWS | 5 ++++\n lib/dpdk.c | 31 +++++++++++++++++++++\n lib/netdev-dpdk.c | 2 +-\n tests/system-dpdk-macros.at | 2 +-\n tests/system-dpdk.at | 40 ++++++++++++++--------------\n vswitchd/vswitch.xml | 31 +++++++++++++++++++++\n 8 files changed, 101 insertions(+), 22 deletions(-)", "diff": "diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst\nindex 73e630b07f..5d6bf94cdb 100644\n--- a/Documentation/howto/dpdk.rst\n+++ b/Documentation/howto/dpdk.rst\n@@ -62,6 +62,12 @@ is suggested::\n \n .. important::\n \n+ Using this syntax requires that DPDK probes the device that owns those\n+ multiple ports. This can be achieved by either setting an allowlist\n+ of PCI devices in the ``dpdk-extra`` configuration, or by requesting that\n+ all available devices (including PCI devices) be probed at initialization\n+ (setting ``dpdk-probe-at-init`` to true).\n+\n Hotplugging physical interfaces is not supported using the above syntax.\n This is expected to change with the release of DPDK v18.05. For information\n on hotplugging physical interfaces, you should instead refer to\ndiff --git a/Documentation/intro/install/dpdk.rst b/Documentation/intro/install/dpdk.rst\nindex 6f4687bdea..8bc15529ba 100644\n--- a/Documentation/intro/install/dpdk.rst\n+++ b/Documentation/intro/install/dpdk.rst\n@@ -297,6 +297,12 @@ listed below. Defaults will be provided for all values not explicitly set.\n sockets. If not specified, this option will not be set by default. DPDK\n default will be used instead.\n \n+``dpdk-probe-at-init``\n+ Specifies whether DPDK should probe all devices available at initialization.\n+ This option is needed when using the ``class=eth,mac=XX:XX:XX:XX:XX:XX``\n+ syntax for DPDK ports. Defaults to false. See ``ovs-vswitchd.conf.db(5)``\n+ for more details.\n+\n ``dpdk-hugepage-dir``\n Directory where hugetlbfs is mounted\n \ndiff --git a/NEWS b/NEWS\nindex 1a3044cbfb..67107da720 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -3,6 +3,11 @@ Post-v3.7.0\n - Userspace datapath:\n * ARP/ND lookups for native tunnel are now rate limited. The holdout\n timer can be configured with 'tnl/neigh/retrans_time'.\n+ - DPDK:\n+ * Probing of devices at DPDK initialization has been disabled to avoid\n+ wasting resources on unused devices. This breaks DPDK netdev ports\n+ using the \"class=eth,mac=\" syntax (though it can be restored via the\n+ 'dpdk-probe-at-init' config option, see ovs-vswitchd.conf.db(5)).\n \n \n v3.7.0 - 16 Feb 2026\ndiff --git a/lib/dpdk.c b/lib/dpdk.c\nindex d27b95cd9a..3685baf00c 100644\n--- a/lib/dpdk.c\n+++ b/lib/dpdk.c\n@@ -430,6 +430,37 @@ dpdk_init__(const struct smap *ovs_other_config)\n svec_add_nocopy(&args, xasprintf(\"0@%d\", cpu));\n }\n \n+ if (!args_contains(&args, \"-a\") && !args_contains(&args, \"--allow\")\n+ && !args_contains(&args, \"-b\") && !args_contains(&args, \"--block\")\n+ && !smap_get_bool(ovs_other_config, \"dpdk-probe-at-init\", false)) {\n+#ifdef RTE_BUS_AUXILIARY\n+ svec_add(&args, \"-a\");\n+ svec_add(&args, \"auxiliary:\");\n+#endif\n+#ifdef RTE_BUS_CDX\n+ svec_add(&args, \"-a\");\n+ svec_add(&args, \"cdx:cdx-\");\n+#endif\n+#ifdef RTE_BUS_FSLMC\n+ svec_add(&args, \"-a\");\n+ svec_add(&args, \"fslmc:dpni.65535\");\n+#endif\n+#ifdef RTE_BUS_PCI\n+ if (!args_contains(&args, \"--no-pci\")) {\n+ svec_add(&args, \"-a\");\n+ svec_add(&args, \"pci:0000:00:00.0\");\n+ }\n+#endif\n+#ifdef RTE_BUS_UACCE\n+ svec_add(&args, \"-a\");\n+ svec_add(&args, \"uacce:\");\n+#endif\n+#ifdef RTE_BUS_VMBUS\n+ svec_add(&args, \"-a\");\n+ svec_add(&args, \"vmbus:00000000-0000-0000-0000-000000000000\");\n+#endif\n+ }\n+\n svec_terminate(&args);\n \n optind = 1;\ndiff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c\nindex 7629d0f974..e375275de1 100644\n--- a/lib/netdev-dpdk.c\n+++ b/lib/netdev-dpdk.c\n@@ -2052,7 +2052,7 @@ netdev_dpdk_get_port_by_mac(const char *mac_str, char const **extra_err)\n }\n }\n \n- *extra_err = \"unknown mac\";\n+ *extra_err = \"unknown mac (need dpdk-probe-at-init=true ?)\";\n return DPDK_ETH_PORT_ID_INVALID;\n }\n \ndiff --git a/tests/system-dpdk-macros.at b/tests/system-dpdk-macros.at\nindex f8ba766739..716d8a357d 100644\n--- a/tests/system-dpdk-macros.at\n+++ b/tests/system-dpdk-macros.at\n@@ -139,7 +139,7 @@ m4_define([OVS_TRAFFIC_VSWITCHD_START],\n OVS_DPDK_PRE_CHECK()\n OVS_WAIT_WHILE([ip link show ovs-netdev])\n dnl For functional tests, no need for DPDK PCI probing.\n- OVS_DPDK_START([--no-pci], [--disable-system], [$3])\n+ OVS_DPDK_START([], [--disable-system], [$3])\n dnl Add bridges, ports, etc.\n OVS_WAIT_WHILE([ip link show br0])\n AT_CHECK([ovs-vsctl -- _ADD_BR([br0]) -- $1 m4_if([$2], [], [], [| uuidfilt])], [0], [$2])\ndiff --git a/tests/system-dpdk.at b/tests/system-dpdk.at\nindex 47a70f2b03..c5f18e71c5 100644\n--- a/tests/system-dpdk.at\n+++ b/tests/system-dpdk.at\n@@ -43,7 +43,7 @@ dnl Check if EAL init is successful\n AT_SETUP([OVS-DPDK - EAL init])\n AT_KEYWORDS([dpdk])\n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n AT_CHECK([grep \"DPDK Enabled - initializing...\" ovs-vswitchd.log], [], [stdout])\n AT_CHECK([grep \"EAL\" ovs-vswitchd.log], [], [stdout])\n AT_CHECK([grep \"DPDK Enabled - initialized\" ovs-vswitchd.log], [], [stdout])\n@@ -59,7 +59,7 @@ AT_SETUP([OVS-DPDK - dpdk-lcore-mask conversion - single])\n AT_KEYWORDS([dpdk])\n OVS_DPDK_PRE_CHECK()\n OVS_DPDK_START_OVSDB()\n-OVS_DPDK_START_VSWITCHD([--no-pci])\n+OVS_DPDK_START_VSWITCHD()\n CHECK_CPU_DISCOVERED()\n AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x1])\n AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true])\n@@ -77,7 +77,7 @@ AT_SETUP([OVS-DPDK - dpdk-lcore-mask conversion - multi])\n AT_KEYWORDS([dpdk])\n OVS_DPDK_PRE_CHECK()\n OVS_DPDK_START_OVSDB()\n-OVS_DPDK_START_VSWITCHD([--no-pci])\n+OVS_DPDK_START_VSWITCHD()\n CHECK_CPU_DISCOVERED(4)\n AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0xf])\n AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true])\n@@ -95,7 +95,7 @@ AT_SETUP([OVS-DPDK - dpdk-lcore-mask conversion - non-contig])\n AT_KEYWORDS([dpdk])\n OVS_DPDK_PRE_CHECK()\n OVS_DPDK_START_OVSDB()\n-OVS_DPDK_START_VSWITCHD([--no-pci])\n+OVS_DPDK_START_VSWITCHD()\n CHECK_CPU_DISCOVERED(8)\n AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0xca])\n AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true])\n@@ -113,7 +113,7 @@ AT_SETUP([OVS-DPDK - dpdk-lcore-mask conversion - zeromask])\n AT_KEYWORDS([dpdk])\n OVS_DPDK_PRE_CHECK()\n OVS_DPDK_START_OVSDB()\n-OVS_DPDK_START_VSWITCHD([--no-pci])\n+OVS_DPDK_START_VSWITCHD()\n AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x0])\n AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true])\n OVS_WAIT_UNTIL([grep \"Ignoring database defined option 'dpdk-lcore-mask' due to invalid value '0x0'\" ovs-vswitchd.log])\n@@ -152,7 +152,7 @@ dnl Add vhost-user-client port\n AT_SETUP([OVS-DPDK - add vhost-user-client port])\n AT_KEYWORDS([dpdk])\n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -181,7 +181,7 @@ AT_SETUP([OVS-DPDK - ping vhost-user ports])\n AT_KEYWORDS([dpdk])\n OVS_DPDK_PRE_CHECK()\n OVS_DPDK_CHECK_TESTPMD()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -237,7 +237,7 @@ AT_SETUP([OVS-DPDK - ping vhost-user-client ports])\n AT_KEYWORDS([dpdk])\n OVS_DPDK_PRE_CHECK()\n OVS_DPDK_CHECK_TESTPMD()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -350,7 +350,7 @@ AT_SETUP([OVS-DPDK - Ingress policing create delete vport port])\n AT_KEYWORDS([dpdk])\n \n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS and add ingress policer\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -387,7 +387,7 @@ AT_SETUP([OVS-DPDK - Ingress policing no policing rate])\n AT_KEYWORDS([dpdk])\n \n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS and add ingress policer\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -421,7 +421,7 @@ AT_SETUP([OVS-DPDK - Ingress policing no policing burst])\n AT_KEYWORDS([dpdk])\n \n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS and add ingress policer\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -487,7 +487,7 @@ AT_SETUP([OVS-DPDK - QoS create delete vport port])\n AT_KEYWORDS([dpdk])\n \n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS and add egress policer\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -522,7 +522,7 @@ AT_SETUP([OVS-DPDK - QoS no cir])\n AT_KEYWORDS([dpdk])\n \n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS and add egress policer\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -551,7 +551,7 @@ AT_SETUP([OVS-DPDK - QoS no cbs])\n AT_KEYWORDS([dpdk])\n \n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS and add egress policer\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -657,7 +657,7 @@ AT_KEYWORDS([dpdk])\n \n OVS_DPDK_CHECK_TESTPMD()\n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS with default MTU value\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -698,7 +698,7 @@ AT_KEYWORDS([dpdk])\n \n OVS_DPDK_CHECK_TESTPMD()\n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS and modify MTU value\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -816,7 +816,7 @@ AT_KEYWORDS([dpdk])\n \n OVS_DPDK_CHECK_TESTPMD()\n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS and set MTU value to max upper bound\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -858,7 +858,7 @@ AT_KEYWORDS([dpdk])\n \n OVS_DPDK_CHECK_TESTPMD()\n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n \n dnl Add userspace bridge and attach it to OVS and set MTU value to min lower bound\n AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])\n@@ -897,7 +897,7 @@ AT_SETUP([OVS-DPDK - user configured mempool])\n AT_KEYWORDS([dpdk])\n OVS_DPDK_PRE_CHECK()\n OVS_DPDK_START_OVSDB()\n-OVS_DPDK_START_VSWITCHD([--no-pci])\n+OVS_DPDK_START_VSWITCHD()\n \n AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:shared-mempool-config=8000,6000,1500])\n AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true])\n@@ -946,7 +946,7 @@ dnl --------------------------------------------------------------------------\n AT_SETUP([OVS-DPDK - ovs-appctl dpif/offload/show])\n AT_KEYWORDS([dpdk dpif-offload])\n OVS_DPDK_PRE_CHECK()\n-OVS_DPDK_START([--no-pci])\n+OVS_DPDK_START()\n AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev])\n AT_CHECK([ovs-vsctl add-port br0 p1 \\\n -- set Interface p1 type=dpdk options:dpdk-devargs=net_null0,no-rx=1],\ndiff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml\nindex b7a5afc0a5..e33f43b66b 100644\n--- a/vswitchd/vswitch.xml\n+++ b/vswitchd/vswitch.xml\n@@ -453,6 +453,37 @@\n </p>\n </column>\n \n+ <column name=\"other_config\" key=\"dpdk-probe-at-init\"\n+ type='{\"type\": \"boolean\"}'>\n+ <p>\n+ Specifies whether DPDK should probe all devices available at the\n+ time DPDK is initialized. When set to <code>false</code> (the\n+ default), OVS will instruct DPDK to skip probing devices at\n+ initialization, unless <ref column=\"other_config\" key=\"dpdk-extra\"/>\n+ already contains allowed or blocked devices. This is required when\n+ declaring DPDK ports using the\n+ <code>class=eth,mac=XX:XX:XX:XX:XX:XX</code> syntax.\n+ </p>\n+ <p>\n+ Enabling this option implies higher resource consumption, as OVS may\n+ not use all probed devices. It may also cause undesired side effects\n+ such as additional interrupt handling and link status checks for\n+ unused devices. For example, mlx5 devices maintain link status and\n+ liveness by taking kernel locks frequently, even when OVS only uses\n+ a subset of the available ports.\n+ </p>\n+ <p>\n+ Note that this option has no effect when\n+ <ref column=\"other_config\" key=\"dpdk-extra\"/> contains allowed\n+ (<code>-a</code> or <code>--allow</code>) or blocked\n+ (<code>-b</code> or <code>--block</code>) devices, as DPDK will\n+ honor those specifications regardless of this setting.\n+ </p>\n+ <p>\n+ Defaults to <code>false</code>.\n+ </p>\n+ </column>\n+\n <column name=\"other_config\" key=\"dpdk-extra\"\n type='{\"type\": \"string\"}'>\n <p>\n", "prefixes": [ "ovs-dev", "v2", "2/2" ] }