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.

Reply via email to