Thread (123 messages) 123 messages, 7 authors, 2017-07-08

Re: [PATCH 7/9] bus: add helper to find a bus from a device name

From: Gaëtan Rivet <hidden>
Date: 2017-06-07 20:03:38

On Wed, Jun 07, 2017 at 07:28:07PM +0200, Jan Blunck wrote:
On Wed, May 24, 2017 at 5:12 PM, Gaetan Rivet [off-list ref] wrote:
quoted
Find which bus should be able to parse this device name into an internal
device representation.
No, please don't add this. One should know to what bus a device
belongs to before plugging it. Artificially encoding the parent bus
into the device name is not the right thing to do. Please keep those
things separate.
The EAL has no way to know this currently. As you noted, it has to know
onto which bus a device belongs before plugging it.
quoted
Signed-off-by: Gaetan Rivet <redacted>
---
 lib/librte_eal/bsdapp/eal/rte_eal_version.map   |  1 +
 lib/librte_eal/common/eal_common_bus.c          | 15 +++++++++++++++
 lib/librte_eal/common/include/rte_bus.h         | 12 ++++++++++++
 lib/librte_eal/linuxapp/eal/rte_eal_version.map |  1 +
 4 files changed, 29 insertions(+)
diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
index 3517d74..04fa882 100644
--- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map
+++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
@@ -202,5 +202,6 @@ DPDK_17.08 {
        global:

        rte_bus_from_name;
+       rte_bus_from_dev;

 } DPDK_17.05;
diff --git a/lib/librte_eal/common/eal_common_bus.c b/lib/librte_eal/common/eal_common_bus.c
index 7977190..08fff60 100644
--- a/lib/librte_eal/common/eal_common_bus.c
+++ b/lib/librte_eal/common/eal_common_bus.c
@@ -242,3 +242,18 @@ rte_bus_from_name(const char *str)
                return NULL;
        return rte_bus_find(bus_cmp_name, str);
 }
+
+static int
+bus_can_parse(const struct rte_bus *bus, const void *_name)
+{
+       const char *name = _name;
+
+       return (bus->parse && !bus->parse(name, NULL));
+}
+
+/* find a bus capable of parsing a device description */
+struct rte_bus *
+rte_bus_from_dev(const char *str)
+{
+       return rte_bus_find(bus_can_parse, str);
+}
diff --git a/lib/librte_eal/common/include/rte_bus.h b/lib/librte_eal/common/include/rte_bus.h
index 5b87ac4..0b48e66 100644
--- a/lib/librte_eal/common/include/rte_bus.h
+++ b/lib/librte_eal/common/include/rte_bus.h
@@ -251,6 +251,18 @@ struct rte_bus *rte_bus_find_by_device(const struct rte_device *dev);
 struct rte_bus *rte_bus_from_name(const char *str);

 /**
+ * Find a bus capable of identifying a device.
+ *
+ * @param str
+ *   A device identifier (PCI address, virtual PMD name, ...).
+ *
+ * @return
+ *   A valid bus structure if found.
+ *   NULL if no bus is able to parse this device.
+ */
+struct rte_bus *rte_bus_from_dev(const char *str);
+
+/**
  * Helper for Bus registration.
  * The constructor has higher priority than PMD constructors.
  */
diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
index 6607acc..a5127d6 100644
--- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map
+++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
@@ -206,5 +206,6 @@ DPDK_17.08 {
        global:

        rte_bus_from_name;
+       rte_bus_from_dev;

 } DPDK_17.05;
--
2.1.4
-- 
Gaëtan Rivet
6WIND
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help