eal: add bus pointer in device structure

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>
This commit is contained in:
Thomas Monjalon 2018-10-03 00:25:06 +02:00
parent 2effa126fb
commit 6844d146ff
23 changed files with 44 additions and 11 deletions

View 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

View 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
#

View 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;

View File

@ -1,6 +1,8 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2018 NXP
version = 2
if host_machine.system() != 'linux'
build = false
endif

View 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 \

View 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) {

View File

@ -1,6 +1,8 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2018 NXP
version = 2
if host_machine.system() != 'linux'
build = false
endif

View 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

View 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;

View 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')

View 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)

View 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;

View 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 */

View 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',

View 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
*

View 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

View 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')

View 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;

View 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)

View 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;

View 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')

View File

@ -10,11 +10,14 @@
#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", \

View 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 */
};