Commit ccd9b882 authored by Jacek Kalwas's avatar Jacek Kalwas Committed by Jim Harris
Browse files

nvme/pcie: add pcie addr sanity check to enum cb



It is done so upper layer doesn't have to do it on attach_cb. The reason
for such check in existing apps is not clear i.e. if pci addr parse
issue actually happen.

Change-Id: I3a5f5ef361d6b2ff9bf5a9fa4eca97fd1852494c
Signed-off-by: default avatarJacek Kalwas <jacek.kalwas@nutanix.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/25855


Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Reviewed-by: default avatarAnkit Kumar <ankit.kumar@samsung.com>
parent b3edbe31
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -2906,21 +2906,14 @@ static void
attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
	  struct spdk_nvme_ctrlr *ctrlr, const struct spdk_nvme_ctrlr_opts *opts)
{
	struct spdk_nvme_trid_entry	*trid_entry = cb_ctx;
	struct spdk_pci_addr	pci_addr;

	if (trid->trtype == SPDK_NVME_TRANSPORT_PCIE) {
		if (spdk_pci_addr_parse(&pci_addr, trid->traddr)) {
			return;
		}

		if (g_enable_interrupt && !opts->enable_interrupts) {
			fprintf(stderr, "Couldn't enable interrupts on NVMe controller at %s\n", trid->traddr);
			return;
		}
	}

	register_ctrlr(ctrlr, trid_entry);
	register_ctrlr(ctrlr, cb_ctx);
}

static int
+1 −10
Original line number Diff line number Diff line
@@ -798,16 +798,7 @@ static void
attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
	  struct spdk_nvme_ctrlr *ctrlr, const struct spdk_nvme_ctrlr_opts *opts)
{
	struct spdk_nvme_trid_entry       *trid_entry = cb_ctx;
	struct spdk_pci_addr    pci_addr;

	if (trid->trtype == SPDK_NVME_TRANSPORT_PCIE) {
		if (spdk_pci_addr_parse(&pci_addr, trid->traddr)) {
			return;
		}
	}

	register_ctrlr(ctrlr, trid_entry);
	register_ctrlr(ctrlr, cb_ctx);
}

static int
+0 −5
Original line number Diff line number Diff line
@@ -72,11 +72,6 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,

	/* add to dev list */
	dev = &devs[num_devs];
	if (spdk_pci_addr_parse(&dev->pci_addr, trid->traddr) != 0) {
		fprintf(stderr, "spdk_pci_addr_parse failure\n");
		assert(false);
		return;
	}
	num_devs++;

	dev->ctrlr = ctrlr;
+7 −1
Original line number Diff line number Diff line
@@ -826,13 +826,19 @@ pcie_nvme_enum_cb(void *ctx, struct spdk_pci_device *pci_dev)
	struct spdk_nvme_transport_id trid = {};
	struct nvme_pcie_enum_ctx *enum_ctx = ctx;
	struct spdk_nvme_ctrlr *ctrlr;
	struct spdk_pci_addr pci_addr;
	struct spdk_pci_addr pci_addr, _pci_addr;

	pci_addr = spdk_pci_device_get_addr(pci_dev);

	spdk_nvme_trid_populate_transport(&trid, SPDK_NVME_TRANSPORT_PCIE);
	spdk_pci_addr_fmt(trid.traddr, sizeof(trid.traddr), &pci_addr);

	if (spdk_pci_addr_parse(&_pci_addr, trid.traddr)) {
		SPDK_ERRLOG("spdk_pci_addr_parse failed; likely internal environment layer issue.\n");
		assert(false);
		return -1;
	}

	ctrlr = nvme_get_ctrlr_by_trid_unsafe(&trid, NULL);
	if (!spdk_process_is_primary()) {
		if (!ctrlr) {