From bb01a08915983a701faa5d961dfe3c3c5722c824 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Thu, 9 May 2019 13:14:38 -0700 Subject: [PATCH] nvme: plumb disconnect/connect in reset path This will (finally) enable resets for fabrics controllers. Move some of the work previously done in enable_admin_queue up to this new disconnect/connect logic. Signed-off-by: Jim Harris Change-Id: I6239f0c0f36192db921d33f2322b1874b9382a01 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/453939 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto --- lib/nvme/nvme_ctrlr.c | 9 ++++++--- test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c | 5 +++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index c9938e7e7..e9efebf05 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -845,10 +845,15 @@ spdk_nvme_ctrlr_reset(struct spdk_nvme_ctrlr *ctrlr) nvme_transport_admin_qpair_abort_aers(ctrlr->adminq); /* Disable all queues before disabling the controller hardware. */ - nvme_qpair_disable(ctrlr->adminq); TAILQ_FOREACH(qpair, &ctrlr->active_io_qpairs, tailq) { nvme_qpair_disable(qpair); + nvme_transport_ctrlr_disconnect_qpair(ctrlr, qpair); } + nvme_qpair_disable(ctrlr->adminq); + nvme_qpair_complete_error_reqs(ctrlr->adminq); + nvme_transport_qpair_abort_reqs(ctrlr->adminq, 0 /* retry */); + nvme_transport_ctrlr_disconnect_qpair(ctrlr, ctrlr->adminq); + nvme_transport_ctrlr_connect_qpair(ctrlr, ctrlr->adminq); /* Doorbell buffer config is invalid during reset */ nvme_ctrlr_free_doorbell_buffer(ctrlr); @@ -1917,9 +1922,7 @@ static void nvme_ctrlr_enable_admin_queue(struct spdk_nvme_ctrlr *ctrlr) { nvme_transport_qpair_reset(ctrlr->adminq); - nvme_qpair_complete_error_reqs(ctrlr->adminq); nvme_qpair_enable(ctrlr->adminq); - nvme_transport_qpair_abort_reqs(ctrlr->adminq, 0 /* retry */); } /** diff --git a/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c b/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c index 3fd2df5eb..d5527ac24 100644 --- a/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c +++ b/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c @@ -174,6 +174,11 @@ nvme_transport_ctrlr_connect_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nv return 0; } +void +nvme_transport_ctrlr_disconnect_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair) +{ +} + int nvme_transport_qpair_reset(struct spdk_nvme_qpair *qpair) {