Hi David, > -----Original Message----- > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of David Marchand > Sent: Wednesday, April 20, 2016 12:44 PM > To: dev at dpdk.org > Cc: thomas.monjalon at 6wind.com; viktorin at rehivetech.com > Subject: [dpdk-dev] [PATCH v2 15/17] eal: add hotplug operations for pci and > vdev > > hotplug which deals with resources should come from the layer that already > handles them, i.e. eal. > > For both attach and detach operations, 'name' is used to select the bus that > will handle the request. > > Signed-off-by: David Marchand <david.marchand at 6wind.com> > --- > lib/librte_eal/bsdapp/eal/rte_eal_version.map | 8 +++++ > lib/librte_eal/common/eal_common_dev.c | 39 > +++++++++++++++++++++++++ > lib/librte_eal/common/include/rte_dev.h | 25 ++++++++++++++++ > lib/librte_eal/linuxapp/eal/rte_eal_version.map | 8 +++++ > 4 files changed, 80 insertions(+) > > diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map > b/lib/librte_eal/bsdapp/eal/rte_eal_version.map > index 58c2951..4d075df 100644 > --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map > +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map > @@ -151,3 +151,11 @@ DPDK_16.04 { > rte_eal_primary_proc_alive; > > } DPDK_2.2; > + > +DPDK_16.07 { > + global: > + > + rte_eal_dev_attach; > + rte_eal_dev_detach; > + > +} DPDK_16.04; > diff --git a/lib/librte_eal/common/eal_common_dev.c > b/lib/librte_eal/common/eal_common_dev.c > index a8a4146..59ed3a0 100644 > --- a/lib/librte_eal/common/eal_common_dev.c > +++ b/lib/librte_eal/common/eal_common_dev.c > @@ -150,3 +150,42 @@ rte_eal_vdev_uninit(const char *name) > RTE_LOG(ERR, EAL, "no driver found for %s\n", name); > return -EINVAL; > } > + > +int rte_eal_dev_attach(const char *name, const char *devargs) { > + struct rte_pci_addr addr; > + int ret = -1; > +
Should the input parameters name and devargs be checked? > + if (eal_parse_pci_DomBDF(name, &addr) == 0) { > + if (rte_eal_pci_probe_one(&addr) < 0) > + goto err; > + > + } else { > + if (rte_eal_vdev_init(name, devargs)) > + goto err; > + } > + > + return 0; > + > +err: > + RTE_LOG(ERR, EAL, "Driver, cannot attach the device\n"); > + return ret; > +} > + > +int rte_eal_dev_detach(const char *name) { > + struct rte_pci_addr addr; > + Should the name parameter be checked? > + if (eal_parse_pci_DomBDF(name, &addr) == 0) { > + if (rte_eal_pci_detach(&addr) < 0) > + goto err; > + } else { > + if (rte_eal_vdev_uninit(name)) > + goto err; > + } > + return 0; > + > +err: > + RTE_LOG(ERR, EAL, "Driver, cannot detach the device\n"); > + return -1; > +} > diff --git a/lib/librte_eal/common/include/rte_dev.h > b/lib/librte_eal/common/include/rte_dev.h > index 85e48f2..b1c0520 100644 > --- a/lib/librte_eal/common/include/rte_dev.h > +++ b/lib/librte_eal/common/include/rte_dev.h > @@ -178,6 +178,31 @@ int rte_eal_vdev_init(const char *name, const char > *args); > */ > int rte_eal_vdev_uninit(const char *name); > > +/** > + * Attach a resource to a registered driver. > + * > + * @param name > + * The resource name, that refers to a pci resource or some private > + * way of designating a resource for vdev drivers. Based on this > + * resource name, eal will identify a driver capable of handling > + * this resource and pass this resource to the driver probing > + * function. > + * @param devargs > + * Device arguments to be passed to the driver. > + * @return > + * 0 on success, negative on error. > + */ > +int rte_eal_dev_attach(const char *name, const char *devargs); > + > +/** > + * Detach a resource from its driver. > + * > + * @param name > + * Same description as for rte_eal_dev_attach(). > + * Here, eal will call the driver detaching function. > + */ > +int rte_eal_dev_detach(const char *name); > + > #define PMD_REGISTER_DRIVER(d)\ > RTE_INIT(devinitfn_ ##d);\ > static void devinitfn_ ##d(void)\ > diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map > b/lib/librte_eal/linuxapp/eal/rte_eal_version.map > index 12503ef..0404a52 100644 > --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map > +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map > @@ -154,3 +154,11 @@ DPDK_16.04 { > rte_eal_primary_proc_alive; > > } DPDK_2.2; > + > +DPDK_16.07 { > + global: > + > + rte_eal_dev_attach; > + rte_eal_dev_detach; > + > +} DPDK_16.04; > -- > 1.9.1 Regards, Bernard.