From nobody Mon Oct 19 06:24:44 2026 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 4j7QWJ3GcRz6vsXm for ; Mon, 19 Oct 2026 06:24:44 +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) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4j7QWJ1Nmqz3Q7f for ; Mon, 19 Oct 2026 06:24:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792391084; 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=bUbGpytJauQ8EWNA9FZKaCL2ZFLNil6rKpDpcm6OwqE=; b=tsQdnQR5zcCKhW9QfJrwJJuK8Dn1PymnFg0Ce3sp1SFm+Na8UPynGeF15zwEpTjhCZhSrm HnVMyJC/Bs/N13jbWORk3JWKBzb1CRo3LHo/dKjb5I1KZe5x0JSfhLjToNYzHAAbGnaZco +o0OBUj4SNS6PM9UiQcbaPA3ImB54LXAUuK/o7//5J9CTosP6P/bKRatZsi5huT4T/65uM NLFZEWSseEmQukLXAyxPj3GXkNw6PfnEryA7uLUv1XmzprLt4LCtd/xO2n5pMWQJ/ikhyu F+uLMk4P5seFXoA3PqX08xEdrUTwTHHMVk7gWSk68JIk7viqI5kDGeqL4Va9uA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1792391084; b=h44+NJVZeFpjiNBdKRlGwjJw6pc4vmITSt9YdD9as27+LCOtIxXlKZQlpqsvXX9Sg/mQrn bR/6euf/vUXYfTCcHrfKVuF0B9kNrv1lluFDKntTfLb9Qpuzzyog5qF1gNcuvS5X6UbRRx DUcQnh3LtSqzAW4AFa1NgaPXsK9IIFLTRVl+zeHpe7y6KXb0PmStAsZimLWxXTyzLNAEzv 745MrBTPZc1B09kFNP0qWSE6F+PahkUcJqBawH7yEi+sHMGL/npI04MKWe1UxVw2BwUTwo JeToGZ0d2LTYODpoVTUno9LbwDDRv+47BxelnE6UCQboikSq1TceFZKqqh+HLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792391084; 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=bUbGpytJauQ8EWNA9FZKaCL2ZFLNil6rKpDpcm6OwqE=; b=n+YvhXQ0Ima0ZrZhy0PUJ7H2K+5O3dJFdsRw9iQrzOH/4Em/kk2bk6s2i6w1imJYh0EAjG IAYLWjLnPncVBmUuTW4pjIAI7M9zR4GKO9UQJZetCkABM3gsNiC2kJ+cCRfN4NBL/nJ3P+ n/gnaOr9T5zNguP3e0K7XD9O6eJpc18VaOAufSxUQ6gEpz8re3wwrzSsZoAYqBfaBxiEhS CDoiCmYke4Xn7kmaXyMgp9BGGeMZspRBsas9OOih6k9isC2201Mk1Bc7+lc2nQrX2f601A aJsy64/2AWtGgcMZx6bE8ifQ66m8aNiYdNFJLeNk+12rugQIFZijLMkmmZs3Ww== 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 4j7QWJ0krDz1N4h for ; Mon, 19 Oct 2026 06:24:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33936 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 19 Oct 2026 06:24:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: bf3726998fc7 - main - nvmecontrol: Use admin device for admin-passthru List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: Commit messages for the main branch of the src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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: bf3726998fc7655fa116dd99be24842407d8263b Auto-Submitted: auto-generated Date: Mon, 19 Oct 2026 06:24:44 +0000 Message-Id: <6ad5b7ac.33936.1c1901a3@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=bf3726998fc7655fa116dd99be24842407d8263b commit bf3726998fc7655fa116dd99be24842407d8263b Author: Warner Losh AuthorDate: 2026-10-19 04:43:09 +0000 Commit: Warner Losh CommitDate: 2026-10-19 06:22:51 +0000 nvmecontrol: Use admin device for admin-passthru When we're doing admin-passhtru, we need to use the admin device, not the namespace device. So when we're passed in ndaX or nvdX, we need to translate that to nvmeY for this command for the admin-passthru command, but not the io-passthru command. Note namespace nuance in man page. Differential Revision: https://reviews.freebsd.org/D59878 --- sbin/nvmecontrol/nvmecontrol.8 | 4 ++-- sbin/nvmecontrol/passthru.c | 33 +++++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/sbin/nvmecontrol/nvmecontrol.8 b/sbin/nvmecontrol/nvmecontrol.8 index 19015a8c90df..76646a578e3b 100644 --- a/sbin/nvmecontrol/nvmecontrol.8 +++ b/sbin/nvmecontrol/nvmecontrol.8 @@ -33,7 +33,7 @@ .\" .\" Author: Jim Harris .\" -.Dd September 10, 2026 +.Dd September 21, 2026 .Dt NVMECONTROL 8 .Os .Sh NAME @@ -766,7 +766,7 @@ This is ignored and not implemented in .It Fl f -flags Nvme command flags. .It Fl n -namespace-id -Namespace ID for command (Ignored). +Namespace ID for command (ignored for admin, defaults to device's namespace for io). .It Fl p -prefill Value to prefill payload with. .It Fl b -raw-binary diff --git a/sbin/nvmecontrol/passthru.c b/sbin/nvmecontrol/passthru.c index cf38e185a582..45c8e8c914c3 100644 --- a/sbin/nvmecontrol/passthru.c +++ b/sbin/nvmecontrol/passthru.c @@ -41,6 +41,8 @@ #include "nvmecontrol.h" #include "comnd.h" +#define NONE 0xfffffffeu + static struct options { uint8_t opcode; uint8_t flags; @@ -80,7 +82,7 @@ static struct options { .flags = 0, .ifn = "", .metadata_len = 0, - .nsid = 0, + .nsid = NONE, .opcode = 0, .prefill = 0, .read = false, @@ -152,8 +154,10 @@ static const struct args args[] = { }; static void -passthru(const struct cmd *f, int argc, char *argv[]) +passthru(const struct cmd *f, int argc, char *argv[], bool admin) { + char *path; + uint32_t nsid; int fd = -1, ifd = -1; size_t bytes_read; void *data = NULL, *metadata = NULL; @@ -161,7 +165,22 @@ passthru(const struct cmd *f, int argc, char *argv[]) if (arg_parse(argc, argv, f)) return; + /* + * Open the specified device. Get the namespace ID for that device, and + * use that if one isn't on the command line. + */ open_dev(opt.dev, &fd, 1, 1); + get_nsid(fd, &path, &nsid); + if (admin && nsid != 0) { + /* + * We got namespace device, but we need the admin device. + */ + close(fd); + open_dev(path, &fd, 0, 1); + } + free(path); + if (opt.nsid != NONE) + nsid = opt.nsid; if (opt.read && opt.write) errx(EX_USAGE, "need exactly one of --read or --write"); @@ -201,7 +220,7 @@ passthru(const struct cmd *f, int argc, char *argv[]) fprintf(stderr, "opcode : %#02x\n", opt.opcode); fprintf(stderr, "flags : %#02x\n", opt.flags); fprintf(stderr, "rsvd1 : %#04x\n", opt.rsvd); - fprintf(stderr, "nsid : %#04x\n", opt.nsid); + fprintf(stderr, "nsid : %#04x\n", nsid); fprintf(stderr, "cdw2 : %#08x\n", opt.cdw2); fprintf(stderr, "cdw3 : %#08x\n", opt.cdw3); fprintf(stderr, "data_len : %#08x\n", opt.data_len); @@ -226,7 +245,7 @@ passthru(const struct cmd *f, int argc, char *argv[]) pt.cmd.opc = opt.opcode; pt.cmd.fuse = opt.flags; pt.cmd.cid = htole16(opt.rsvd); - pt.cmd.nsid = opt.nsid; /* XXX note: kernel overrides this */ + pt.cmd.nsid = htole32(nsid); pt.cmd.rsvd2 = htole32(opt.cdw2); pt.cmd.rsvd3 = htole32(opt.cdw3); pt.cmd.cdw10 = htole32(opt.cdw10); @@ -264,15 +283,13 @@ cleanup: static void admin_passthru(const struct cmd *nf, int argc, char *argv[]) { - - passthru(nf, argc, argv); + passthru(nf, argc, argv, true); } static void io_passthru(const struct cmd *nf, int argc, char *argv[]) { - - passthru(nf, argc, argv); + passthru(nf, argc, argv, false); } static struct cmd admin_pass_cmd = {