From 0a0739c67a833d28d5ce1da4b62eb2adfb97bf6c Mon Sep 17 00:00:00 2001 From: Darek Stojaczyk Date: Tue, 20 Nov 2018 15:05:13 +0100 Subject: [PATCH] pci: keep device information in the spdk_pci_device struct It's handy to store the SPDK structs within the device structure. The subsequent patch will make us use spdk_pci_addr much more frequently, so it makes sense to keep it around rather than build it up from rte_pci_addr everytime. The upcoming VMD driver will also benefit from this patch by being able to fill the spdk_pci_device struct with any custom PCI details. Change-Id: I236a19e28beba9a593b29f23b79b1b0b92ef1fa7 Signed-off-by: Darek Stojaczyk Reviewed-on: https://review.gerrithub.io/434418 (master) Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/448374 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/env_dpdk/env_internal.h | 4 +++ lib/env_dpdk/pci.c | 51 +++++++++++++++++-------------------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/lib/env_dpdk/env_internal.h b/lib/env_dpdk/env_internal.h index c7ae6f1b2..baa7f839e 100644 --- a/lib/env_dpdk/env_internal.h +++ b/lib/env_dpdk/env_internal.h @@ -74,6 +74,10 @@ extern struct rte_pci_bus rte_pci_bus; struct spdk_pci_device { struct rte_pci_device *dev_handle; + struct spdk_pci_enum_ctx *enum_ctx; + struct spdk_pci_addr addr; + struct spdk_pci_id id; + int socket_id; bool attached; TAILQ_ENTRY(spdk_pci_device) tailq; }; diff --git a/lib/env_dpdk/pci.c b/lib/env_dpdk/pci.c index 2f5cc6700..1c3fa5600 100644 --- a/lib/env_dpdk/pci.c +++ b/lib/env_dpdk/pci.c @@ -66,6 +66,17 @@ spdk_pci_device_init(struct rte_pci_driver *driver, } dev->dev_handle = _dev; + dev->enum_ctx = ctx; + + dev->addr.domain = _dev->addr.domain; + dev->addr.bus = _dev->addr.bus; + dev->addr.dev = _dev->addr.devid; + dev->addr.func = _dev->addr.function; + dev->id.vendor_id = _dev->id.vendor_id; + dev->id.device_id = _dev->id.device_id; + dev->id.subvendor_id = _dev->id.subsystem_vendor_id; + dev->id.subdevice_id = _dev->id.subsystem_device_id; + dev->socket_id = _dev->device.numa_node; rc = ctx->cb_fn(ctx->cb_arg, dev); if (rc != 0) { @@ -236,68 +247,61 @@ spdk_pci_device_unmap_bar(struct spdk_pci_device *device, uint32_t bar, void *ad uint32_t spdk_pci_device_get_domain(struct spdk_pci_device *dev) { - return dev->dev_handle->addr.domain; + return dev->addr.domain; } uint8_t spdk_pci_device_get_bus(struct spdk_pci_device *dev) { - return dev->dev_handle->addr.bus; + return dev->addr.bus; } uint8_t spdk_pci_device_get_dev(struct spdk_pci_device *dev) { - return dev->dev_handle->addr.devid; + return dev->addr.dev; } uint8_t spdk_pci_device_get_func(struct spdk_pci_device *dev) { - return dev->dev_handle->addr.function; + return dev->addr.func; } uint16_t spdk_pci_device_get_vendor_id(struct spdk_pci_device *dev) { - return dev->dev_handle->id.vendor_id; + return dev->id.vendor_id; } uint16_t spdk_pci_device_get_device_id(struct spdk_pci_device *dev) { - return dev->dev_handle->id.device_id; + return dev->id.device_id; } uint16_t spdk_pci_device_get_subvendor_id(struct spdk_pci_device *dev) { - return dev->dev_handle->id.subsystem_vendor_id; + return dev->id.subvendor_id; } uint16_t spdk_pci_device_get_subdevice_id(struct spdk_pci_device *dev) { - return dev->dev_handle->id.subsystem_device_id; + return dev->id.subdevice_id; } struct spdk_pci_id -spdk_pci_device_get_id(struct spdk_pci_device *pci_dev) +spdk_pci_device_get_id(struct spdk_pci_device *dev) { - struct spdk_pci_id pci_id; - - pci_id.vendor_id = spdk_pci_device_get_vendor_id(pci_dev); - pci_id.device_id = spdk_pci_device_get_device_id(pci_dev); - pci_id.subvendor_id = spdk_pci_device_get_subvendor_id(pci_dev); - pci_id.subdevice_id = spdk_pci_device_get_subdevice_id(pci_dev); - - return pci_id; + return dev->id; } int spdk_pci_device_get_socket_id(struct spdk_pci_device *dev) { - return dev->dev_handle->device.numa_node; + return dev->socket_id; } int @@ -418,16 +422,9 @@ spdk_pci_device_get_serial_number(struct spdk_pci_device *dev, char *sn, size_t } struct spdk_pci_addr -spdk_pci_device_get_addr(struct spdk_pci_device *pci_dev) +spdk_pci_device_get_addr(struct spdk_pci_device *dev) { - struct spdk_pci_addr pci_addr; - - pci_addr.domain = spdk_pci_device_get_domain(pci_dev); - pci_addr.bus = spdk_pci_device_get_bus(pci_dev); - pci_addr.dev = spdk_pci_device_get_dev(pci_dev); - pci_addr.func = spdk_pci_device_get_func(pci_dev); - - return pci_addr; + return dev->addr; } int