From nobody Sat Nov 22 15:00:20 2025 X-Original-To: dev-commits-src-branches@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 4dDFd10H1fz6HGll for ; Sat, 22 Nov 2025 15:00:21 +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 4dDFd06rVWz49RL for ; Sat, 22 Nov 2025 15:00:20 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1763823621; 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=xxeKPpvT3C6bLxFByXD+TEopTEfFGDjWRabNDMmmjvk=; b=AeY03ide27VuAUWdj4nX2vcs+bm+rR0WObXdyvzldZMaZ6hN/hA/5W2UDbhdlSGZ4z3jM0 Fk9orBu9tVOgwzqQiFwqkvpcOpMvhw6Mv2xpGwJG6dF850Z82RD33cnOuJICF1QyQC6nt9 RV2J/dpCchV9EES83QwWHptmviH5e7o8pUi/d2xLyX6Wk9XLos3Y48EMEV8acClB4Ro7M2 I3anXxLYzvpxhFnD546AkDoUApAP9QCdlTOLm7eYfVsmH2XKSmDEBsFBBhxYGB77Zfevdq 99elbdata9nl2rTWt2drgk8slzmvG0VVjW58WC1GoS4khPHzbtgr2aZz/YEBGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1763823621; 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=xxeKPpvT3C6bLxFByXD+TEopTEfFGDjWRabNDMmmjvk=; b=vL5xPnmFUpH0jcm1BpPG4s2BV76vtzjkT5sXEmAcsF8HLlJp1Mu1fw7GeqISP25v8fVmpL /a5aLpj3uARWCxtosL6K99cDpUFn2BSs88FMWG0q3/DvuulmNY1oan4WR3iEvZCltsQ3a1 1e2hQh1fwE5KHTFusOGAra5ctvXGh/7XOsGq0IN7jZN3JAtb4IfeRsvf/hDEpyx72Z+j5s J2VbPGmgG5cYCvISZhyWGj4fDbUwwcM9HHaeW9iOnZFfySkbzR6RDxF22ft70nqipsO7G0 iwxOqpEOZMFm+FfFhtH7F4433LY/7ZsDCNx7t1KiNMAdYtzdOhhd3Makoe6Yxw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1763823621; a=rsa-sha256; cv=none; b=Rp8xSOjsP1S+XHUBi50+KJnn9wkOXEAf31DEJODDDl1DBbPuQQJhE7eS5upISiSOBKM8JI PZ//nkzWPFEQZ7ES0mFmurE297qQn5K3BUqeHOHee+op8HPx6DsCU/3dNXUuGTh8IHlDDQ sJBzmG2id66Xq6oBklOWTNLzYqnR8IUpXKGEqgVuyPu2rWzm/oTFqMzIMWXTwYxG+ZzQyu qZ1zsm8IbflnEwbrDFhDcMyswdzUFTWz7xHggRRlbVPfoQdxI5TRVKWkUqqxX3uV/J9ylE yBtj7zI/wSjfopz/xENf8k/E2mK9TU/m9U3pKEDZWsr2d2zrgm9O1ULF2iIJLQ== 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 4dDFd05q8Sz12Pw for ; Sat, 22 Nov 2025 15:00:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33221 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 22 Nov 2025 15:00:20 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Alan Somers Subject: git: 465c30c4f202 - stable/14 - nvme: add support for DIOCGIDENT List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: asomers X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 465c30c4f202b02cd9cb12f12d9ea856c84c5203 Auto-Submitted: auto-generated Date: Sat, 22 Nov 2025 15:00:20 +0000 Message-Id: <6921d004.33221.6c2c3e53@gitrepo.freebsd.org> The branch stable/14 has been updated by asomers: URL: https://cgit.FreeBSD.org/src/commit/?id=465c30c4f202b02cd9cb12f12d9ea856c84c5203 commit 465c30c4f202b02cd9cb12f12d9ea856c84c5203 Author: Alan Somers AuthorDate: 2025-10-16 22:00:14 +0000 Commit: Alan Somers CommitDate: 2025-11-22 14:59:24 +0000 nvme: add support for DIOCGIDENT Add support for the DIOCGIDENT ioctl to both nvme controller device nodes and namespace device nodes. This information was already available via the nda(4) device node. However, mapping /dev/nvmeX to /dev/ndaY device nodes is not straightforward, so it's better to get it directly from the /dev/nvme device node. PR: 290259 Sponsored by: ConnectWise Submitted by: imp (mostly) Pull Request: https://github.com/freebsd/freebsd-src/pull/1875 (cherry picked from commit 6d0001d44490becdd20d627ce663c72a30b9aac3) --- sys/dev/nvme/nvme_ctrlr.c | 24 ++++++++++++++++++++++++ sys/dev/nvme/nvme_ns.c | 5 +++++ sys/dev/nvme/nvme_private.h | 1 + 3 files changed, 30 insertions(+) diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c index ce203e2869fd..19fd4e70666e 100644 --- a/sys/dev/nvme/nvme_ctrlr.c +++ b/sys/dev/nvme/nvme_ctrlr.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -1229,6 +1230,24 @@ nvme_ctrlr_poll(struct nvme_controller *ctrlr) nvme_qpair_process_completions(&ctrlr->ioq[i]); } +/* + * Copy the NVME device's serial number to the provided buffer, which must be + * at least DISK_IDENT_SIZE bytes large. + */ +void +nvme_ctrlr_get_ident(const struct nvme_controller *ctrlr, uint8_t *sn) +{ + _Static_assert(NVME_SERIAL_NUMBER_LENGTH < DISK_IDENT_SIZE, + "NVME serial number too big for disk ident"); + + memmove(sn, ctrlr->cdata.sn, NVME_SERIAL_NUMBER_LENGTH); + sn[NVME_SERIAL_NUMBER_LENGTH] = '\0'; + for (int i = 0; sn[i] != '\0'; i++) { + if (sn[i] < 0x20 || sn[i] >= 0x80) + sn[i] = ' '; + } +} + /* * Poll the single-vector interrupt case: num_io_queues will be 1 and * there's only a single vector. While we're polling, we mask further @@ -1367,6 +1386,11 @@ nvme_ctrlr_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int flag, case NVME_GET_MAX_XFER_SIZE: *(uint64_t *)arg = ctrlr->max_xfer_size; break; + case DIOCGIDENT: { + uint8_t *sn = arg; + nvme_ctrlr_get_ident(ctrlr, sn); + break; + } default: return (ENOTTY); } diff --git a/sys/dev/nvme/nvme_ns.c b/sys/dev/nvme/nvme_ns.c index 9eb808f81a48..1e9c5360f15c 100644 --- a/sys/dev/nvme/nvme_ns.c +++ b/sys/dev/nvme/nvme_ns.c @@ -89,6 +89,11 @@ nvme_ns_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int flag, gnsid->nsid = ns->id; break; } + case DIOCGIDENT: { + uint8_t *sn = arg; + nvme_ctrlr_get_ident(ctrlr, sn); + break; + } case DIOCGMEDIASIZE: *(off_t *)arg = (off_t)nvme_ns_get_size(ns); break; diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h index 93833672674a..3039dcf40373 100644 --- a/sys/dev/nvme/nvme_private.h +++ b/sys/dev/nvme/nvme_private.h @@ -561,6 +561,7 @@ void nvme_notify_new_controller(struct nvme_controller *ctrlr); void nvme_notify_ns(struct nvme_controller *ctrlr, int nsid); void nvme_ctrlr_shared_handler(void *arg); +void nvme_ctrlr_get_ident(const struct nvme_controller *ctrlr, uint8_t *sn); void nvme_ctrlr_poll(struct nvme_controller *ctrlr); int nvme_ctrlr_suspend(struct nvme_controller *ctrlr);