From nobody Mon Oct 19 06:24:36 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 4j7QW853kqz6vsJY for ; Mon, 19 Oct 2026 06:24:36 +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 4j7QW83py3z3PnJ for ; Mon, 19 Oct 2026 06:24:36 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792391076; 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=dtPh4CxJNtZsTJP4BOrUcsSzIy0/DczwIaM8zPXIUlI=; b=XNDxz4gVVVOFD3k1hzrA/M7eZKr/zF7KJ+vNn16SF07EeRzhK0M88vBKTLFTag/csQtTqD 3weoYlUJVI811eHszHjS7nwJcXfAwA/nmbgrQNhawxKtifnklNkS2rYMARp4KQoTVYJDyG YwAgUObK8e9ghL5G6b2n7rcGiz3Z2eHOw7cP8p1TGXCDw2KJOXTBqqHDbxfWNoviyq6Oem CHHd4lkgXiZedAkphkV5LxifY9yyEauTIr6rxqOAkpoexbik3ZcoHFJzM7Tv9JjIs2olbV xCV4wrlElOP3zyY6WuDPoIGCR6I6U7bpUKbt52qAQHGg5UL0aCDp4B7608lA8g== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1792391076; b=euzT/Ab4b3Cg4+yoHRiFQ/bynCBn4pYigSzggOnCh5wfgJW11N7YBcJ672B0BEMBkvBvxA ajC58O69qhmqPJgaTTJvkIhxfnUDapLCzpuPMQD/K1baqUPNe0RcQTldOb+ylQviUCFvXl xNiuUi4daZoaYdWIZ2ltsTCd0l8sRtwORT8S1QW6/EMOy6l3bdQrL+JzpxsFWNKrplHita vJc8GVLye9MNy02xM/o35M5QfQK3pdnJmXlCyNvpfRYyxuX8LmMI+zrI/3aDgnPCQCm7SO HgC+K6Beh4J1c6VPxUXD40amrLVQunkocZhP4djhQ/miOVYe+i8AsaTIM+11mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792391076; 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=dtPh4CxJNtZsTJP4BOrUcsSzIy0/DczwIaM8zPXIUlI=; b=CimfmU0KT9oIdxF9Is/sB9cr4VqPPg6nOSe5KMKqaB+b6BUL0NxtWh96SLTIIclW43PoVD bP1fm1mGsvb0viwM/U343pN7nJJJEJhUoTajFWusf2xDz/KUtCITc97mVJit4dwYLl/T9k adIKMdtzX36WI7Eg6bpGVlif1OTzmRs/cg7mulRhGVL4XzEEs716ThmSDOOvQD1vG1YUMt nO26CRM0XmZ3ipDomV2DtnjNwvgdiuiMvww4SaESl5Yb41RQP8GetIMFphCXDkY2mt9cap I+x59cGudgDVo9KTSRQAxhV39dAf4VJMMLlJeB+FFnUFXoWOc5ltbwiKS1MuNg== 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 4j7QW83TMHz1N4g for ; Mon, 19 Oct 2026 06:24:36 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 331ff by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 19 Oct 2026 06:24:36 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: 1c31ef40e185 - main - nvme: support per-request timeouts 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: 1c31ef40e185a09c030d53640f6ebc71bb0c830f Auto-Submitted: auto-generated Date: Mon, 19 Oct 2026 06:24:36 +0000 Message-Id: <6ad5b7a4.331ff.c04c45@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=1c31ef40e185a09c030d53640f6ebc71bb0c830f commit 1c31ef40e185a09c030d53640f6ebc71bb0c830f Author: Warner Losh AuthorDate: 2026-10-19 04:38:45 +0000 Commit: Warner Losh CommitDate: 2026-10-19 06:22:50 +0000 nvme: support per-request timeouts Allow different timeouts per command. Reviewed by: seuros, chuck Differential Revision: https://reviews.freebsd.org/D59828 --- sys/dev/nvme/nvme_ctrlr.c | 2 +- sys/dev/nvme/nvme_private.h | 8 +++++--- sys/dev/nvme/nvme_qpair.c | 17 +++++++++++------ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c index ccfbe576fd26..c8c891eaf806 100644 --- a/sys/dev/nvme/nvme_ctrlr.c +++ b/sys/dev/nvme/nvme_ctrlr.c @@ -795,7 +795,7 @@ nvme_ctrlr_construct_and_submit_aer(struct nvme_controller *ctrlr, * Disable timeout here, since asynchronous event requests should by * nature never be timed out. */ - req->timeout = false; + req->timeout_ms = NVME_TIMEOUT_NONE; req->cmd.opc = NVME_OPC_ASYNC_EVENT_REQUEST; nvme_ctrlr_submit_admin_request(ctrlr, req); } diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h index c50ddf2a2a3b..b55159145de9 100644 --- a/sys/dev/nvme/nvme_private.h +++ b/sys/dev/nvme/nvme_private.h @@ -86,6 +86,9 @@ MALLOC_DECLARE(M_NVME); #define NVME_MAX_TIMEOUT_PERIOD (120) #define NVME_MAX_FORMAT_TIMEOUT_PERIOD (60 * 60) +#define NVME_TIMEOUT_DEFAULT 0U +#define NVME_TIMEOUT_NONE UINT32_MAX + #define NVME_DEFAULT_RETRY_COUNT (4) /* Maximum log page size to fetch for AERs. */ @@ -115,12 +118,11 @@ struct nvme_request { struct memdesc payload; nvme_cb_fn_t cb_fn; void *cb_arg; + uint32_t timeout_ms; int16_t retries; uint16_t ioq; #define NVME_IOQ_DEFAULT 0xffff bool payload_valid; - bool timeout; - bool spare[2]; /* Future use */ STAILQ_ENTRY(nvme_request) stailq; }; @@ -544,7 +546,7 @@ _nvme_allocate_request(const int how, nvme_cb_fn_t cb_fn, void *cb_arg) req->ioq = NVME_IOQ_DEFAULT; req->cb_fn = cb_fn; req->cb_arg = cb_arg; - req->timeout = true; + req->timeout_ms = NVME_TIMEOUT_DEFAULT; } return (req); } diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c index c918539ce28c..1fd853513fcb 100644 --- a/sys/dev/nvme/nvme_qpair.c +++ b/sys/dev/nvme/nvme_qpair.c @@ -1037,7 +1037,7 @@ nvme_qpair_submit_tracker(struct nvme_qpair *qpair, struct nvme_tracker *tr) { struct nvme_request *req; struct nvme_controller *ctrlr; - int timeout; + uint32_t timeout_ms; mtx_assert(&qpair->lock, MA_OWNED); @@ -1045,14 +1045,19 @@ nvme_qpair_submit_tracker(struct nvme_qpair *qpair, struct nvme_tracker *tr) qpair->act_tr[tr->cid] = tr; ctrlr = qpair->ctrlr; - if (req->timeout) { + if (req->timeout_ms != NVME_TIMEOUT_NONE) { if (req->cb_fn == nvme_completion_poll_cb) - timeout = 1; + timeout_ms = 1000; + else if (req->timeout_ms != NVME_TIMEOUT_DEFAULT) + timeout_ms = req->timeout_ms; + else if (qpair->id == 0 && req->cmd.opc == NVME_OPC_FORMAT_NVM) + timeout_ms = ctrlr->format_timeout_period * 1000; else if (qpair->id == 0) - timeout = ctrlr->admin_timeout_period; + timeout_ms = ctrlr->admin_timeout_period * 1000; else - timeout = ctrlr->timeout_period; - tr->deadline = getsbinuptime() + timeout * SBT_1S; + timeout_ms = ctrlr->timeout_period * 1000; + tr->deadline = getsbinuptime() + + (sbintime_t)timeout_ms * SBT_1MS; if (!qpair->timer_armed) { qpair->timer_armed = true; callout_reset_sbt_on(&qpair->timer, SBT_1S / 2, SBT_1S / 2,