From nobody Wed Dec 10 22:53:58 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dRWHB4Lftz6JqWS for ; Wed, 10 Dec 2025 22:53:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dRWHB1B0Xz3Pc8 for ; Wed, 10 Dec 2025 22:53:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765407238; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=HkC8ImcduR6pya7N/KVwQHrpR4O9KqP25t497rZqGIk=; b=fZj6Nqp2CQvkb6wffwP/S5W2IaWCbTmKPSbPdkO/ZzIzUr74MwWmNaxiwURw8wwvPnW7BS amBHoKMMctcbiMGfoofOaqeAw+khhahVuO6+mACK8hvcPRUi3JnL8U7PaR+0FYMzDbRWf6 Vm9cH23hG1XaTkfqs9fMm+LswzKL9f9URRGY0TnapCdNj7ETf9Daj404YA2HFnFhBuOff8 5T3nnTjwgMUkkdWAK5zoTUPduhfjuevD8M0JoFW4Aa5xiQ9D7mHTlfGDwpmyrYb56C45pY FnGXkCwgd/ctoe08owji9lRAYVYgnU/KmlKolEUKfy0T2/UCQ/l1C0qErGN1bw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765407238; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=HkC8ImcduR6pya7N/KVwQHrpR4O9KqP25t497rZqGIk=; b=VeviDzpr4SYLjcwovRfzp/knqnljJBBwdVthVaJnnUNAc1i5PWH27ncBIwvpqiasrk8OHC eui2z2zUWtlSzooriIGhd/o/I7Z1poW/VhXlNzxHk6En+gr49BKoOmQ5Edf27sHxtQYovO euJcAe237S/lZsKtwVhpjsfYXE5RZecm33pUYWnF8MZGDwe72WX/k9c8nzftzYwJe1EwBS YyLGCCFqO9gRCSN3SZ0lqfhMkJpjMEZ/aybKtoyY1HVldMNunaTrk+YnwrsTKBPNtSPNeQ kQBpxt376VSrFlKdkmBkYovSlsbfRwRki+jZ/XWSCRKSdoCMd71jzPKHLfu1sQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1765407238; a=rsa-sha256; cv=none; b=ir3ViPtLJGeNT0K1S87k/Ob5UEklOHFLyBaBodzpibM3zUnwrWDYzxEdXViakFs/Xq0Y6y NYpPGIZ6k0z9b1CPL9SdzZkF/5NOhIwl5T+I7evlkYAxJq5iNtSEY3XY1B9wKbSr6Dd2Mv cO57uv8OssvrIWaH2U5NDKveNoGVDCQRIwSszAzQ2DWWpZbS0ugHyHbobVaEGeBsYN+++l vicSAjiZojtgXQ82IQAAGXkZnkQMJo+4+r5N8b7PAfavKTxiL9OTiWqORrsnGqSSzkx+rC oZl3P+v0JMpo4nQUmncKlF6imVwqv6N9FfRe4hD4Ie6xxJnYaGMZ5CM8h018Xw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dRWHB0nlPz14fS for ; Wed, 10 Dec 2025 22:53:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id a84b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 10 Dec 2025 22:53:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: 848602856f49 - main - nvme: remove now-redundant consumer interface List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 848602856f49c3937b8c6d168fd988263954b43a Auto-Submitted: auto-generated Date: Wed, 10 Dec 2025 22:53:58 +0000 Message-Id: <6939fa06.a84b.5ec67153@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=848602856f49c3937b8c6d168fd988263954b43a commit 848602856f49c3937b8c6d168fd988263954b43a Author: Warner Losh AuthorDate: 2025-12-10 22:52:59 +0000 Commit: Warner Losh CommitDate: 2025-12-10 22:52:59 +0000 nvme: remove now-redundant consumer interface Now that we've moved to newbus methods, we can delete this... Sponsored by: Netflix Reviewed by: dab Differential Revision: https://reviews.freebsd.org/D54095 --- sys/dev/nvd/nvd.c | 2 - sys/dev/nvme/nvme.c | 133 -------------------------------------------- sys/dev/nvme/nvme.h | 14 ----- sys/dev/nvme/nvme_ctrlr.c | 1 - sys/dev/nvme/nvme_private.h | 5 -- 5 files changed, 155 deletions(-) diff --git a/sys/dev/nvd/nvd.c b/sys/dev/nvd/nvd.c index d96a752a12d9..29c1e012bf24 100644 --- a/sys/dev/nvd/nvd.c +++ b/sys/dev/nvd/nvd.c @@ -174,8 +174,6 @@ nvd_unload(void) } mtx_unlock(&nvd_lock); - nvme_unregister_consumer(consumer_handle); - mtx_destroy(&nvd_lock); } diff --git a/sys/dev/nvme/nvme.c b/sys/dev/nvme/nvme.c index 2571c6fe2973..db50e2b140bc 100644 --- a/sys/dev/nvme/nvme.c +++ b/sys/dev/nvme/nvme.c @@ -36,39 +36,10 @@ #include "nvme_private.h" #include "nvme_if.h" -struct nvme_consumer { - uint32_t id; - nvme_cons_ns_fn_t ns_fn; - nvme_cons_ctrlr_fn_t ctrlr_fn; - nvme_cons_async_fn_t async_fn; - nvme_cons_fail_fn_t fail_fn; -}; - -struct nvme_consumer nvme_consumer[NVME_MAX_CONSUMERS]; -#define INVALID_CONSUMER_ID 0xFFFF - int32_t nvme_retry_count; MALLOC_DEFINE(M_NVME, "nvme", "nvme(4) memory allocations"); -static void -nvme_init(void *dummy __unused) -{ - uint32_t i; - - for (i = 0; i < NVME_MAX_CONSUMERS; i++) - nvme_consumer[i].id = INVALID_CONSUMER_ID; -} - -SYSINIT(nvme_register, SI_SUB_DRIVERS, SI_ORDER_SECOND, nvme_init, NULL); - -static void -nvme_uninit(void *dummy __unused) -{ -} - -SYSUNINIT(nvme_unregister, SI_SUB_DRIVERS, SI_ORDER_SECOND, nvme_uninit, NULL); - int nvme_shutdown(device_t dev) { @@ -117,78 +88,6 @@ nvme_detach(device_t dev) return (0); } -static void -nvme_notify(struct nvme_consumer *cons, - struct nvme_controller *ctrlr) -{ - struct nvme_namespace *ns; - void *ctrlr_cookie; - int cmpset, ns_idx; - - /* - * The consumer may register itself after the nvme devices - * have registered with the kernel, but before the - * driver has completed initialization. In that case, - * return here, and when initialization completes, the - * controller will make sure the consumer gets notified. - */ - if (!ctrlr->is_initialized) - return; - - cmpset = atomic_cmpset_32(&ctrlr->notification_sent, 0, 1); - if (cmpset == 0) - return; - - if (cons->ctrlr_fn != NULL) - ctrlr_cookie = (*cons->ctrlr_fn)(ctrlr); - else - ctrlr_cookie = (void *)(uintptr_t)0xdeadc0dedeadc0de; - ctrlr->cons_cookie[cons->id] = ctrlr_cookie; - - /* ctrlr_fn has failed. Nothing to notify here any more. */ - if (ctrlr_cookie == NULL) { - (void)atomic_cmpset_32(&ctrlr->notification_sent, 1, 0); - return; - } - - if (ctrlr->is_failed) { - ctrlr->cons_cookie[cons->id] = NULL; - if (cons->fail_fn != NULL) - (*cons->fail_fn)(ctrlr_cookie); - /* - * Do not notify consumers about the namespaces of a - * failed controller. - */ - return; - } - for (ns_idx = 0; ns_idx < min(ctrlr->cdata.nn, NVME_MAX_NAMESPACES); ns_idx++) { - ns = &ctrlr->ns[ns_idx]; - if (ns->data.nsze == 0) - continue; - if (cons->ns_fn != NULL) - ns->cons_cookie[cons->id] = - (*cons->ns_fn)(ns, ctrlr_cookie); - } -} - -static void -nvme_notify_new_consumer(struct nvme_consumer *cons) -{ - device_t *devlist; - struct nvme_controller *ctrlr; - int dev_idx, devcount; - - if (devclass_get_devices(devclass_find("nvme"), &devlist, &devcount)) - return; - - for (dev_idx = 0; dev_idx < devcount; dev_idx++) { - ctrlr = DEVICE2SOFTC(devlist[dev_idx]); - nvme_notify(cons, ctrlr); - } - - free(devlist, M_TEMP); -} - void nvme_notify_async(struct nvme_controller *ctrlr, const struct nvme_completion *async_cpl, @@ -231,38 +130,6 @@ nvme_notify_fail(struct nvme_controller *ctrlr) free(children, M_TEMP); } -struct nvme_consumer * -nvme_register_consumer(nvme_cons_ns_fn_t ns_fn, nvme_cons_ctrlr_fn_t ctrlr_fn, - nvme_cons_async_fn_t async_fn, - nvme_cons_fail_fn_t fail_fn) -{ - int i; - - /* - * TODO: add locking around consumer registration. - */ - for (i = 0; i < NVME_MAX_CONSUMERS; i++) - if (nvme_consumer[i].id == INVALID_CONSUMER_ID) { - nvme_consumer[i].id = i; - nvme_consumer[i].ns_fn = ns_fn; - nvme_consumer[i].ctrlr_fn = ctrlr_fn; - nvme_consumer[i].async_fn = async_fn; - nvme_consumer[i].fail_fn = fail_fn; - - nvme_notify_new_consumer(&nvme_consumer[i]); - return (&nvme_consumer[i]); - } - - printf("nvme(4): consumer not registered - no slots available\n"); - return (NULL); -} - -void -nvme_unregister_consumer(struct nvme_consumer *consumer) -{ - consumer->id = INVALID_CONSUMER_ID; -} - void nvme_completion_poll_cb(void *arg, const struct nvme_completion *cpl) { diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h index cceff065fb2a..fb2c26b1f344 100644 --- a/sys/dev/nvme/nvme.h +++ b/sys/dev/nvme/nvme.h @@ -1913,17 +1913,10 @@ struct thread; struct nvme_namespace; struct nvme_controller; -struct nvme_consumer; struct nvme_passthru_cmd; typedef void (*nvme_cb_fn_t)(void *, const struct nvme_completion *); -typedef void *(*nvme_cons_ns_fn_t)(struct nvme_namespace *, void *); -typedef void *(*nvme_cons_ctrlr_fn_t)(struct nvme_controller *); -typedef void (*nvme_cons_async_fn_t)(void *, const struct nvme_completion *, - uint32_t, void *, uint32_t); -typedef void (*nvme_cons_fail_fn_t)(void *); - enum nvme_namespace_flags { NVME_NS_DEALLOCATE_SUPPORTED = 0x01, NVME_NS_FLUSH_SUPPORTED = 0x02, @@ -1977,13 +1970,6 @@ int nvme_ns_cmd_flush(struct nvme_namespace *ns, nvme_cb_fn_t cb_fn, int nvme_ns_dump(struct nvme_namespace *ns, void *virt, off_t offset, size_t len); -/* Registration functions */ -struct nvme_consumer * nvme_register_consumer(nvme_cons_ns_fn_t ns_fn, - nvme_cons_ctrlr_fn_t ctrlr_fn, - nvme_cons_async_fn_t async_fn, - nvme_cons_fail_fn_t fail_fn); -void nvme_unregister_consumer(struct nvme_consumer *consumer); - /* Controller helper functions */ device_t nvme_ctrlr_get_device(struct nvme_controller *ctrlr); const struct nvme_controller_data * diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c index 6b875060d4b1..7e1a3f02f326 100644 --- a/sys/dev/nvme/nvme_ctrlr.c +++ b/sys/dev/nvme/nvme_ctrlr.c @@ -1665,7 +1665,6 @@ nvme_ctrlr_construct(struct nvme_controller *ctrlr, device_t dev) ctrlr->is_resetting = 0; ctrlr->is_initialized = false; - ctrlr->notification_sent = 0; TASK_INIT(&ctrlr->reset_task, 0, nvme_ctrlr_reset_task, ctrlr); for (int i = 0; i < NVME_MAX_ASYNC_EVENTS; i++) { struct nvme_async_event_request *aer = &ctrlr->aer[i]; diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h index 04756c6c74a7..8837275e2ed5 100644 --- a/sys/dev/nvme/nvme_private.h +++ b/sys/dev/nvme/nvme_private.h @@ -76,7 +76,6 @@ MALLOC_DECLARE(M_NVME); #define NVME_INT_COAL_THRESHOLD (0) /* 0-based */ #define NVME_MAX_NAMESPACES (16) -#define NVME_MAX_CONSUMERS (2) #define NVME_MAX_ASYNC_EVENTS (8) #define NVME_ADMIN_TIMEOUT_PERIOD (60) /* in seconds */ @@ -205,7 +204,6 @@ struct nvme_namespace { uint32_t id; uint32_t flags; struct cdev *cdev; - void *cons_cookie[NVME_MAX_CONSUMERS]; uint32_t boundary; struct mtx lock; }; @@ -299,10 +297,7 @@ struct nvme_controller { uint32_t num_aers; struct nvme_async_event_request aer[NVME_MAX_ASYNC_EVENTS]; - void *cons_cookie[NVME_MAX_CONSUMERS]; - uint32_t is_resetting; - uint32_t notification_sent; u_int fail_on_reset; bool is_failed;