diff --git a/include/spdk/env.h b/include/spdk/env.h index 0eeb07a94..f944019f7 100644 --- a/include/spdk/env.h +++ b/include/spdk/env.h @@ -193,7 +193,7 @@ struct spdk_pci_id spdk_pci_device_get_id(struct spdk_pci_device *dev); uint32_t spdk_pci_device_get_class(struct spdk_pci_device *dev); const char *spdk_pci_device_get_device_name(struct spdk_pci_device *dev); int spdk_pci_device_get_serial_number(struct spdk_pci_device *dev, char *sn, size_t len); -int spdk_pci_device_claim(struct spdk_pci_device *dev); +int spdk_pci_device_claim(const struct spdk_pci_addr *pci_addr); int spdk_pci_device_cfg_read8(struct spdk_pci_device *dev, uint8_t *value, uint32_t offset); int spdk_pci_device_cfg_write8(struct spdk_pci_device *dev, uint8_t value, uint32_t offset); diff --git a/lib/bdev/nvme/blockdev_nvme.c b/lib/bdev/nvme/blockdev_nvme.c index 44a92bf77..0b1efe532 100644 --- a/lib/bdev/nvme/blockdev_nvme.c +++ b/lib/bdev/nvme/blockdev_nvme.c @@ -342,15 +342,12 @@ static bool probe_cb(void *cb_ctx, struct spdk_pci_device *pci_dev, struct spdk_nvme_ctrlr_opts *opts) { struct nvme_probe_ctx *ctx = cb_ctx; - uint16_t found_domain = spdk_pci_device_get_domain(pci_dev); - uint8_t found_bus = spdk_pci_device_get_bus(pci_dev); - uint8_t found_dev = spdk_pci_device_get_dev(pci_dev); - uint8_t found_func = spdk_pci_device_get_func(pci_dev); + struct spdk_pci_addr pci_addr = spdk_pci_device_get_addr(pci_dev); int i; bool claim_device = false; SPDK_NOTICELOG("Probing device %x:%x:%x.%x\n", - found_domain, found_bus, found_dev, found_func); + pci_addr.domain, pci_addr.bus, pci_addr.dev, pci_addr.func); if (ctx->controllers_remaining == 0) { return false; @@ -360,10 +357,7 @@ probe_cb(void *cb_ctx, struct spdk_pci_device *pci_dev, struct spdk_nvme_ctrlr_o claim_device = true; } else { for (i = 0; i < NVME_MAX_CONTROLLERS; i++) { - if (found_domain == ctx->whitelist[i].domain && - found_bus == ctx->whitelist[i].bus && - found_dev == ctx->whitelist[i].dev && - found_func == ctx->whitelist[i].func) { + if (spdk_pci_addr_compare(&pci_addr, &ctx->whitelist[i]) == 0) { claim_device = true; break; } @@ -375,7 +369,7 @@ probe_cb(void *cb_ctx, struct spdk_pci_device *pci_dev, struct spdk_nvme_ctrlr_o } /* Claim the device in case conflict with other process */ - if (spdk_pci_device_claim(pci_dev) != 0) { + if (spdk_pci_device_claim(&pci_addr) != 0) { return false; } diff --git a/lib/copy/ioat/copy_engine_ioat.c b/lib/copy/ioat/copy_engine_ioat.c index 122c33c5f..2a6847026 100644 --- a/lib/copy/ioat/copy_engine_ioat.c +++ b/lib/copy/ioat/copy_engine_ioat.c @@ -241,11 +241,12 @@ static bool probe_cb(void *cb_ctx, struct spdk_pci_device *pci_dev) { struct ioat_probe_ctx *ctx = cb_ctx; + struct spdk_pci_addr pci_addr = spdk_pci_device_get_addr(pci_dev); SPDK_NOTICELOG(" Found matching device at %d:%d:%d vendor:0x%04x device:0x%04x\n name:%s\n", - spdk_pci_device_get_bus(pci_dev), - spdk_pci_device_get_dev(pci_dev), - spdk_pci_device_get_func(pci_dev), + pci_addr.bus, + pci_addr.dev, + pci_addr.func, spdk_pci_device_get_vendor_id(pci_dev), spdk_pci_device_get_device_id(pci_dev), spdk_pci_device_get_device_name(pci_dev)); @@ -256,7 +257,7 @@ probe_cb(void *cb_ctx, struct spdk_pci_device *pci_dev) } /* Claim the device in case conflict with other process */ - if (spdk_pci_device_claim(pci_dev) != 0) { + if (spdk_pci_device_claim(&pci_addr) != 0) { return false; } diff --git a/lib/env/pci.c b/lib/env/pci.c index fd3ee3052..53c78fade 100644 --- a/lib/env/pci.c +++ b/lib/env/pci.c @@ -446,7 +446,7 @@ spdk_pci_addr_compare(const struct spdk_pci_addr *a1, const struct spdk_pci_addr #ifdef __linux__ int -spdk_pci_device_claim(struct spdk_pci_device *dev) +spdk_pci_device_claim(const struct spdk_pci_addr *pci_addr) { int dev_fd; char shm_name[64]; @@ -459,9 +459,7 @@ spdk_pci_device_claim(struct spdk_pci_device *dev) .l_len = 0, }; - sprintf(shm_name, PCI_PRI_FMT, spdk_pci_device_get_domain(dev), - spdk_pci_device_get_bus(dev), spdk_pci_device_get_dev(dev), - spdk_pci_device_get_func(dev)); + sprintf(shm_name, PCI_PRI_FMT, pci_addr->domain, pci_addr->bus, pci_addr->dev, pci_addr->func); dev_fd = shm_open(shm_name, O_RDWR | O_CREAT, 0600); if (dev_fd == -1) { @@ -501,7 +499,7 @@ spdk_pci_device_claim(struct spdk_pci_device *dev) #ifdef __FreeBSD__ int -spdk_pci_device_claim(struct spdk_pci_device *dev) +spdk_pci_device_claim(const struct spdk_pci_addr *pci_addr) { /* TODO */ return 0;