From nobody Sun Oct 04 17:41:45 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 4hyVFQ1Hnhz6cTNL for ; Sun, 04 Oct 2026 17:41:46 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hyVFQ0hXZz3GZw for ; Sun, 04 Oct 2026 17:41:46 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791135706; 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=FKHWl0Zg+ik5Jd8bPUHtvv9u+v8ZGRd8arRcng6d7f4=; b=SsnOD9zktA5JpWvbuTq6hGNFMWRbBdY22CPbkj4P1JmkvH92Yo17YQVwh6LIZlofZ2hy1H k+BFJ+hmdlBLUjPB5Zz2j0VkVgY/02H+B9S246gqbPLF04AK5KU3aWDKT9GPL5ZCn7Sfbf jMsCwkGf/4NpJGZRJlAFDawwIV6XvWRs3VMD6TezuYUDxLryClSdnrrEUgrLHf1u59Qd4a ypr4AeoYMbnWPHlgVsWas/TMYeMJtWNisCkpd62CZRoZKZBrKGCVSNwbk5x2RUWjQ+7WWm TAAsCRCpMAgg0Viv3jMqbNz7+996W8nX/FPsADpWbDEb8Md/BlqYjsxS4v2zOQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791135706; b=qp7N5aXMPXj/gEhclsYUxD8hsm+A305OV8t+4V05wNb3SGFzKd1lcY7n7CHO+N2PzZ45C0 1gAQ0PeCf/uCOGFFbfs5kRowapYKUZE6yOQDCEWN7wwRKNBe4V4eeyPmuZVLUct8p5Gkki g6gbUzvszhmyScxy9HgwRuhumoWF6cXMT93KMMMY5TBGIfAkFyae7fFM4mE0hItV1ss5h2 VI0TrMPH/7DnJqgp6g8FschffezUpaZK6IDIa2AJtXR+5732nZVG/MF0kntXoD4oVevtHA mhbFrOTY7NXYaVk7BaLAdjAnbdh2Dls8Aw5rom5Ix0lxpMx/fGOMXxYfK6ftJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791135706; 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=FKHWl0Zg+ik5Jd8bPUHtvv9u+v8ZGRd8arRcng6d7f4=; b=qwqUHySj+ZuZLWjISv8sCa6VWt6lADHguw0/DS4a3UrjMCyUG6QoSpEgpuAW3+SsDLf1uz /t6EXOFsVSW77/wM+qf9dfUD5yjmHvwkqJV4n2UU0oxgkSDDJWef7J/tMJwH7/FsUGEUAY Ip1bG1mgBTJIvsDx8NnVqEukfzG5JiSQEpCXonUKLD2JRqmgDZrPiVaw0Lxz9ct8pqHRt6 W0KQm/cE3Lyantk8REtAuywgOqd4hK8Q6r33S93tDiTgQHHz3jDTV3lQRxCqQIFhBKW21I F2ADMjoE/p5CEy82acTsXGxe2tPkujXMvE/tux5KPsevLuIGJfRUos939rEDpQ== 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 4hyVFP6rjhzkmV for ; Sun, 04 Oct 2026 17:41:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 309d7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 04 Oct 2026 17:41:45 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Abdelkader Boudih Subject: git: 22f50379ab93 - main - nvme: delete the I/O queues in the system shutdown path 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 List-Id: 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: seuros X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 22f50379ab93024354e98333250d453a6d0eaff5 Auto-Submitted: auto-generated Date: Sun, 04 Oct 2026 17:41:45 +0000 Message-Id: <6ac28fd9.309d7.5c81e16e@gitrepo.freebsd.org> The branch main has been updated by seuros: URL: https://cgit.FreeBSD.org/src/commit/?id=22f50379ab93024354e98333250d453a6d0eaff5 commit 22f50379ab93024354e98333250d453a6d0eaff5 Author: Abdelkader Boudih AuthorDate: 2026-10-04 17:40:29 +0000 Commit: Abdelkader Boudih CommitDate: 2026-10-04 17:40:29 +0000 nvme: delete the I/O queues in the system shutdown path A normal shutdown deletes all I/O submission and completion queues before setting CC.SHN, as the suspend path already does. The device_shutdown path went straight to the shutdown notification with the queues live, which some drives take slowly or record as an unclean stop. Skipped the deletion for failed, removed, or never-initialized controllers. Reviewed by: imp, adrian Differential Revision: https://reviews.freebsd.org/D59633 --- sys/dev/nvme/nvme.c | 5 +++++ sys/dev/nvme/nvme_ctrlr.c | 2 +- sys/dev/nvme/nvme_private.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/sys/dev/nvme/nvme.c b/sys/dev/nvme/nvme.c index db50e2b140bc..9af9adaf7d25 100644 --- a/sys/dev/nvme/nvme.c +++ b/sys/dev/nvme/nvme.c @@ -44,8 +44,13 @@ int nvme_shutdown(device_t dev) { struct nvme_controller *ctrlr; + uint32_t csts; ctrlr = DEVICE2SOFTC(dev); + + csts = nvme_mmio_read_4(ctrlr, csts); + if (ctrlr->is_initialized && !ctrlr->is_failed && csts != NVME_GONE) + nvme_ctrlr_delete_qpairs(ctrlr); nvme_ctrlr_shutdown(ctrlr); return (0); diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c index ae98482fecbd..ab8b0aa37a35 100644 --- a/sys/dev/nvme/nvme_ctrlr.c +++ b/sys/dev/nvme/nvme_ctrlr.c @@ -612,7 +612,7 @@ nvme_ctrlr_create_qpairs(struct nvme_controller *ctrlr) return (0); } -static int +int nvme_ctrlr_delete_qpairs(struct nvme_controller *ctrlr) { struct nvme_completion_poll_status status; diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h index 9bee1b23bd4e..d801f8285f90 100644 --- a/sys/dev/nvme/nvme_private.h +++ b/sys/dev/nvme/nvme_private.h @@ -437,6 +437,7 @@ void nvme_completion_poll_cb(void *arg, const struct nvme_completion *cpl); int nvme_ctrlr_construct(struct nvme_controller *ctrlr, device_t dev); void nvme_ctrlr_destruct(struct nvme_controller *ctrlr, device_t dev); void nvme_ctrlr_shutdown(struct nvme_controller *ctrlr); +int nvme_ctrlr_delete_qpairs(struct nvme_controller *ctrlr); void nvme_ctrlr_reset(struct nvme_controller *ctrlr); /* ctrlr defined as void * to allow use with config_intrhook. */ void nvme_ctrlr_start_config_hook(void *ctrlr_arg);