From nobody Wed Dec 10 22:53:55 2025 X-Original-To: dev-commits-src-all@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 4dRWH82dLtz6JqdZ for ; Wed, 10 Dec 2025 22:53:56 +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 4dRWH80T9kz3PW3 for ; Wed, 10 Dec 2025 22:53:56 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765407236; 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=bf7R4EkotuRYqRojiawPTjMWwJnuVOLR4Hyap25w5R8=; b=kvhTo3jk3/FkObBPnNvkxjy3I1Xun9ERg1GPMr0shJandB1nEyZQ5lKL8lnPLfkvEnIdc1 olyUaSmbbO5AAgz8nM1HxmfssiVcZ6WAQ0I02FgN5AM9EUUXS6rYOEbPeHfgtccsDizVpO pobDhdD0E9bF0vX/QnD4q27lFldxMA2Fas1+4HII63GD8/j872n4pkmjAHZP/g2Bq/7F1d kajiSJ+C/P9QcFDg+evYooStYsSd2za4r7ZZUViwJ+MoyuHExaqlV4Yrx31nu/0siqTDQb lwP7NkTpYDR27omdsFKvczCHicOvkgVkcSJzHoyj0eN7ZC8Vm13tMfDCnT+FBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765407236; 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=bf7R4EkotuRYqRojiawPTjMWwJnuVOLR4Hyap25w5R8=; b=JgTHQPt89b8huLSu6jS7Wt540DuxhxpjU1CW4iOpn+yNnRao6bF+Hh1iY9+25Cj94pd8Nx IDIOfQbVSHG789G7hgzBgZZgsOWS2/7dc28BKPLv7w5tC3TowsxqRQaApbVj2uoaIABpVX uQJ6d89LW1B6kLJgLXesEf2zDDbQV+Y2l1JT0rpjrfgmkHm4TP69js4TgdHhY52NFo6bJy N1XoKvmoaSkOynjzANAY8TCyUaUUiRkzHGXpMMEnTNVNvQpkVhc8VeMeogxBGpOISv/TDm o069hd9O6++7ahgXb6YccZNdsGEcfP7TUOuC2UleJuVkD/Nd+7SXyRun876y0A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1765407236; a=rsa-sha256; cv=none; b=Ff1uLjpccReaW0trf7zbfWBFpGUk7Q19Fsdm1ZOM+ryG+PUqM8APUKZUeCrE/04t2o4QTE JXZgtTbfy3cHCOxMN2ba6ueiBEzseiA33RbPymlHJJ8r4AZdhHlk2QnyW4AuoWTH5/d+66 gT+wR7c1GF4E5XZoZFBXIe2KsGfMd/o37q6kEVdas5pxcomAsIuvhE8EqDZZvWOxbbujkr ZxN3JDrrxq8FqoLMkNqTpZ64Douq1gPOXJV/RPkaon9uWy9N+KidHQqL8qdGLWNxTjAp6z tzxEKqBOCKbCEDWksvJynQz62LTr/tLHQV50jfawhPP4hDJXfw6M8tZrXnm7IA== 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 4dRWH76v5xz14j1 for ; Wed, 10 Dec 2025 22:53:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id a57e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 10 Dec 2025 22:53:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: 9b170dc457a4 - main - nvme: Use new method to do async notifications List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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: 9b170dc457a46d3ec3b329116fcd6851fe9b63a0 Auto-Submitted: auto-generated Date: Wed, 10 Dec 2025 22:53:55 +0000 Message-Id: <6939fa03.a57e.2d3336d8@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=9b170dc457a46d3ec3b329116fcd6851fe9b63a0 commit 9b170dc457a46d3ec3b329116fcd6851fe9b63a0 Author: Warner Losh AuthorDate: 2025-12-10 22:52:45 +0000 Commit: Warner Losh CommitDate: 2025-12-10 22:52:45 +0000 nvme: Use new method to do async notifications Nothing uses these at the moment, but it would be useful to use in the future so convert this functionality to an newbus function dispatch. Sponsored by: Netflix Reviewed by: dab Differential Revision: https://reviews.freebsd.org/D51390 --- sys/dev/nvme/nvme.c | 29 ++++++++++++++--------------- sys/dev/nvme/nvme_ctrlr.c | 11 +++++------ sys/dev/nvme/nvme_private.h | 8 ++++---- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/sys/dev/nvme/nvme.c b/sys/dev/nvme/nvme.c index 3ff64c781884..dcd0851dd56a 100644 --- a/sys/dev/nvme/nvme.c +++ b/sys/dev/nvme/nvme.c @@ -34,6 +34,7 @@ #include #include "nvme_private.h" +#include "nvme_if.h" struct nvme_consumer { uint32_t id; @@ -189,23 +190,21 @@ nvme_notify_new_consumer(struct nvme_consumer *cons) } void -nvme_notify_async_consumers(struct nvme_controller *ctrlr, - const struct nvme_completion *async_cpl, - uint32_t log_page_id, void *log_page_buffer, - uint32_t log_page_size) +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) { - struct nvme_consumer *cons; - void *ctrlr_cookie; - uint32_t i; + device_t *children; + int n_children; - for (i = 0; i < NVME_MAX_CONSUMERS; i++) { - cons = &nvme_consumer[i]; - if (cons->id != INVALID_CONSUMER_ID && cons->async_fn != NULL && - (ctrlr_cookie = ctrlr->cons_cookie[i]) != NULL) { - (*cons->async_fn)(ctrlr_cookie, async_cpl, - log_page_id, log_page_buffer, log_page_size); - } - } + if (device_get_children(ctrlr->dev, &children, &n_children) != 0) + return; + + for (int i = 0; i < n_children; i++) + NVME_HANDLE_AEN(children[i], async_cpl, log_page_id, + log_page_buffer, log_page_size); + + free(children, M_TEMP); } void diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c index 7a449fdc4727..2f28d8f5cb7f 100644 --- a/sys/dev/nvme/nvme_ctrlr.c +++ b/sys/dev/nvme/nvme_ctrlr.c @@ -1154,8 +1154,7 @@ nvme_ctrlr_aer_task(void *arg, int pending) * Repost another asynchronous event request to replace the one * that just completed. */ - nvme_notify_async_consumers(ctrlr, &aer->cpl, aer->log_page_id, - NULL, 0); + nvme_notify_async(ctrlr, &aer->cpl, aer->log_page_id, NULL, 0); nvme_ctrlr_construct_and_submit_aer(ctrlr, aer); goto out; } @@ -1180,8 +1179,8 @@ nvme_ctrlr_aer_task(void *arg, int pending) * error, don't pass log page data to the consumers. In * practice, this case should never happen. */ - nvme_notify_async_consumers(aer->ctrlr, &aer->cpl, - aer->log_page_id, NULL, 0); + nvme_notify_async(aer->ctrlr, &aer->cpl, aer->log_page_id, + NULL, 0); goto out; } @@ -1261,8 +1260,8 @@ nvme_ctrlr_aer_task(void *arg, int pending) * Pass the cpl data from the original async event completion, not the * log page fetch. */ - nvme_notify_async_consumers(aer->ctrlr, &aer->cpl, - aer->log_page_id, aer->log_page_buffer, aer->log_page_size); + nvme_notify_async(aer->ctrlr, &aer->cpl, aer->log_page_id, + aer->log_page_buffer, aer->log_page_size); /* * Repost another asynchronous event request to replace the one diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h index cd0ef444150f..27d70d120307 100644 --- a/sys/dev/nvme/nvme_private.h +++ b/sys/dev/nvme/nvme_private.h @@ -556,10 +556,10 @@ nvme_allocate_request_ccb(union ccb *ccb, const int how, nvme_cb_fn_t cb_fn, #define nvme_free_request(req) free(req, M_NVME) -void nvme_notify_async_consumers(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_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_ctrlr_shared_handler(void *arg);