eal: add bus pointer in device structure
authorThomas Monjalon <thomas@monjalon.net>
Tue, 2 Oct 2018 22:25:06 +0000 (00:25 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 11 Oct 2018 12:09:24 +0000 (14:09 +0200)
When a device is added with a devargs (hotplug or whitelist),
the bus pointer can be retrieved via its devargs.
But there is no such devargs.bus in case of standard scan.

A pointer to the rte_bus handle is added to rte_device.
When a device is allocated (during a scan),
the pointer to its bus is assigned.

It will make possible to remove a rte_device,
using the function pointer from its bus.

The function rte_bus_find_by_device() becomes useless,
and may be removed later.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Reviewed-by: Stephen Hemminger <stephen@networkplumber.org>
23 files changed:
doc/guides/rel_notes/release_18_11.rst
drivers/bus/dpaa/Makefile
drivers/bus/dpaa/dpaa_bus.c
drivers/bus/dpaa/meson.build
drivers/bus/fslmc/Makefile
drivers/bus/fslmc/fslmc_bus.c
drivers/bus/fslmc/meson.build
drivers/bus/ifpga/Makefile
drivers/bus/ifpga/ifpga_bus.c
drivers/bus/ifpga/meson.build
drivers/bus/pci/Makefile
drivers/bus/pci/bsd/pci.c
drivers/bus/pci/linux/pci.c
drivers/bus/pci/meson.build
drivers/bus/pci/private.h
drivers/bus/vdev/Makefile
drivers/bus/vdev/meson.build
drivers/bus/vdev/vdev.c
drivers/bus/vmbus/Makefile
drivers/bus/vmbus/linux/vmbus_bus.c
drivers/bus/vmbus/meson.build
drivers/bus/vmbus/private.h
lib/librte_eal/common/include/rte_dev.h

index 66d28ce..8a6acd7 100644 (file)
@@ -197,6 +197,10 @@ ABI Changes
          - structure ``rte_eal_memconfig`` has been extended to contain next
            socket ID for externally allocated segments
 
+* eal: The structure ``rte_device`` got a new field to reference a ``rte_bus``.
+  It is changing the size of the ``struct rte_device`` and the inherited
+  device structures of all buses.
+
 
 Removed Items
 -------------
@@ -232,11 +236,12 @@ The libraries prepended with a plus sign were incremented in this version.
      librte_bbdev.so.1
      librte_bitratestats.so.2
      librte_bpf.so.1
-     librte_bus_dpaa.so.1
-     librte_bus_fslmc.so.1
-     librte_bus_pci.so.1
-     librte_bus_vdev.so.1
-   + librte_bus_vmbus.so.1
+   + librte_bus_dpaa.so.2
+   + librte_bus_fslmc.so.2
+   + librte_bus_ifpga.so.2
+   + librte_bus_pci.so.2
+   + librte_bus_vdev.so.2
+   + librte_bus_vmbus.so.2
      librte_cfgfile.so.2
      librte_cmdline.so.2
      librte_common_octeontx.so.1
index bffaa9d..9337b5f 100644 (file)
@@ -24,7 +24,7 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include
 # versioning export map
 EXPORT_MAP := rte_bus_dpaa_version.map
 
-LIBABIVER := 1
+LIBABIVER := 2
 
 # all source are stored in SRCS-y
 #
index 49cd04d..138e0f9 100644 (file)
@@ -165,6 +165,8 @@ dpaa_create_device_list(void)
                        goto cleanup;
                }
 
+               dev->device.bus = &rte_dpaa_bus.bus;
+
                cfg = &dpaa_netcfg->port_cfg[i];
                fman_intf = cfg->fman_if;
 
index d10b62c..5e77055 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
+version = 2
+
 if host_machine.system() != 'linux'
         build = false
 endif
index 515d0f5..e955519 100644 (file)
@@ -24,7 +24,7 @@ LDLIBS += -lrte_ethdev
 EXPORT_MAP := rte_bus_fslmc_version.map
 
 # library version
-LIBABIVER := 1
+LIBABIVER := 2
 
 SRCS-$(CONFIG_RTE_LIBRTE_FSLMC_BUS) += \
         qbman/qbman_portal.c \
index bfe81e2..960f550 100644 (file)
@@ -161,6 +161,8 @@ scan_one_fslmc_device(char *dev_name)
                return -ENOMEM;
        }
 
+       dev->device.bus = &rte_fslmc_bus.bus;
+
        /* Parse the device name and ID */
        t_ptr = strtok(dup_dev_name, ".");
        if (!t_ptr) {
index 22a56a6..54ca92d 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
+version = 2
+
 if host_machine.system() != 'linux'
         build = false
 endif
index 3ff3bdb..514452b 100644 (file)
@@ -19,7 +19,7 @@ LDLIBS += -lrte_kvargs
 EXPORT_MAP := rte_bus_ifpga_version.map
 
 # library version
-LIBABIVER := 1
+LIBABIVER := 2
 
 SRCS-$(CONFIG_RTE_LIBRTE_IFPGA_BUS) += ifpga_bus.c
 SRCS-$(CONFIG_RTE_LIBRTE_IFPGA_BUS) += ifpga_common.c
index 3ef035b..8066332 100644 (file)
@@ -142,6 +142,7 @@ ifpga_scan_one(struct rte_rawdev *rawdev,
        if (!afu_dev)
                goto end;
 
+       afu_dev->device.bus = &rte_ifpga_bus;
        afu_dev->device.devargs = devargs;
        afu_dev->device.numa_node = SOCKET_ID_ANY;
        afu_dev->device.name = devargs->name;
index c9b08c8..0b5c38d 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2010-2018 Intel Corporation
 
+version = 2
+
 deps += ['pci', 'kvargs', 'rawdev']
 install_headers('rte_bus_ifpga.h')
 sources = files('ifpga_common.c', 'ifpga_bus.c')
index 4de953f..f33e012 100644 (file)
@@ -4,7 +4,7 @@
 include $(RTE_SDK)/mk/rte.vars.mk
 
 LIB = librte_bus_pci.a
-LIBABIVER := 1
+LIBABIVER := 2
 EXPORT_MAP := rte_bus_pci_version.map
 
 CFLAGS := -I$(SRCDIR) $(CFLAGS)
index 655b34b..40641ca 100644 (file)
@@ -223,6 +223,8 @@ pci_scan_one(int dev_pci_fd, struct pci_conf *conf)
        }
 
        memset(dev, 0, sizeof(*dev));
+       dev->device.bus = &rte_pci_bus.bus;
+
        dev->addr.domain = conf->pc_sel.pc_domain;
        dev->addr.bus = conf->pc_sel.pc_bus;
        dev->addr.devid = conf->pc_sel.pc_dev;
index d6e1027..145cb10 100644 (file)
@@ -228,6 +228,7 @@ pci_scan_one(const char *dirname, const struct rte_pci_addr *addr)
                return -1;
 
        memset(dev, 0, sizeof(*dev));
+       dev->device.bus = &rte_pci_bus.bus;
        dev->addr = *addr;
 
        /* get vendor id */
index 23d6a5f..ef9492b 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
+version = 2
+
 deps += ['pci']
 install_headers('rte_bus_pci.h')
 sources = files('pci_common.c',
index 0e689fa..04bffa6 100644 (file)
@@ -15,6 +15,8 @@ extern struct rte_pci_bus rte_pci_bus;
 struct rte_pci_driver;
 struct rte_pci_device;
 
+extern struct rte_pci_bus rte_pci_bus;
+
 /**
  * Probe the PCI bus
  *
index 1f9cd7e..803b8ea 100644 (file)
@@ -16,7 +16,7 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API
 EXPORT_MAP := rte_bus_vdev_version.map
 
 # library version
-LIBABIVER := 1
+LIBABIVER := 2
 
 SRCS-y += vdev.c
 SRCS-y += vdev_params.c
index 12605e5..803785f 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
+version = 2
+
 sources = files('vdev.c',
        'vdev_params.c')
 install_headers('rte_bus_vdev.h')
index efca962..0142fb2 100644 (file)
@@ -456,6 +456,7 @@ vdev_scan(void)
                        continue;
                }
 
+               dev->device.bus = &rte_vdev_bus;
                dev->device.devargs = devargs;
                dev->device.numa_node = SOCKET_ID_ANY;
                dev->device.name = devargs->name;
index deee9dd..e54c557 100644 (file)
@@ -3,7 +3,7 @@
 include $(RTE_SDK)/mk/rte.vars.mk
 
 LIB = librte_bus_vmbus.a
-LIBABIVER := 1
+LIBABIVER := 2
 EXPORT_MAP := rte_bus_vmbus_version.map
 
 CFLAGS += -I$(SRCDIR)
index 527a6a3..a4755a3 100644 (file)
@@ -229,6 +229,7 @@ vmbus_scan_one(const char *name)
        if (dev == NULL)
                return -1;
 
+       dev->device.bus = &rte_vmbus_bus.bus;
        dev->device.name = strdup(name);
        if (!dev->device.name)
                goto error;
index 18daabe..0e4d058 100644 (file)
@@ -1,5 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 
+version = 2
+
 allow_experimental_apis = true
 
 install_headers('rte_bus_vmbus.h','rte_vmbus_reg.h')
index f2022a6..211127d 100644 (file)
 #include <sys/uio.h>
 #include <rte_log.h>
 #include <rte_vmbus_reg.h>
+#include <rte_bus_vmbus.h>
 
 #ifndef PAGE_SIZE
 #define PAGE_SIZE      4096
 #endif
 
+extern struct rte_vmbus_bus rte_vmbus_bus;
+
 extern int vmbus_logtype_bus;
 #define VMBUS_LOG(level, fmt, args...) \
        rte_log(RTE_LOG_ ## level, vmbus_logtype_bus, "%s(): " fmt "\n", \
index b80a805..d82cba8 100644 (file)
@@ -157,6 +157,7 @@ struct rte_device {
        TAILQ_ENTRY(rte_device) next; /**< Next device */
        const char *name;             /**< Device name */
        const struct rte_driver *driver;/**< Associated driver */
+       const struct rte_bus *bus;    /**< Bus handle assigned on scan */
        int numa_node;                /**< NUMA node connection */
        struct rte_devargs *devargs;  /**< Device user arguments */
 };