Commit 5ef090d9 authored by Aleksey Marchuk's avatar Aleksey Marchuk Committed by Jim Harris
Browse files

lib/nvme: Optional transport fn to process ctrlr events



A transport may implement the callback to process some
transport-specific events. The next patch will utilise it
to poll RDMA_CM event channel

Change-Id: Idc9762480d6adb89cc9965bc067a3aadec534dac
Signed-off-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/25913


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarKonrad Sztyber <ksztyber@nvidia.com>
parent 2b1bcb83
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -4699,6 +4699,9 @@ struct spdk_nvme_transport_ops {

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

	/* Optional callback for transports to process transport-specific events. E.g. poll RDMA_CM event channel */
	int (*ctrlr_process_transport_events)(struct spdk_nvme_ctrlr *ctrlr);
};

/**
+1 −0
Original line number Diff line number Diff line
@@ -1715,6 +1715,7 @@ void nvme_transport_ctrlr_disconnect_qpair(struct spdk_nvme_ctrlr *ctrlr,
void nvme_transport_ctrlr_disconnect_qpair_done(struct spdk_nvme_qpair *qpair);
int nvme_transport_ctrlr_get_memory_domains(const struct spdk_nvme_ctrlr *ctrlr,
		struct spdk_memory_domain **domains, int array_size);
int nvme_transport_ctrlr_process_transport_events(struct spdk_nvme_ctrlr *ctrlr);
void nvme_transport_qpair_abort_reqs(struct spdk_nvme_qpair *qpair);
int nvme_transport_qpair_reset(struct spdk_nvme_qpair *qpair);
int nvme_transport_qpair_submit_request(struct spdk_nvme_qpair *qpair, struct nvme_request *req);
+3 −1
Original line number Diff line number Diff line
@@ -765,9 +765,11 @@ spdk_nvme_qpair_process_completions(struct spdk_nvme_qpair *qpair, uint32_t max_
	int32_t ret;
	struct nvme_request *req, *tmp;

	/* Complete any pending register operations */
	if (nvme_qpair_is_admin_queue(qpair)) {
		/* Complete any pending register operations */
		nvme_complete_register_operations(qpair);
		/* Process transport-specific events */
		nvme_transport_ctrlr_process_transport_events(qpair->ctrlr);
	}

	if (spdk_unlikely(qpair->ctrlr->is_failed &&
+16 −0
Original line number Diff line number Diff line
@@ -614,6 +614,22 @@ nvme_transport_ctrlr_get_memory_domains(const struct spdk_nvme_ctrlr *ctrlr,
	return 0;
}

int
nvme_transport_ctrlr_process_transport_events(struct spdk_nvme_ctrlr *ctrlr)
{
	const struct spdk_nvme_transport *transport = nvme_get_transport(ctrlr->trid.trstring);
	int rc = 0;

	assert(transport != NULL);
	if (transport->ops.ctrlr_process_transport_events) {
		nvme_ctrlr_lock(ctrlr);
		rc = transport->ops.ctrlr_process_transport_events(ctrlr);
		nvme_ctrlr_unlock(ctrlr);
	}

	return rc;
}

void
nvme_transport_qpair_abort_reqs(struct spdk_nvme_qpair *qpair)
{
+2 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ DEFINE_STUB(nvme_transport_qpair_submit_request, int,
DEFINE_STUB(spdk_nvme_ctrlr_free_io_qpair, int, (struct spdk_nvme_qpair *qpair), 0);
DEFINE_STUB_V(nvme_transport_ctrlr_disconnect_qpair, (struct spdk_nvme_ctrlr *ctrlr,
		struct spdk_nvme_qpair *qpair));
DEFINE_STUB(nvme_transport_ctrlr_process_transport_events, int,
	    (struct spdk_nvme_ctrlr *ctrlr), 0);
DEFINE_STUB_V(nvme_ctrlr_disconnect_qpair, (struct spdk_nvme_qpair *qpair));

DEFINE_STUB_V(nvme_ctrlr_abort_queued_aborts, (struct spdk_nvme_ctrlr *ctrlr));