DPDK patches and discussions
 help / color / mirror / Atom feed
From: Radu Nicolau <radu.nicolau@intel.com>
To: Bruce Richardson <bruce.richardson@intel.com>,
	Kevin Laatz <kevin.laatz@intel.com>
Cc: dev@dpdk.org, Radu Nicolau <radu.nicolau@intel.com>
Subject: [PATCH] dma/idxd: add allow/block list support
Date: Tue, 30 Nov 2021 09:54:39 +0000	[thread overview]
Message-ID: <20211130095439.784229-1-radu.nicolau@intel.com> (raw)

Add support for allow or block list for devices bound
to the kernel driver.
When used the allow or block list applies as an additional
condition to the name prefix.

Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
---
 doc/guides/dmadevs/idxd.rst | 10 ++++++++++
 drivers/dma/idxd/idxd_bus.c | 30 ++++++++++++++++++++++++++----
 2 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/doc/guides/dmadevs/idxd.rst b/doc/guides/dmadevs/idxd.rst
index d4a210b854..6201d4db1d 100644
--- a/doc/guides/dmadevs/idxd.rst
+++ b/doc/guides/dmadevs/idxd.rst
@@ -117,6 +117,16 @@ the value used as the DPDK ``--file-prefix`` parameter may be used as a workqueu
 name prefix, instead of ``dpdk_``, allowing each DPDK application instance to only
 use a subset of configured queues.
 
+Additionally, the -a (allowlist) or -b (blocklist) commandline parameters are
+also available to further restrict the device list that will be used.
+If the -a option is used then any device that passes the ``dpdk_`` or
+``--file-prefix`` prefix condition must also be present in the allow list.
+Similarly, when the block list is used any device that passes the prefix
+condition must not be in the block list.
+For example, to only use ``wq0.3``, assuming the name prefix condition is met::
+
+	$ dpdk-test -a wq0.3
+
 Once probed successfully, irrespective of kernel driver, the device will appear as a ``dmadev``,
 that is a "DMA device type" inside DPDK, and can be accessed using APIs from the
 ``rte_dmadev`` library.
diff --git a/drivers/dma/idxd/idxd_bus.c b/drivers/dma/idxd/idxd_bus.c
index 08639e9dce..13cb967f6d 100644
--- a/drivers/dma/idxd/idxd_bus.c
+++ b/drivers/dma/idxd/idxd_bus.c
@@ -9,6 +9,7 @@
 #include <libgen.h>
 
 #include <rte_bus.h>
+#include <rte_devargs.h>
 #include <rte_eal.h>
 #include <rte_log.h>
 #include <rte_dmadev_pmd.h>
@@ -244,8 +245,18 @@ idxd_probe_dsa(struct rte_dsa_device *dev)
 	return 0;
 }
 
+static int search_devargs(const char *name)
+{
+	struct rte_devargs *devargs;
+	RTE_EAL_DEVARGS_FOREACH(dsa_bus.bus.name, devargs) {
+		if (strcmp(devargs->name, name) == 0)
+			return 1;
+	}
+	return 0;
+}
+
 static int
-is_for_this_process_use(const char *name)
+is_for_this_process_use(struct rte_dsa_device *dev, const char *name)
 {
 	char *runtime_dir = strdup(rte_eal_get_runtime_dir());
 	char *prefix = basename(runtime_dir);
@@ -257,6 +268,13 @@ is_for_this_process_use(const char *name)
 	if (strncmp(name, prefix, prefixlen) == 0 && name[prefixlen] == '_')
 		retval = 1;
 
+	if (retval && dsa_bus.bus.conf.scan_mode != RTE_BUS_SCAN_UNDEFINED) {
+		if (dsa_bus.bus.conf.scan_mode == RTE_BUS_SCAN_ALLOWLIST)
+			retval = search_devargs(dev->device.name);
+		else
+			retval = !search_devargs(dev->device.name);
+	}
+
 	free(runtime_dir);
 	return retval;
 }
@@ -273,7 +291,8 @@ dsa_probe(void)
 				read_wq_string(dev, "name", name, sizeof(name)) < 0)
 			continue;
 
-		if (strncmp(type, "user", 4) == 0 && is_for_this_process_use(name)) {
+		if (strncmp(type, "user", 4) == 0 &&
+				is_for_this_process_use(dev, name)) {
 			dev->device.driver = &dsa_bus.driver;
 			idxd_probe_dsa(dev);
 			continue;
@@ -370,8 +389,11 @@ dsa_addr_parse(const char *name, void *addr)
 		return -1;
 	}
 
-	wq->device_id = device_id;
-	wq->wq_id = wq_id;
+	if (wq != NULL) {
+		wq->device_id = device_id;
+		wq->wq_id = wq_id;
+	}
+
 	return 0;
 }
 
-- 
2.25.1


             reply	other threads:[~2021-11-30 10:13 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-30  9:54 Radu Nicolau [this message]
2021-11-30 10:29 ` Bruce Richardson
2021-12-02 12:50 ` [PATCH v2] " Radu Nicolau
2021-12-02 12:56   ` Kevin Laatz
2022-02-13 22:24     ` Thomas Monjalon

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=20211130095439.784229-1-radu.nicolau@intel.com \
    --to=radu.nicolau@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=kevin.laatz@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).