On Wednesday 13 December 2017 08:17 PM, Gaëtan Rivet wrote:
On Wed, Dec 13, 2017 at 07:56:42PM +0530, Shreyansh Jain wrote:
On Thursday 12 October 2017 01:51 PM, Gaetan Rivet wrote:
Add a new generic device declaration parameter:

     --dev=<device_declaration>


[...]


diff --git a/lib/librte_eal/common/eal_common_options.c 
b/lib/librte_eal/common/eal_common_options.c
index 603df27..b7591fd 100644
--- a/lib/librte_eal/common/eal_common_options.c
+++ b/lib/librte_eal/common/eal_common_options.c
@@ -95,6 +95,7 @@ eal_long_options[] = {
        {OPT_PROC_TYPE,         1, NULL, OPT_PROC_TYPE_NUM        },
        {OPT_SOCKET_MEM,        1, NULL, OPT_SOCKET_MEM_NUM       },
        {OPT_SYSLOG,            1, NULL, OPT_SYSLOG_NUM           },
+       {OPT_DEV,               1, NULL, OPT_DEV_NUM              },
        {OPT_VDEV,              1, NULL, OPT_VDEV_NUM             },
        {OPT_VFIO_INTR,         1, NULL, OPT_VFIO_INTR_NUM        },
        {OPT_VMWARE_TSC_MAP,    0, NULL, OPT_VMWARE_TSC_MAP_NUM   },
@@ -1120,6 +1121,21 @@ eal_parse_common_option(int opt, const char *optarg,
                }
                break;
+       case OPT_DEV_NUM: {
+               struct rte_devargs da;
+               int ret;
+
+               if (rte_eal_devargs_parse(&da, optarg) < 0)
+                       return -1;
+               ret = rte_bus_probe_mode_set(da.bus->name,
+                                       RTE_BUS_PROBE_WHITELIST);
+               if (ret < 0 && ret != -ENOTSUP)
+                       return -1;
+               if (eal_option_device_add(NULL, optarg) < 0)
+                       return -1;
+       }

Might be a naive question: Any specific reason why we don't add the devices
directly into devargs_list here (eal_parse_args -> eal_parse_common_option
-> OPT_DEV ->) rather than wait for eal to call eal_option_device_parse
again?

Is it to allow eal_plugins_init() to finish?


Yes. And actually this makes me aware of an issue with this
implementation.

Calling rte_eal_devargs_parse here is premature, and
rte_bus_probe_mode_set as well.

eal_plugins_init() must be executed before calling rte_devargs to allow
for buses introduced as plugins to be able to recognize their devices.

There might be one more catch. Maybe eal_parse_args also finds all the plugins to load (-d ...).


I will reorder a few things in eal_options, thanks for catching this.

+               break;
+
        case OPT_VDEV_NUM:
                if (eal_option_device_add("vdev", optarg) < 0)
                        return -1;

[...]



Reply via email to