Date: Wed, 10 Dec 2025 22:53:57 +0000 From: Warner Losh <imp@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: b6b52a9b8011 - main - nvme: Notify failure with newbus call Message-ID: <6939fa05.a0df.57d52f01@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=b6b52a9b8011d9893899ecad87948ef346858960 commit b6b52a9b8011d9893899ecad87948ef346858960 Author: Warner Losh <imp@FreeBSD.org> AuthorDate: 2025-12-10 22:52:53 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2025-12-10 22:52:53 +0000 nvme: Notify failure with newbus call Sponsored by: Netflix Reviewed by: dab Differential Revision: https://reviews.freebsd.org/D51391 --- sys/dev/nvme/nvme.c | 23 ++++++++++------------- sys/dev/nvme/nvme_ctrlr.c | 4 ++-- sys/dev/nvme/nvme_private.h | 2 +- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/sys/dev/nvme/nvme.c b/sys/dev/nvme/nvme.c index dcd0851dd56a..2571c6fe2973 100644 --- a/sys/dev/nvme/nvme.c +++ b/sys/dev/nvme/nvme.c @@ -208,11 +208,10 @@ nvme_notify_async(struct nvme_controller *ctrlr, } void -nvme_notify_fail_consumers(struct nvme_controller *ctrlr) +nvme_notify_fail(struct nvme_controller *ctrlr) { - struct nvme_consumer *cons; - void *ctrlr_cookie; - uint32_t i; + device_t *children; + int n_children; /* * This controller failed during initialization (i.e. IDENTIFY @@ -223,15 +222,13 @@ nvme_notify_fail_consumers(struct nvme_controller *ctrlr) if (!ctrlr->is_initialized) return; - for (i = 0; i < NVME_MAX_CONSUMERS; i++) { - cons = &nvme_consumer[i]; - if (cons->id != INVALID_CONSUMER_ID && - (ctrlr_cookie = ctrlr->cons_cookie[i]) != NULL) { - ctrlr->cons_cookie[i] = NULL; - if (cons->fail_fn != NULL) - cons->fail_fn(ctrlr_cookie); - } - } + if (device_get_children(ctrlr->dev, &children, &n_children) != 0) + return; + + for (int i = 0; i < n_children; i++) + NVME_CONTROLLER_FAILED(children[i]); + + free(children, M_TEMP); } struct nvme_consumer * diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c index 2f28d8f5cb7f..6b875060d4b1 100644 --- a/sys/dev/nvme/nvme_ctrlr.c +++ b/sys/dev/nvme/nvme_ctrlr.c @@ -256,7 +256,7 @@ nvme_ctrlr_fail(struct nvme_controller *ctrlr, bool admin_also) nvme_qpair_fail(&ctrlr->ioq[i]); } } - nvme_notify_fail_consumers(ctrlr); + nvme_notify_fail(ctrlr); } /* @@ -1723,7 +1723,7 @@ nvme_ctrlr_destruct(struct nvme_controller *ctrlr, device_t dev) if (gone) nvme_ctrlr_fail(ctrlr, true); else - nvme_notify_fail_consumers(ctrlr); + nvme_notify_fail(ctrlr); for (i = 0; i < NVME_MAX_NAMESPACES; i++) nvme_ns_destruct(&ctrlr->ns[i]); diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h index 27d70d120307..04756c6c74a7 100644 --- a/sys/dev/nvme/nvme_private.h +++ b/sys/dev/nvme/nvme_private.h @@ -560,7 +560,7 @@ void nvme_notify_async(struct nvme_controller *ctrlr, const struct nvme_completion *async_cpl, uint32_t log_page_id, void *log_page_buffer, uint32_t log_page_size); -void nvme_notify_fail_consumers(struct nvme_controller *ctrlr); +void nvme_notify_fail(struct nvme_controller *ctrlr); void nvme_ctrlr_shared_handler(void *arg); void nvme_ctrlr_poll(struct nvme_controller *ctrlr);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6939fa05.a0df.57d52f01>
