Commit ff659498 authored by Krzysztof Karas's avatar Krzysztof Karas Committed by Tomasz Zawadzki
Browse files

nvme_transport: optional callback to scan attached



Add an optional callback for transports to check for events of the
attached underlying devices.

Change-Id: Ifdae277db26dd52f7c5e4e2022c906ce0ed28659
Signed-off-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/23572


Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Community-CI: Mellanox Build Bot
parent f7b31b2b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -4402,6 +4402,9 @@ struct spdk_nvme_transport_ops {
	int (*ctrlr_ready)(struct spdk_nvme_ctrlr *ctrlr);

	volatile struct spdk_nvme_registers *(*ctrlr_get_registers)(struct spdk_nvme_ctrlr *ctrlr);

	/* Optional callback for transports to process removal events of attached controllers. */
	int (*ctrlr_scan_attached)(struct spdk_nvme_probe_ctx *probe_ctx);
};

/**
+1 −0
Original line number Diff line number Diff line
@@ -1625,6 +1625,7 @@ struct spdk_nvme_ctrlr *nvme_transport_ctrlr_construct(const struct spdk_nvme_tr
		void *devhandle);
int nvme_transport_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr);
int nvme_transport_ctrlr_scan(struct spdk_nvme_probe_ctx *probe_ctx, bool direct_connect);
int nvme_transport_ctrlr_scan_attached(struct spdk_nvme_probe_ctx *probe_ctx);
int nvme_transport_ctrlr_enable(struct spdk_nvme_ctrlr *ctrlr);
int nvme_transport_ctrlr_ready(struct spdk_nvme_ctrlr *ctrlr);
int nvme_transport_ctrlr_set_reg_4(struct spdk_nvme_ctrlr *ctrlr, uint32_t offset, uint32_t value);
+18 −0
Original line number Diff line number Diff line
@@ -129,6 +129,24 @@ nvme_transport_ctrlr_scan(struct spdk_nvme_probe_ctx *probe_ctx,
	return transport->ops.ctrlr_scan(probe_ctx, direct_connect);
}

int
nvme_transport_ctrlr_scan_attached(struct spdk_nvme_probe_ctx *probe_ctx)
{
	const struct spdk_nvme_transport *transport = nvme_get_transport(probe_ctx->trid.trstring);

	if (transport == NULL) {
		SPDK_ERRLOG("Transport %s doesn't exist.", probe_ctx->trid.trstring);
		return -ENOENT;
	}

	if (transport->ops.ctrlr_scan_attached != NULL) {
		return transport->ops.ctrlr_scan_attached(probe_ctx);
	}
	SPDK_ERRLOG("Transport %s does not support ctrlr_scan_attached callback\n",
		    probe_ctx->trid.trstring);
	return -ENOTSUP;
}

int
nvme_transport_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr)
{