Hello Gaetan,

Some comments inline:

On Wednesday 05 July 2017 05:25 AM, Gaetan Rivet wrote:
Find which bus should be able to parse this device name into an internal
device representation.

Signed-off-by: Gaetan Rivet <gaetan.ri...@6wind.com>
---
  lib/librte_eal/common/eal_common_bus.c | 21 +++++++++++++++++++++
  lib/librte_eal/common/eal_private.h    | 12 ++++++++++++
  2 files changed, 33 insertions(+)

diff --git a/lib/librte_eal/common/eal_common_bus.c 
b/lib/librte_eal/common/eal_common_bus.c
index 87b0c6e..34fcfa1 100644
--- a/lib/librte_eal/common/eal_common_bus.c
+++ b/lib/librte_eal/common/eal_common_bus.c
@@ -204,3 +204,24 @@ rte_bus_find_by_name(const char *busname)
  {
        return rte_bus_find(NULL, cmp_bus_name, (const void *)busname);
  }
+
+static int
+bus_can_parse(const struct rte_bus *bus, const void *_name)
+{
+       const char *name = _name;
+
+       return !(bus->parse && bus->parse(name, NULL) == 0);
+}
+
+struct rte_bus *
+rte_bus_find_by_device_name(const char *str)
+{
+       char name[32];

It is possible to use a constant here? Basically, I am not sure why '32' has been chosen - or maybe, it might remind a reader in future the reason for this value.

Just to clarify: is there any documented limit on bus name? Until this point, the name (and length) of bus was responsibility of bus driver implementation. eal_common_bus.c doesn't codify any limit - so, this may have to be advertised, even if just within the code.

+       char *c;
+
+       snprintf(name, sizeof(name), "%s", str);
+       c = strchr(name, ',');

I saw a lot of discussion on the naming assumptions/presumptions. Though, I am not sure I have an understood conclusion from that.
So, this might be incorrect/ill-informed:

Is it assumed that ',' is not present in device name?

Do you think it would be better if this is documented that ',' in a device name is reserved (as per devargs)? (or, is this already known?)

For example, in case of DPAA2 devices, I didn't consider this as a case while generating names while scanning the bus (though, I didn't have a ',' in the name). But, if a well known fact, bus drivers can normalize their device names before creating device names.

+       if (c != NULL)
+               c[0] = '\0';
+       return rte_bus_find(NULL, bus_can_parse, name);
+}
diff --git a/lib/librte_eal/common/eal_private.h 
b/lib/librte_eal/common/eal_private.h
index 6cacce0..0836339 100644
--- a/lib/librte_eal/common/eal_private.h
+++ b/lib/librte_eal/common/eal_private.h
@@ -338,4 +338,16 @@ int rte_eal_hugepage_attach(void);
   */
  bool rte_eal_using_phys_addrs(void);
+/**
+ * Find a bus capable of identifying a device.
+ *
+ * @param str
+ *   A device identifier (PCI address, virtual PMD name, ...).
+ *
+ * @return
+ *   A valid bus handle if found.
+ *   NULL if no bus is able to parse this device.
+ */
+struct rte_bus *rte_bus_find_by_device_name(const char *str);
+
  #endif /* _EAL_PRIVATE_H_ */


(Apologies for commenting so late in series - feel free to ignore if this disrupts your cycle or sounds out-of-context.)

-
Shreyansh

Reply via email to