From nobody Mon Oct  5 13:35:40 2026
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 4hz0l55hW8z6js7W
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 13:35:45 +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 4hz0l5468Tz4r43
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:35:45 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791207345;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=cLp17M64K3AV/RFiQLFLdFk43EZzyM/ziND1g+HixR8=;
	b=X8gELx6UtWehZ0Ydnat6lqZNDN1TNpA5pT0/1dboK2RfcwflWLXQWlbhW79nZ3XIempJPY
	yg+CYK0n/Td4rHtYa7dY8iOiVaGyLWi8Tw6YlL60U1puZCej28wOcVvUQUW8Cb4BdhbQMa
	0/6/H1KJ6n6O0sw4eg9HRn46pOyke3KeehCUfNZYHHYFNeRszwxHtTGuPc6Tc1tyaeYXsl
	5Fu6lq1z+cY/KmVeJFJC32dQq8G7GE4I88B1JZbw2xWqLGMNMLVeVhQrUAYtFLSAFiCZbQ
	oWxxu7KIqjbDLjPyNS5aH+4YMTZa/v13S76CL0gOyGcjJVDeFRv297/2XIsOhA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791207345;
	b=XHddjXAGLIlnm5nLN4qbNhOewYLU+iDwnQarxMnrPpvMTu83SypaR+7ysy63Wstkd+26tr
	2aBr+a+GRQ5UpsW+ONz4yj6URoZaI5oulTbvTWl3UR8UqQKUfeX+SHoIaVQs5VZ5TL3s+2
	7QSg00PSG770TH5H5pe25jO4ULroTxGnqjKsii4wJrqoZ3pH1FOwUVjRJWaa/bFFSMZlFR
	3LAcdeO32crvnyxhlAx6h5YMby2N/Km5V5o9MEKdvRxLbIkVZ60FgB3OGBUJyJ2bPMLQ6F
	etCYVtwG5UX6JqKX8F6QdvJZw7BYlwMHzu14FS7PBsgSwjRhfuD2NQaZEjCecg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791207345;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=cLp17M64K3AV/RFiQLFLdFk43EZzyM/ziND1g+HixR8=;
	b=ppFDrSLIKfXvT3XGph8IW6x5pi0X+A1w/7QCyjUQsaeIlKQD0wml3RmjyJeXs2ehzhfz5X
	dQgNQIq+u6BJMxLCVHBlqrqcG9whtown1GPHdbxcQTWuNrauJuO18ylIdt0vWu7RH9MIJJ
	zh41oqpTYEdMoTFI1YrFNfWjS6L2VRR3KuWXRj1T+X7JU4GhHPhDtJt8ok0GQCmklLasE/
	CM+VtziPlyDGUHTH8ZoIcPxcgRivMO5CUKGuo7GTLipJk5QgGbZTW7eFD4FVQxuGPnhoJ5
	jEOami1RFMMbKkLWGxIQcolTp3NPJeeKwrVOXUrJZDxA4yQPIyKxvY92jUiZ+g==
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 4hz0l52KqpzLhw
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:35:45 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 40d6d
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 13:35:40 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Cc: Chandrakanth Patil <chandrakanth.patil@broadcom.com>
From: Sumit Saxena <ssaxena@FreeBSD.org>
Subject: git: 8bf2795588c3 - stable/15 - bnxt_en: add bnxt_sriov.c to sys/conf/files for built-in kernel builds
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: ssaxena
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 8bf2795588c3edc26952ade677f3d586fff3bdd6
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 13:35:40 +0000
Message-Id: <6ac3a7ac.40d6d.24c6d17@gitrepo.freebsd.org>

The branch stable/15 has been updated by ssaxena:

URL: https://cgit.FreeBSD.org/src/commit/?id=8bf2795588c3edc26952ade677f3d586fff3bdd6

commit 8bf2795588c3edc26952ade677f3d586fff3bdd6
Author:     Chandrakanth Patil <chandrakanth.patil@broadcom.com>
AuthorDate: 2026-04-28 14:10:13 +0000
Commit:     Sumit Saxena <ssaxena@FreeBSD.org>
CommitDate: 2026-10-05 13:35:24 +0000

    bnxt_en: add bnxt_sriov.c to sys/conf/files for built-in kernel builds
    
    The SR-IOV series added bnxt_sriov.c and listed it in sys/modules/bnxt/bnxt_en/Makefile,
    but kernels that build bnxt into the image only compile sources named in sys/conf/files.
    Add bnxt_sriov.c next to the other bnxt_en entries so built-in bnxt (including LINT)
    links the SR-IOV implementation and avoids undefined symbols referenced from if_bnxt.c.
    
    Fixes: f2f831b2c151 ("bnxt_en: Add core SR-IOV infrastructure")
    
    MFC after:      1 month
    Reviewed by:    ssaxena
    Differential Revision: https://reviews.freebsd.org/D56688
    
    (cherry picked from commit c21c63fb565f1bc7f9564dbf12068c864f8891d8)
---
 sys/conf/files | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sys/conf/files b/sys/conf/files
index 6c07a7bea7f3..0d8a705aab2b 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1321,6 +1321,7 @@ dev/bnxt/bnxt_en/bnxt_auxbus_compat.c	optional bnxt iflib pci compile-with "${BN
 dev/bnxt/bnxt_en/bnxt_dcb.c		optional bnxt iflib pci compile-with "${BNXT_C}"
 dev/bnxt/bnxt_en/bnxt_hwrm.c		optional bnxt iflib pci compile-with "${BNXT_C}"
 dev/bnxt/bnxt_en/bnxt_mgmt.c		optional bnxt iflib pci compile-with "${BNXT_C}"
+dev/bnxt/bnxt_en/bnxt_sriov.c		optional bnxt iflib pci compile-with "${BNXT_C}"
 dev/bnxt/bnxt_en/bnxt_sysctl.c		optional bnxt iflib pci compile-with "${BNXT_C}"
 dev/bnxt/bnxt_en/bnxt_txrx.c		optional bnxt iflib pci compile-with "${BNXT_C}"
 dev/bnxt/bnxt_en/bnxt_ulp.c		optional bnxt iflib pci compile-with "${BNXT_C}"

From nobody Mon Oct  5 13:48:05 2026
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 4hz11L13vLz6jsxK
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 13:48:06 +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 4hz11L0S0mz4t0t
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:48:06 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791208086;
	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=DQH27suH+IV2VIDLChmi+qUW2LY4ZgEvVAzNq8nsKBY=;
	b=YAFF4H7hgobkAeOQXKXVTjEAs6jYvq8V0kJc76WmilEi2Avdf9QQthGs78DwdQXHpLxPZ1
	NrChYldRjQSqDmjgJfo3EYV0XWFqTuA6r0qdHyduUr+Ki7zXqeBHqFD8j0DZLg2Lc8iEQN
	y94tcvo6mMPm5SwFcPHv62d0OYN9zJnzQU38IZVgfGjPCj4See8nhQIdmroIXkkeAHe2wM
	NBRKekFVkzPu3DTQVxbsre4caSx0U6O6R+OuKfYXD2HHYLVF1oXSCIfp6PIclFxeZ+BbSc
	EMz0yrLq/o24pY+p3ggzWqz8UqCvLAx4LhMrSkRqS9XUk50lat7lajYTPLRg9Q==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791208086;
	b=bqkfKQVg/75jozkIDgc4u0Aum5T+nof5uuDd7/VfaAeJyV4RVychhEiKQpxpK2/qlOznNJ
	oQany4iAUY/fThWl70gxJY7hp6GvcXTosarsDkYIzP2oRoDUPDxKcmAK8cSeXMrjxHuLmv
	4HWSRzo9Ij5sNtyOyxP6noQbbeGH2Nj4Wl9qQVpcjsOPxMpeLmArYIi8wfi0fXXKLKWP7S
	yVLm7EMvB/aZnajHwKcQgoRxJfbRjV7F+gmZycI5VT1mBFI8pdM2S+gvR+PP1uxopY5cFq
	R/hW90ym8ksCmkH1GmOp6OQJ7Qw+UycAffswQCML1I+QY+pVfxcn7tVBkO5uJw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791208086;
	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=DQH27suH+IV2VIDLChmi+qUW2LY4ZgEvVAzNq8nsKBY=;
	b=CnKmcRmaV+OI8yd6zEFa8JmFOyDnbLAlcfY5T1kqm36rAMwRWjSMR4Jh+BaETD+i3ZnYOe
	lsgdo6S5bvan/0R01UsIOo1R6ObgPCYjlULDWODk0Hq1CZ3bcuTFfpz3yRRHkgooxYFBxF
	gJ5P30IRl34LCyOeDfHbPvTOqcAXosRCxiDM9faIOP+uHwr8EvkhYaLYS008FFUAtG2Tax
	Guw/K0FPsgEyHaU/5YoFyxcdjfeYwzEIXky7ue51p+/+S8vL1C9shPExHk5i+cqa/waYSk
	u6M0TH9l8vpOgfyqYjM6Z1jEaYYCEVgWuJV7K2KBb2md31ncYXdBQpsK6xHcNg==
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 4hz11K67v1zMJ5
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:48:05 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 42d4a
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 13:48:05 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: 14d692629356 - stable/15 - openssh: Add reference for another local patch
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 14d6926293569048d2d04f6e5a13d80f192ad99e
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 13:48:05 +0000
Message-Id: <6ac3aa95.42d4a.29ff766d@gitrepo.freebsd.org>

The branch stable/15 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=14d6926293569048d2d04f6e5a13d80f192ad99e

commit 14d6926293569048d2d04f6e5a13d80f192ad99e
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2026-05-15 16:16:45 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-05 13:47:51 +0000

    openssh: Add reference for another local patch
    
    A bug fix was committed locally and submitted upstream.  Document it in
    our upgrade instructions, as these sometimes take a long time before
    getting merged.
    
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 6531070132b0210aaaeb08c0dc93cb272bed348e)
---
 crypto/openssh/FREEBSD-upgrade | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/crypto/openssh/FREEBSD-upgrade b/crypto/openssh/FREEBSD-upgrade
index 815c11a8f8ca..6987956ce163 100644
--- a/crypto/openssh/FREEBSD-upgrade
+++ b/crypto/openssh/FREEBSD-upgrade
@@ -188,6 +188,11 @@
    internet protocols are supported by the kernel before trying to
    connect to the target host.  This avoids confusing the user with
    spurious error messages.
+
+12) EVP_CIPHER_CTX_get_iv() stub bugfix
+
+   Bug fix submitted upstream at
+   https://bugzilla.mindrot.org/show_bug.cgi?id=3873
 
 
 This port was brought to you by (in no particular order) DARPA, NAI

From nobody Mon Oct  5 13:48:06 2026
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 4hz11N0Kyzz6jt81
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 13:48:08 +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 4hz11M2yRXz4t9w
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:48:07 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791208087;
	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=+5Pa8CuqrHJn4G9MtEcyK/MUZzSERtcdtPJ4Uw0I08Q=;
	b=w9AeifBH5IbtYhdJ/3xibbsxt8OyUVM+RCn3rOtg1kp6A5+lIyQ7RVqjU/OB7yTfJBcE7s
	dS1wD8+IU7sGfnZKh9SfIvpEEUmsy99KJi3g5mZPqOjO+4Mu+Bvfi1uFZnGm6wR3rbUEng
	Kl6i8u018Jw7RCB9iMab+fLMJmUpZQmv/EU2Ew++euJP+mUgoQk0XP5w1O5MDbqa5JWMjA
	5039ecqRlJM1skCHJRs7X+fTCSV9tljClM2Cdi/tOOKeXluwdeJMaC5dkUBcrh+xEO/Mo+
	D/BRJIAajQipk7IXbG2x/lcHEY3EWh01ASWeCMuGaURdLL37TwjR26NvQRMfRg==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791208087;
	b=Y3jJhNWPYZBvmjdsJ4UbNfaOoa0Voo3/9rzNQBilihIqV6+6/gKw5UC+MB9h5XGbD7EgH8
	7pnj+M15DXd+mWFOqLlodj7c67Mm1Aj17UuOZaIicqDHbit4jbAbFqfvNU6c+uAaJLHcL0
	bWenowbi/oHVNZQE2k4DFJRD394sEbrrwEOxPASU8+USDE/9kEaQuiKT3H8Ei6DR77ybp6
	uxZuHsjU9G8ciSd8kOfbXCXUidtRn3OLHohcNYgAVFZpd9DnCK07oRSP6nO5YDxxEiDMWS
	6TFyG4mKFPxBmeVkvUXruaaPNsoknPtXhvqYB0OBwtehn07r60tX1KlkqatoAw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791208087;
	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=+5Pa8CuqrHJn4G9MtEcyK/MUZzSERtcdtPJ4Uw0I08Q=;
	b=uvpBs27zf9iU48GYursU5qNhnZ9oEfnN9LRUCvzjRc9ZrM4H63hsK1bF7EGUeW0V0q3oWK
	DkTrYvbuUA83PfTyjjq0zTNRLnad20IaUqe6QtDq+TCH7++ohIangM5Gc81w3c+Y1wqTub
	4x7xfeIKXhcwiKtgoTU906pRr/nqhdJKd3FR8KBRZip/nDLOTc7PPydWkCsQExBwleVaZo
	4yUGtQF7TNiFqBId070DGUf4FD1XHi0dxZn9c/o7yCz32LvANqzu0m67c0bKqHLs3ITCwn
	fffq+wgIAcorNmmNTZHh2VDi7ubk+jkkw5FmwzqH/lPlA48CwjygsJCp+U5i/w==
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 4hz11L69RyzM0b
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:48:06 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 42635
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 13:48:06 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: 2ba5b9da2be1 - stable/15 - openssh: Add date bump command to FREEBSD-upgrade instructions
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 2ba5b9da2be10261c383035bef932cd37d52f903
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 13:48:06 +0000
Message-Id: <6ac3aa96.42635.217d0cfa@gitrepo.freebsd.org>

The branch stable/15 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=2ba5b9da2be10261c383035bef932cd37d52f903

commit 2ba5b9da2be10261c383035bef932cd37d52f903
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2026-08-24 01:36:25 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-05 13:47:51 +0000

    openssh: Add date bump command to FREEBSD-upgrade instructions
    
    Provide a convenient in-place sed edit command to update the FreeBSD
    VersionAddendum dates with today's date.
    
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 0ec81f6a531bf7b3b06e869c99295f3d4ab9ed8e)
---
 crypto/openssh/FREEBSD-upgrade | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/crypto/openssh/FREEBSD-upgrade b/crypto/openssh/FREEBSD-upgrade
index 6987956ce163..f536ade84788 100644
--- a/crypto/openssh/FREEBSD-upgrade
+++ b/crypto/openssh/FREEBSD-upgrade
@@ -69,6 +69,11 @@
     version.h, and update the default value in sshd_config and
     sshd_config.5.
 
+    $ sed -E -i "" "s/FreeBSD-202[0-9]{5}/FreeBSD-$(date +%Y%m%d)/" \
+        crypto/openssh/sshd_config \
+        crypto/openssh/sshd_config.5 \
+        crypto/openssh/version.h
+
 11) Diff against the vendor branch:
 
     $ git diff --diff-filter=M vendor/openssh/X.YpZ HEAD:crypto/openssh

From nobody Mon Oct  5 13:58:16 2026
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 4hz1F53Bctz6jtKH
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 13:58:17 +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 4hz1F52fcbz4vKL
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:58:17 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791208697;
	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=x1l2y8FHtyAdNhWP3XsIz4+pyrYX+uoKRXO47bcBNT4=;
	b=AIn7dWrsQN5yAgx5K1GtamuvpxqZD7WX4Dsy2Qt2SbePAVRAN3QnrBCrmc6ss9uu0ebOcc
	bZE9BFMLEAnzZdf+eBlTYimdfutjIqMHR7xR5LKvwmFExe2aUtP1BdMUFc1ubm90mE5nCo
	oiDDqjsd7BkeIPDiO/SHdz2a4Rcu8P6qcA1jt1h2lQHPugqG3d+8G8kivUykZqodIHGRdt
	J7dfJ8z4M/uqHhr83KVd2Pg0GW21zoWuSvCwWMEJjL1X1n/NP4KPgm98b5GFTwt51nEy48
	Ekl2bEkrQWHZVLekAYjCEKtUWikaGUijhx1HPfxZ3VAqSbbErxeUM2t4I64qlw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791208697;
	b=EwzLce9cyvivtxizC+3Ay5bn1kLbJVO3u3QKn02pfJDanKExZZkrfEP7LuXjq6dmeVmVvH
	+2qpdM2FiS0xdPXLNW6lpjfuCC4CUi4HCiCaR/7x3YQbYdeCB6qtXAtAe1qpYwUoNS6i3A
	v56flzdRmGR7CyIJqBg8/Nx5O2HFoy4BYgZTqPXpkC9PUn0jNlgRnCJm7F4EDnhNFsgD+X
	r/sECKSDhSxsaAaIzgvpiL40TaJz+H36iAimw0Jvoi51CXWvR3QjOysSnRNIY4DLNaYip2
	5oSSBj8SWt2HC44NBtQycTVZ3QqVqsI/HonHtcqtOalO670AWHLB1IuYxqvI1Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791208697;
	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=x1l2y8FHtyAdNhWP3XsIz4+pyrYX+uoKRXO47bcBNT4=;
	b=BZQXJ4ncPu2IA2mJ+8C31HkMFA9gUkRa2+T1mepWbKaozfCDw20fQMG7Pc2EG8tfDy3z1b
	wow8TfjDzztdxz9paVV5t4lHfVIUKAitGjL+vC8gskwItPtTyQQoea+D80h5DsckZNQwP8
	IUF9WqUumwc0lDe3cZL9wZ4Y+/JL0EfGUJGBhrLphHGQ7ZXgyhTL5Jk2n88uqwa2BDfRTw
	Am+IECXlfw8dBJyqsRQg1wzMPpsZLUmZQg+xKQ/N77HNVGAMCtYodBjKTBtEDAe6yNPtgK
	ydkNIfdMjzq501OgW9m9BtCGahVLY0oG2ay19VmWgDV9ggiODilNQnn3GrPhcQ==
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 4hz1F51QK0zMb5
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:58:17 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 452d9
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 13:58:16 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: 687a0d4a6b23 - stable/15 - OpenSSH: Update to 10.1p1
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 687a0d4a6b2391cd045951e4e431dd585d131575
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 13:58:16 +0000
Message-Id: <6ac3acf8.452d9.8573132@gitrepo.freebsd.org>

The branch stable/15 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=687a0d4a6b2391cd045951e4e431dd585d131575

commit 687a0d4a6b2391cd045951e4e431dd585d131575
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2026-05-12 20:24:10 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-05 13:47:51 +0000

    OpenSSH: Update to 10.1p1
    
    Full release notes are available at
    https://www.openssh.com/txt/release-10.1
    
    Selected highlights from the release notes:
    
    Potentially-incompatible changes
    
     * ssh(1): add a warning when the connection negotiates a non-post
       quantum key agreement algorithm.
    
     * ssh(1), sshd(8): major changes to handling of DSCP marking/IPQoS
    
     * ssh(1), sshd(8): deprecate support for IPv4 type-of-service (ToS)
       keywords in the IPQoS configuration directive.
    
     * ssh-add(1): when adding certificates to an agent, set the expiry
       to the certificate expiry time plus a short (5 min) grace period.
    
     * ssh-agent(1), sshd(8): move agent listener sockets from /tmp to
       under ~/.ssh/agent for both ssh-agent(1) and forwarded sockets
       in sshd(8).
    
    Security
    
     * ssh(1): disallow control characters in usernames passed via the
       commandline or expanded using %-sequences from the configuration
       file, and disallow \0 characters in ssh:// URIs.
    
    New features
    
     * ssh(1), sshd(8): add SIGINFO handlers to log active channel and
       session information.
    
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 644b4646c7acab87dc20d4e5dd53d2d9da152989)
---
 crypto/openssh/.depend                             |    25 +-
 crypto/openssh/.github/ci-status.md                |    22 +-
 crypto/openssh/.github/configs                     |    13 +-
 crypto/openssh/.github/install_libcrypto.sh        |    75 +
 crypto/openssh/.github/install_putty.sh            |    37 +
 crypto/openssh/.github/run_test.sh                 |    23 +-
 crypto/openssh/.github/setup_ci.sh                 |    73 +-
 crypto/openssh/.github/workflows/c-cpp.yml         |    89 +-
 crypto/openssh/.github/workflows/selfhosted.yml    |    15 +-
 crypto/openssh/.github/workflows/upstream.yml      |    11 +-
 crypto/openssh/.github/workflows/vm.yml            |   371 +
 crypto/openssh/.gitignore                          |     1 +
 crypto/openssh/.skipped-commit-ids                 |     7 +
 crypto/openssh/ChangeLog                           | 11611 +++++++++++--------
 crypto/openssh/INSTALL                             |     2 +-
 crypto/openssh/Makefile.in                         |    70 +-
 crypto/openssh/PROTOCOL                            |   126 +-
 crypto/openssh/PROTOCOL.agent                      |    13 +-
 crypto/openssh/PROTOCOL.certkeys                   |   326 -
 crypto/openssh/PROTOCOL.chacha20poly1305           |   107 -
 crypto/openssh/README                              |     2 +-
 crypto/openssh/TODO                                |     2 +-
 crypto/openssh/atomicio.c                          |     6 -
 crypto/openssh/audit-bsm.c                         |     2 +-
 crypto/openssh/audit-linux.c                       |     4 +-
 crypto/openssh/auth-krb5.c                         |     2 +-
 crypto/openssh/auth-options.c                      |     7 +-
 crypto/openssh/auth-pam.c                          |   127 +-
 crypto/openssh/auth-passwd.c                       |     4 +-
 crypto/openssh/auth-rhosts.c                       |     4 +-
 crypto/openssh/auth-shadow.c                       |     4 +-
 crypto/openssh/auth.c                              |     7 +-
 crypto/openssh/auth2-chall.c                       |    10 +-
 crypto/openssh/auth2-hostbased.c                   |    15 +-
 crypto/openssh/auth2-pubkey.c                      |    16 +-
 crypto/openssh/auth2-pubkeyfile.c                  |    23 +-
 crypto/openssh/auth2.c                             |     2 +-
 crypto/openssh/authfd.c                            |    27 +-
 crypto/openssh/authfd.h                            |     8 +-
 crypto/openssh/authfile.c                          |     8 +-
 crypto/openssh/channels.c                          |   115 +-
 crypto/openssh/channels.h                          |    13 +-
 crypto/openssh/cipher.c                            |    17 +-
 crypto/openssh/clientloop.c                        |    55 +-
 crypto/openssh/config.h                            |    45 +-
 crypto/openssh/configure.ac                        |   110 +-
 crypto/openssh/contrib/Makefile                    |     7 +-
 crypto/openssh/contrib/README                      |     8 +-
 crypto/openssh/contrib/cygwin/ssh-user-config      |     3 +-
 crypto/openssh/contrib/gnome-ssh-askpass4.c        |   249 +
 crypto/openssh/contrib/redhat/openssh.spec         |    17 +-
 crypto/openssh/contrib/redhat/sshd.init            |     2 +-
 crypto/openssh/contrib/ssh-copy-id                 |    15 +-
 crypto/openssh/contrib/suse/openssh.spec           |     3 +-
 crypto/openssh/crypto_api.h                        |     4 +-
 crypto/openssh/defines.h                           |    14 +
 crypto/openssh/digest-libc.c                       |     3 +-
 crypto/openssh/dispatch.c                          |     6 +-
 crypto/openssh/dns.c                               |     8 +-
 crypto/openssh/dns.h                               |     5 +-
 crypto/openssh/groupaccess.c                       |    21 +-
 crypto/openssh/gss-genr.c                          |     2 +-
 crypto/openssh/gss-serv.c                          |     2 +-
 crypto/openssh/hmac.c                              |     2 +-
 crypto/openssh/hostfile.c                          |    62 +-
 crypto/openssh/kex-names.c                         |    64 +-
 crypto/openssh/kex.c                               |     9 +-
 crypto/openssh/kex.h                               |     7 +-
 crypto/openssh/kexdh.c                             |     3 +-
 crypto/openssh/kexecdh.c                           |     3 +-
 crypto/openssh/kexgen.c                            |     6 +-
 crypto/openssh/kexgexc.c                           |     6 +-
 crypto/openssh/kexgexs.c                           |     7 +-
 crypto/openssh/kexmlkem768x25519.c                 |     6 +-
 crypto/openssh/krb5_config.h                       |     1 +
 crypto/openssh/krl.c                               |     5 +-
 crypto/openssh/log.c                               |     4 +-
 crypto/openssh/loginrec.c                          |    48 +-
 crypto/openssh/logintest.c                         |     2 -
 crypto/openssh/m4/openssh.m4                       |    42 +-
 crypto/openssh/mac.c                               |    23 +-
 crypto/openssh/misc-agent.c                        |   357 +
 crypto/openssh/misc.c                              |   103 +-
 crypto/openssh/misc.h                              |     9 +-
 crypto/openssh/moduli                              |   859 +-
 crypto/openssh/moduli.c                            |    59 +-
 crypto/openssh/monitor.c                           |    86 +-
 crypto/openssh/monitor_fdpass.c                    |    12 +-
 crypto/openssh/monitor_wrap.c                      |    93 +-
 crypto/openssh/monitor_wrap.h                      |     6 +-
 crypto/openssh/mux.c                               |    23 +-
 crypto/openssh/openbsd-compat/Makefile.in          |     5 +-
 crypto/openssh/openbsd-compat/arc4random.c         |     2 -
 crypto/openssh/openbsd-compat/arc4random_uniform.c |     4 +-
 crypto/openssh/openbsd-compat/bsd-misc.c           |    55 +-
 crypto/openssh/openbsd-compat/bsd-misc.h           |    14 +-
 crypto/openssh/openbsd-compat/bsd-openpty.c        |     8 +-
 crypto/openssh/openbsd-compat/bsd-poll.h           |     6 +-
 crypto/openssh/openbsd-compat/daemon.c             |     4 +-
 crypto/openssh/openbsd-compat/glob.c               |     2 -
 crypto/openssh/openbsd-compat/include/netgroup.h   |     0
 crypto/openssh/openbsd-compat/include/util.h       |     0
 crypto/openssh/openbsd-compat/memmem.c             |     2 -
 crypto/openssh/openbsd-compat/openssl-compat.c     |     9 +-
 crypto/openssh/openbsd-compat/openssl-compat.h     |    19 +-
 crypto/openssh/openbsd-compat/port-prngd.c         |     4 +-
 crypto/openssh/openbsd-compat/reallocarray.c       |     2 -
 crypto/openssh/openbsd-compat/recallocarray.c      |     2 -
 .../openssh/openbsd-compat/regress/utimensattest.c |    12 +-
 crypto/openssh/packet.c                            |   107 +-
 crypto/openssh/packet.h                            |     8 +-
 crypto/openssh/pathnames.h                         |    13 +-
 crypto/openssh/pkcs11.h                            |  1502 ++-
 crypto/openssh/platform.c                          |    15 +-
 crypto/openssh/poly1305.c                          |     4 +-
 crypto/openssh/progressmeter.c                     |    12 +-
 crypto/openssh/readconf.c                          |    75 +-
 crypto/openssh/readconf.h                          |     8 +-
 crypto/openssh/readpass.c                          |     8 +-
 crypto/openssh/regress/Makefile                    |    69 +-
 crypto/openssh/regress/agent-pkcs11-cert.sh        |    57 +-
 crypto/openssh/regress/agent-pkcs11-restrict.sh    |    31 +-
 crypto/openssh/regress/agent-pkcs11.sh             |    72 +-
 crypto/openssh/regress/agent-restrict.sh           |    17 +-
 crypto/openssh/regress/agent.sh                    |     8 +-
 crypto/openssh/regress/cert-hostkey.sh             |     4 +-
 crypto/openssh/regress/cert-userkey.sh             |     6 +-
 crypto/openssh/regress/cfgmatch.sh                 |     4 +-
 crypto/openssh/regress/cfgparse.sh                 |    19 +-
 crypto/openssh/regress/connect-bigconf.sh          |    17 +
 crypto/openssh/regress/dropbear-server.sh          |    76 +
 crypto/openssh/regress/dsa_ssh2.prv                |    14 -
 crypto/openssh/regress/dsa_ssh2.pub                |    13 -
 crypto/openssh/regress/dynamic-forward.sh          |     4 +-
 crypto/openssh/regress/hostbased.sh                |     3 +-
 crypto/openssh/regress/keygen-comment.sh           |     3 +-
 crypto/openssh/regress/keytype.sh                  |     4 +-
 crypto/openssh/regress/knownhosts-command.sh       |     3 +-
 crypto/openssh/regress/krl.sh                      |     3 +-
 crypto/openssh/regress/limit-keytype.sh            |     6 +-
 crypto/openssh/regress/misc/fuzz-harness/Makefile  |    11 +-
 .../regress/misc/fuzz-harness/agent_fuzz_helper.c  |     7 -
 .../openssh/regress/misc/fuzz-harness/fixed-keys.h |    26 -
 .../fuzz-harness/testdata/create-agent-corpus.sh   |     2 +-
 .../misc/fuzz-harness/testdata/id_dsa-cert.pub     |     1 -
 crypto/openssh/regress/misc/sk-dummy/sk-dummy.c    |     7 +-
 .../regress/misc/ssh-verify-attestation/Makefile   |     4 +-
 .../ssh-verify-attestation.c                       |     7 +-
 crypto/openssh/regress/modpipe.c                   |     4 +-
 crypto/openssh/regress/netcat.c                    |    36 +-
 crypto/openssh/regress/password.sh                 |    60 +
 crypto/openssh/regress/penalty-expire.sh           |     2 +-
 crypto/openssh/regress/penalty.sh                  |     2 +-
 crypto/openssh/regress/percent.sh                  |    45 +-
 crypto/openssh/regress/rekey.sh                    |     2 +-
 crypto/openssh/regress/ssh-com-client.sh           |    14 +-
 crypto/openssh/regress/ssh-com.sh                  |    26 +-
 crypto/openssh/regress/ssh2putty.sh                |     3 +-
 crypto/openssh/regress/sshcfgparse.sh              |    27 +-
 crypto/openssh/regress/sshsig.sh                   |     4 +-
 crypto/openssh/regress/test-exec.sh                |    54 +-
 crypto/openssh/regress/unittests/Makefile.inc      |    29 +-
 crypto/openssh/regress/unittests/authopt/Makefile  |     8 +-
 crypto/openssh/regress/unittests/authopt/tests.c   |    10 +-
 crypto/openssh/regress/unittests/bitmap/Makefile   |     7 +-
 crypto/openssh/regress/unittests/bitmap/tests.c    |    32 +-
 .../openssh/regress/unittests/conversion/Makefile  |     4 +-
 .../openssh/regress/unittests/conversion/tests.c   |    10 +-
 crypto/openssh/regress/unittests/hostkeys/Makefile |     8 +-
 .../regress/unittests/hostkeys/mktestdata.sh       |    13 +-
 .../regress/unittests/hostkeys/test_iterate.c      |   214 +-
 .../regress/unittests/hostkeys/testdata/dsa_1.pub  |     1 -
 .../regress/unittests/hostkeys/testdata/dsa_2.pub  |     1 -
 .../regress/unittests/hostkeys/testdata/dsa_3.pub  |     1 -
 .../regress/unittests/hostkeys/testdata/dsa_4.pub  |     1 -
 .../regress/unittests/hostkeys/testdata/dsa_5.pub  |     1 -
 .../regress/unittests/hostkeys/testdata/dsa_6.pub  |     1 -
 .../unittests/hostkeys/testdata/known_hosts        |    12 +-
 crypto/openssh/regress/unittests/hostkeys/tests.c  |    13 +-
 crypto/openssh/regress/unittests/kex/Makefile      |     8 +-
 crypto/openssh/regress/unittests/kex/test_kex.c    |    79 +-
 .../openssh/regress/unittests/kex/test_proposal.c  |     2 -
 crypto/openssh/regress/unittests/kex/tests.c       |     9 +-
 crypto/openssh/regress/unittests/match/Makefile    |     4 +-
 crypto/openssh/regress/unittests/match/tests.c     |    10 +-
 crypto/openssh/regress/unittests/misc/Makefile     |     6 +-
 crypto/openssh/regress/unittests/misc/test_argv.c  |     2 -
 .../openssh/regress/unittests/misc/test_convtime.c |     2 -
 .../openssh/regress/unittests/misc/test_expand.c   |    31 +-
 .../openssh/regress/unittests/misc/test_hpdelim.c  |     2 -
 crypto/openssh/regress/unittests/misc/test_misc.c  |   436 +
 crypto/openssh/regress/unittests/misc/test_parse.c |    10 +-
 .../openssh/regress/unittests/misc/test_ptimeout.c |     8 +-
 .../openssh/regress/unittests/misc/test_strdelim.c |     2 -
 .../openssh/regress/unittests/misc/test_xextendf.c |    89 +
 crypto/openssh/regress/unittests/misc/tests.c      |    14 +-
 .../openssh/regress/unittests/sshbuf/test_sshbuf.c |     4 +-
 .../regress/unittests/sshbuf/test_sshbuf_fixed.c   |     4 +-
 .../regress/unittests/sshbuf/test_sshbuf_fuzz.c    |     4 +-
 .../unittests/sshbuf/test_sshbuf_getput_basic.c    |    11 +-
 .../unittests/sshbuf/test_sshbuf_getput_crypto.c   |    11 +-
 .../unittests/sshbuf/test_sshbuf_getput_fuzz.c     |    18 +-
 .../regress/unittests/sshbuf/test_sshbuf_misc.c    |   223 +-
 crypto/openssh/regress/unittests/sshbuf/tests.c    |    12 +-
 crypto/openssh/regress/unittests/sshkey/Makefile   |     6 +-
 crypto/openssh/regress/unittests/sshkey/common.c   |    49 +-
 crypto/openssh/regress/unittests/sshkey/common.h   |     5 +-
 .../openssh/regress/unittests/sshkey/mktestdata.sh |    53 +-
 .../openssh/regress/unittests/sshkey/test_file.c   |    98 +-
 .../openssh/regress/unittests/sshkey/test_fuzz.c   |    77 +-
 .../openssh/regress/unittests/sshkey/test_sshkey.c |   225 +-
 .../regress/unittests/sshkey/testdata/dsa_1        |    12 -
 .../unittests/sshkey/testdata/dsa_1-cert.fp        |     1 -
 .../unittests/sshkey/testdata/dsa_1-cert.pub       |     1 -
 .../regress/unittests/sshkey/testdata/dsa_1.fp     |     1 -
 .../regress/unittests/sshkey/testdata/dsa_1.fp.bb  |     1 -
 .../unittests/sshkey/testdata/dsa_1.param.g        |     1 -
 .../unittests/sshkey/testdata/dsa_1.param.priv     |     1 -
 .../unittests/sshkey/testdata/dsa_1.param.pub      |     1 -
 .../regress/unittests/sshkey/testdata/dsa_1.pub    |     1 -
 .../regress/unittests/sshkey/testdata/dsa_1_pw     |    15 -
 .../regress/unittests/sshkey/testdata/dsa_2        |    12 -
 .../regress/unittests/sshkey/testdata/dsa_2.fp     |     1 -
 .../regress/unittests/sshkey/testdata/dsa_2.fp.bb  |     1 -
 .../regress/unittests/sshkey/testdata/dsa_2.pub    |     1 -
 .../regress/unittests/sshkey/testdata/dsa_n        |    21 -
 .../regress/unittests/sshkey/testdata/dsa_n_pw     |    21 -
 crypto/openssh/regress/unittests/sshkey/tests.c    |    10 +-
 crypto/openssh/regress/unittests/sshsig/Makefile   |     6 +-
 .../openssh/regress/unittests/sshsig/mktestdata.sh |     8 +-
 .../openssh/regress/unittests/sshsig/testdata/dsa  |    12 -
 .../regress/unittests/sshsig/testdata/dsa.pub      |     1 -
 .../regress/unittests/sshsig/testdata/dsa.sig      |    13 -
 crypto/openssh/regress/unittests/sshsig/tests.c    |    15 +-
 .../openssh/regress/unittests/test_helper/fuzz.c   |     7 +-
 .../regress/unittests/test_helper/test_helper.c    |   214 +-
 .../regress/unittests/test_helper/test_helper.h    |    28 +-
 crypto/openssh/regress/unittests/utf8/Makefile     |     7 +-
 crypto/openssh/regress/unittests/utf8/tests.c      |     8 +-
 crypto/openssh/sandbox-capsicum.c                  |     8 +-
 crypto/openssh/sandbox-darwin.c                    |     6 +-
 crypto/openssh/sandbox-seccomp-filter.c            |    66 +-
 crypto/openssh/scp.1                               |    19 +-
 crypto/openssh/scp.c                               |    48 +-
 crypto/openssh/servconf.c                          |    93 +-
 crypto/openssh/serverloop.c                        |    40 +-
 crypto/openssh/session.c                           |    56 +-
 crypto/openssh/sftp-client.c                       |    40 +-
 crypto/openssh/sftp-client.h                       |     3 +-
 crypto/openssh/sftp-common.c                       |     2 -
 crypto/openssh/sftp-glob.c                         |     4 +-
 crypto/openssh/sftp-server.c                       |    16 +-
 crypto/openssh/sftp.c                              |    22 +-
 crypto/openssh/sk-api.h                            |     2 -
 crypto/openssh/sk-usbhid.c                         |    11 +-
 crypto/openssh/srclimit.c                          |    16 +-
 crypto/openssh/ssh-add.1                           |    13 +-
 crypto/openssh/ssh-add.c                           |   224 +-
 crypto/openssh/ssh-agent.1                         |    38 +-
 crypto/openssh/ssh-agent.c                         |   141 +-
 crypto/openssh/ssh-dss.c                           |   457 -
 crypto/openssh/ssh-ecdsa.c                         |    35 +-
 crypto/openssh/ssh-ed25519.c                       |    37 +-
 crypto/openssh/ssh-keygen.1                        |    13 +-
 crypto/openssh/ssh-keygen.c                        |   320 +-
 crypto/openssh/ssh-keyscan.1                       |     6 +-
 crypto/openssh/ssh-keyscan.c                       |    42 +-
 crypto/openssh/ssh-keysign.c                       |    14 +-
 crypto/openssh/ssh-pkcs11-client.c                 |   517 +-
 crypto/openssh/ssh-pkcs11-helper.c                 |   221 +-
 crypto/openssh/ssh-pkcs11.c                        |   862 +-
 crypto/openssh/ssh-pkcs11.h                        |    14 +-
 crypto/openssh/ssh-rsa.c                           |    50 +-
 crypto/openssh/ssh-sk-helper.c                     |    19 +-
 crypto/openssh/ssh-sk.c                            |     4 +-
 crypto/openssh/ssh-xmss.c                          |   389 -
 crypto/openssh/ssh.c                               |   117 +-
 crypto/openssh/ssh_config                          |     3 +-
 crypto/openssh/ssh_config.5                        |    50 +-
 crypto/openssh/ssh_namespace.h                     |    44 +-
 crypto/openssh/sshbuf-getput-basic.c               |     4 +-
 crypto/openssh/sshbuf-misc.c                       |    63 +-
 crypto/openssh/sshbuf.h                            |    18 +-
 crypto/openssh/sshconnect.c                        |    39 +-
 crypto/openssh/sshconnect2.c                       |     4 +-
 crypto/openssh/sshd-auth.c                         |    35 +-
 crypto/openssh/sshd-session.c                      |    38 +-
 crypto/openssh/sshd.8                              |     6 +-
 crypto/openssh/sshd.c                              |    60 +-
 crypto/openssh/sshd_config                         |     2 +-
 crypto/openssh/sshd_config.5                       |    27 +-
 crypto/openssh/sshkey-xmss.c                       |  1113 --
 crypto/openssh/sshkey-xmss.h                       |    56 -
 crypto/openssh/sshkey.c                            |   233 +-
 crypto/openssh/sshkey.h                            |    43 +-
 crypto/openssh/sshlogin.c                          |     2 +-
 crypto/openssh/sshpty.c                            |    10 +-
 crypto/openssh/sshsig.c                            |     5 +-
 crypto/openssh/uidswap.c                           |     8 +-
 crypto/openssh/umac.c                              |     9 +-
 crypto/openssh/version.h                           |     8 +-
 crypto/openssh/xmalloc.c                           |     8 +-
 crypto/openssh/xmss_commons.c                      |    36 -
 crypto/openssh/xmss_commons.h                      |    21 -
 crypto/openssh/xmss_fast.c                         |  1106 --
 crypto/openssh/xmss_fast.h                         |   111 -
 crypto/openssh/xmss_hash.c                         |   137 -
 crypto/openssh/xmss_hash.h                         |    22 -
 crypto/openssh/xmss_hash_address.c                 |    66 -
 crypto/openssh/xmss_hash_address.h                 |    40 -
 crypto/openssh/xmss_wots.c                         |   192 -
 crypto/openssh/xmss_wots.h                         |    64 -
 secure/lib/libssh/Makefile                         |     4 +-
 secure/ssh.mk                                      |     2 +-
 314 files changed, 14462 insertions(+), 14120 deletions(-)

diff --git a/crypto/openssh/.depend b/crypto/openssh/.depend
index 152905fb7b78..93e4d864eb52 100644
--- a/crypto/openssh/.depend
+++ b/crypto/openssh/.depend
@@ -79,6 +79,7 @@ loginrec.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-comp
 logintest.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h loginrec.h
 mac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h digest.h hmac.h umac.h mac.h misc.h ssherr.h sshbuf.h openbsd-compat/openssl-compat.h
 match.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h misc.h
+misc-agent.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h digest.h log.h ssherr.h misc.h pathnames.h ssh.h xmalloc.h
 misc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h log.h ssherr.h ssh.h sshbuf.h
 moduli.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
 monitor.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h dh.h packet.h dispatch.h auth-options.h sshpty.h channels.h session.h sshlogin.h canohost.h log.h ssherr.h misc.h servconf.h monitor.h monitor_wrap.h monitor_fdpass.h compat.h ssh2.h authfd.h match.h sk-api.h srclimit.h
@@ -113,8 +114,8 @@ servconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-comp
 servconf.o: mac.h crypto_api.h match.h channels.h groupaccess.h canohost.h packet.h dispatch.h hostfile.h auth.h auth-pam.h audit.h loginrec.h myproposal.h digest.h version.h
 serverloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h packet.h dispatch.h sshbuf.h log.h ssherr.h misc.h servconf.h canohost.h sshpty.h channels.h ssh2.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h ciph
er-aesctr.h
 serverloop.o: rijndael.h kex.h mac.h crypto_api.h hostfile.h auth.h auth-pam.h audit.h loginrec.h session.h auth-options.h serverloop.h
-session.o: hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h authfd.h pathnames.h log.h misc.h servconf.h sshlogin.h serverloop.h canohost.h session.h kex.h mac.h crypto_api.h monitor_wrap.h sftp.h atomicio.h
 session.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h sshbuf.h ssherr.h match.h uidswap.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h
+session.o: kex.h mac.h crypto_api.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h authfd.h pathnames.h log.h misc.h servconf.h sshlogin.h serverloop.h canohost.h session.h monitor_wrap.h sftp.h atomicio.h
 sftp-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h sshbuf.h log.h atomicio.h progressmeter.h misc.h utf8.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h
 sftp-common.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssherr.h sshbuf.h log.h misc.h sftp.h sftp-common.h
 sftp-glob.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h
@@ -128,24 +129,22 @@ sntrup761.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-com
 srclimit.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h addr.h canohost.h log.h ssherr.h misc.h srclimit.h xmalloc.h servconf.h openbsd-compat/sys-queue.h match.h
 ssh-add.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h log.h ssherr.h sshkey.h sshbuf.h authfd.h authfile.h pathnames.h misc.h digest.h ssh-sk.h sk-api.h hostfile.h
 ssh-agent.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h sshkey.h authfd.h log.h ssherr.h misc.h digest.h match.h msg.h pathnames.h ssh-pkcs11.h sk-api.h myproposal.h
-ssh-dss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
 ssh-ecdsa-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h sshbuf.h ssherr.h digest.h sshkey.h
 ssh-ecdsa.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
 ssh-ed25519-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ssherr.h sshbuf.h sshkey.h ssh.h digest.h
 ssh-ed25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ssherr.h sshbuf.h sshkey.h ssh.h
-ssh-keygen.o: cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h
-ssh-keygen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h authfile.h sshbuf.h pathnames.h log.h ssherr.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h ssh-pkcs11.h atomicio.h krl.h digest.h utf8.h authfd.h sshsig.h ssh-sk.h sk-api.h cipher.h
+ssh-keygen.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h
+ssh-keygen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h authfile.h sshbuf.h pathnames.h log.h ssherr.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h atomicio.h krl.h digest.h utf8.h authfd.h sshsig.h ssh-sk.h sk-api.h cipher.h cipher-chachapoly.h
 ssh-keyscan.o: dispatch.h log.h ssherr.h atomicio.h misc.h hostfile.h ssh_api.h ssh2.h dns.h addr.h
 ssh-keyscan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h kex.h mac.h crypto_api.h compat.h myproposal.h packet.h
 ssh-keysign.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h sshkey.h ssh.h ssh2.h misc.h sshbuf.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h
-ssh-pkcs11-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
-ssh-pkcs11-helper.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h sshbuf.h log.h ssherr.h misc.h sshkey.h authfd.h ssh-pkcs11.h
+ssh-pkcs11-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h pathnames.h xmalloc.h sshbuf.h log.h ssherr.h misc.h sshkey.h authfd.h atomicio.h ssh-pkcs11.h
+ssh-pkcs11-helper.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h log.h ssherr.h misc.h sshkey.h authfd.h ssh-pkcs11.h
 ssh-pkcs11.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sshkey.h
 ssh-rsa.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
 ssh-sk-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sshbuf.h sshkey.h msg.h digest.h pathnames.h ssh-sk.h misc.h
-ssh-sk-helper.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h sshkey.h authfd.h misc.h sshbuf.h msg.h uidswap.h ssh-sk.h
+ssh-sk-helper.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h sshkey.h authfd.h misc.h sshbuf.h msg.h uidswap.h ssh-sk.h ssh-pkcs11.h
 ssh-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
-ssh-xmss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
 ssh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h canohost.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h packet.h dispatch.h sshbuf.h
 channels.h
 ssh.o: sshkey.h authfd.h authfile.h pathnames.h clientloop.h log.h ssherr.h misc.h readconf.h sshconnect.h kex.h mac.h crypto_api.h sshpty.h match.h msg.h version.h myproposal.h utf8.h
 ssh_api.o: authfile.h dh.h misc.h version.h myproposal.h sshbuf.h openbsd-compat/openssl-compat.h
@@ -163,11 +162,10 @@ sshd-auth.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h ke
 sshd-auth.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h log.h ssherr.h sshbuf.h misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h
 sshd-session.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h kex.h mac.h crypto_api.h authfile.h pathnames.h atomicio.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h authfd.h msg.h channels.h session.h monitor.h monitor_wrap.h auth-options.h version.h sk-api.h srclimit.h dh.h
 sshd-session.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h log.h ssherr.h sshbuf.h misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h
-sshd.o: audit.h loginrec.h authfd.h msg.h version.h sk-api.h addr.h srclimit.h atomicio.h
+sshd.o: audit.h loginrec.h authfd.h msg.h version.h sk-api.h addr.h srclimit.h atomicio.h monitor_wrap.h
 sshd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshpty.h log.h ssherr.h sshbuf.h misc.h servconf.h compat.h digest.h sshkey.h authfile.h pathnames.h canohost.h hostfile.h auth.h auth-pam.h
 ssherr.o: ssherr.h
-sshkey-xmss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
-sshkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ssh2.h ssherr.h misc.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h match.h ssh-sk.h openbsd-compat/openssl-compat.h
+sshkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ssh2.h ssherr.h misc.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h match.h ssh-sk.h ssh-pkcs11.h openbsd-compat/openssl-compat.h
 sshlogin.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshlogin.h ssherr.h loginrec.h log.h sshbuf.h misc.h servconf.h openbsd-compat/sys-queue.h
 sshpty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h log.h ssherr.h misc.h
 sshsig.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h authfd.h authfile.h log.h ssherr.h misc.h sshbuf.h sshsig.h sshkey.h match.h digest.h
@@ -178,8 +176,3 @@ umac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h
 umac128.o: umac.c includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h umac.h misc.h rijndael.h
 utf8.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h utf8.h
 xmalloc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h
-xmss_commons.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
-xmss_fast.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
-xmss_hash.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
-xmss_hash_address.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
-xmss_wots.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
diff --git a/crypto/openssh/.github/ci-status.md b/crypto/openssh/.github/ci-status.md
index 68275715dfb1..5b1f77f2369c 100644
--- a/crypto/openssh/.github/ci-status.md
+++ b/crypto/openssh/.github/ci-status.md
@@ -1,19 +1,17 @@
 master :
-[![C/C++ CI](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml?query=branch:master)
+[![C/C++ CI](../../../actions/workflows/c-cpp.yml/badge.svg)](../../../actions/workflows/c-cpp.yml?query=branch:master)
+[![VM CI](../../../actions/workflows/vm.yml/badge.svg)](../../../actions/workflows/vm.yml?query=branch:master)
 [![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:master)
 [![Upstream self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/upstream.yml/badge.svg)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/upstream.yml?query=branch:master)
-[![CIFuzz](https://github.com/openssh/openssh-portable/actions/workflows/cifuzz.yml/badge.svg)](https://github.com/openssh/openssh-portable/actions/workflows/cifuzz.yml)
-[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/openssh.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:openssh)
+[![CIFuzz](../../../actions/workflows/cifuzz.yml/badge.svg)](../../../actions/workflows/cifuzz.yml)
+[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/openssh.svg)](https://issues.oss-fuzz.com/issues?q="Project:+openssh"+is:open)
 [![Coverity Status](https://scan.coverity.com/projects/21341/badge.svg)](https://scan.coverity.com/projects/openssh-portable)
+<br>
+
+10.0 :
+[![C/C++ CI](../../../actions/workflows/c-cpp.yml/badge.svg?branch=V_10_0)](../../../actions/workflows/c-cpp.yml?query=branch:V_10_0)
+[![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_10_0)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_10_0)
 
 9.9 :
-[![C/C++ CI](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml/badge.svg?branch=V_9_9)](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml?query=branch:V_9_9)
+[![C/C++ CI](../../../actions/workflows/c-cpp.yml/badge.svg?branch=V_9_9)](../../../actions/workflows/c-cpp.yml?query=branch:V_9_9)
 [![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_9_9)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_9_9)
-
-9.8 :
-[![C/C++ CI](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml/badge.svg?branch=V_9_8)](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml?query=branch:V_9_8)
-[![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_9_8)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_9_8)
-
-9.7 :
-[![C/C++ CI](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml/badge.svg?branch=V_9_7)](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml?query=branch:V_9_7)
-[![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_9_7)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_9_7)
diff --git a/crypto/openssh/.github/configs b/crypto/openssh/.github/configs
index 2526e3ef4812..230258f93f24 100755
--- a/crypto/openssh/.github/configs
+++ b/crypto/openssh/.github/configs
@@ -13,6 +13,10 @@ if [ "$config" = "" ]; then
 	config="default"
 fi
 
+if [ ! -z "${LTESTS}" ]; then
+	OVERRIDE_LTESTS="${LTESTS}"
+fi
+
 unset CC CFLAGS CPPFLAGS LDFLAGS LTESTS SUDO
 
 TEST_TARGET="tests compat-tests"
@@ -144,6 +148,8 @@ case "$config" in
 	TCMALLOC_STACKTRACE_METHOD=generic_fp
 	TEST_SSH_SSHD_ENV="TCMALLOC_STACKTRACE_METHOD=generic_fp"
 	export TCMALLOC_STACKTRACE_METHOD TEST_SSH_SSHD_ENV
+
+	SKIP_LTESTS="agent-restrict"
 	;;
     krb5|heimdal)
 	CONFIGFLAGS="--with-kerberos5"
@@ -277,7 +283,7 @@ case "${TARGET_HOST}" in
 	# Native linker is not great with PIC so OpenSSL is built w/out.
 	CONFIGFLAGS="${CONFIGFLAGS} --disable-security-key"
 	;;
-    fbsd14-ppc64)
+    fbsd14-ppc64|nbsd-arm64be)
 	# Disable security key tests for bigendian interop test.
 	CONFIGFLAGS="${CONFIGFLAGS} --disable-security-key"
 	;;
@@ -392,5 +398,10 @@ if [ -x "$(which plink 2>/dev/null)" ]; then
 	export REGRESS_INTEROP_PUTTY
 fi
 
+if [ ! -z "${OVERRIDE_LTESTS}" ]; then
+	echo >&2 "Overriding LTESTS, was '${LTESTS}', now '${OVERRIDE_LTESTS}'"
+	LTESTS="${OVERRIDE_LTESTS}"
+fi
+
 export CC CFLAGS CPPFLAGS LDFLAGS LTESTS SUDO
 export TEST_TARGET TEST_SSH_UNSAFE_PERMISSIONS TEST_SSH_FAIL_FATAL
diff --git a/crypto/openssh/.github/install_libcrypto.sh b/crypto/openssh/.github/install_libcrypto.sh
new file mode 100755
index 000000000000..d1aa23450679
--- /dev/null
+++ b/crypto/openssh/.github/install_libcrypto.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+#
+# Install specified libcrypto.
+#  -a : install version for ABI compatibility test.
+#  -n : dry run, don't actually build and install.
+#
+# Usage: $0 [-a] [-n] openssl-$branch/tag destdir [config options]
+
+set -e
+
+bincompat_test=""
+dryrun=""
+while [ "$1" = "-a" ] || [ "$1" = "-n" ]; do
+	if [ "$1" = "-a" ]; then
+		abi_compat_test=y
+	elif [ "$1" = "-n" ]; then
+		dryrun="echo dryrun:"
+	fi
+	shift
+done
+
+ver="$1"
+destdir="$2"
+opts="$3"
+
+if [ -z "${ver}" ] || [ -z "${destdir}" ]; then
+	echo tag/branch and destdir required
+	exit 1
+fi
+
+set -x
+
+if [ ! -d ${HOME}/openssl ]; then
+	cd ${HOME}
+	git clone https://github.com/openssl/openssl.git
+	cd ${HOME}/openssl
+	git fetch --all
+fi
+cd ${HOME}/openssl
+
+if [ "${abi_compat_test}" = "y" ]; then
+	echo selecting ABI test release/branch for ${ver}
+	case "${ver}" in
+	openssl-3.6)
+		ver=openssl-3.0.0
+		echo "selecting older release ${ver}"
+		;;
+	openssl-3.[012345])
+		major=$(echo ${ver} | cut -f1 -d.)
+		minor=$(echo ${ver} | cut -f2 -d.)
+		ver="${major}.$((${minor} + 1))"
+		echo selecting next release branch ${ver}
+		;;
+	openssl-3.*.*)
+		major=$(echo ${ver} | cut -f1 -d.)
+		minor=$(echo ${ver} | cut -f2 -d.)
+		patch=$(echo ${ver} | cut -f3 -d.)
+		ver="${major}.${minor}.$((${patch} + 1))"
+		echo checking for release tag ${ver}
+		if git tag | grep -q "^${ver}\$"; then
+			echo selected next patch release ${ver}
+		else
+			ver="${major}.${minor}"
+			echo not found, selecting release branch ${ver}
+		fi
+		;;
+	esac
+fi
+
+git checkout ${ver}
+make clean >/dev/null 2>&1 || true
+${dryrun} ./config no-threads shared ${opts} --prefix=${destdir} \
+    -Wl,-rpath,${destdir}/lib64
+${dryrun} make -j4
+${dryrun} sudo make install_sw
diff --git a/crypto/openssh/.github/install_putty.sh b/crypto/openssh/.github/install_putty.sh
new file mode 100755
index 000000000000..6d6d0ad49f41
--- /dev/null
+++ b/crypto/openssh/.github/install_putty.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+ver="$1"
+
+echo
+echo --------------------------------------
+echo Installing PuTTY version ${ver}
+echo --------------------------------------
+
+cd /tmp
+
+case "${ver}" in
+snapshot)
+	tarball=putty.tar.gz
+	url=https://tartarus.org/~simon/putty-snapshots/${tarball}
+	;;
+*)
+	tarball=putty-${ver}.tar.gz
+	url=https://the.earth.li/~sgtatham/putty/${ver}/${tarball}
+	;;
+esac
+
+if [ ! -f ${tarball} ]; then
+	wget -q ${url}
+fi
+
+mkdir -p /tmp/puttybuild
+cd /tmp/puttybuild
+
+tar xfz /tmp/${tarball} && cd putty-*
+if [ -f CMakeLists.txt ]; then
+	cmake . && cmake --build . -j4 && sudo cmake --build . --target install
+else
+	./configure && make -j4 && sudo make install
+fi
+sudo rm -rf /tmp/puttybuild
+/usr/local/bin/plink -V
diff --git a/crypto/openssh/.github/run_test.sh b/crypto/openssh/.github/run_test.sh
index 74ab2423c0d8..aac9ce57942e 100755
--- a/crypto/openssh/.github/run_test.sh
+++ b/crypto/openssh/.github/run_test.sh
@@ -21,18 +21,6 @@ if [ ! -z "$SUDO" ] && [ ! -z "$TEST_SSH_HOSTBASED_AUTH" ]; then
     done
 fi
 
-output_failed_logs() {
-    for i in regress/failed*.log; do
-        if [ -f "$i" ]; then
-            echo -------------------------------------------------------------------------
-            echo LOGFILE $i
-            cat $i
-            echo -------------------------------------------------------------------------
-        fi
-    done
-}
-trap output_failed_logs 0
-
 env=""
 if [ ! -z "${SUDO}" ]; then
     env="${env} SUDO=${SUDO}"
@@ -47,6 +35,17 @@ if [ ! -z "${env}" ]; then
     env="env${env}"
 fi
 
+if [ "$1" = "putty-versions" ]; then
+	for ver in 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.80 \
+	    0.81 0.82 0.83 snapshot; do
+		.github/install_putty.sh "${ver}"
+		${env} make ${TEST_TARGET} \
+		    SKIP_LTESTS="${SKIP_LTESTS}" LTESTS="${LTESTS}"
+	done
+
+	exit 0
+fi
+
 if [ -z "${LTESTS}" ]; then
     ${env} make ${TEST_TARGET} SKIP_LTESTS="${SKIP_LTESTS}"
 else
diff --git a/crypto/openssh/.github/setup_ci.sh b/crypto/openssh/.github/setup_ci.sh
index f6c4a5c84fb5..c90969627022 100755
--- a/crypto/openssh/.github/setup_ci.sh
+++ b/crypto/openssh/.github/setup_ci.sh
@@ -1,8 +1,17 @@
 #!/bin/sh
 
+config="$1"
+target="$2"
+
 PACKAGES=""
 
- . .github/configs $@
+echo Running as:
+id
+
+echo Environment:
+set
+
+ . .github/configs ${config}
 
 host=`./config.guess`
 echo "config.guess: $host"
@@ -10,9 +19,17 @@ case "$host" in
 *cygwin)
 	PACKAGER=setup
 	echo Setting CYGWIN system environment variable.
-	setx CYGWIN "binmode"
+	setx CYGWIN "winsymlinks:native"
 	echo Removing extended ACLs so umask works as expected.
+	set -x
 	setfacl -b . regress
+	icacls regress /c /t /q /Inheritance:d
+	icacls regress /c /t /q /Grant ${USERNAME}:F
+	icacls regress /c /t /q /Remove:g "Authenticated Users" \
+	     BUILTIN\\Administrators BUILTIN Everyone System Users
+	takeown /F regress
+	icacls regress
+	set +x
 	PACKAGES="$PACKAGES,autoconf,automake,cygwin-devel,gcc-core"
 	PACKAGES="$PACKAGES,make,openssl,libssl-devel,zlib-devel"
 	;;
@@ -24,7 +41,7 @@ case "$host" in
 	PACKAGER=apt
 esac
 
-TARGETS=$@
+TARGETS=${config}
 
 INSTALL_FIDO_PPA="no"
 export DEBIAN_FRONTEND=noninteractive
@@ -147,7 +164,7 @@ for TARGET in $TARGETS; do
         PACKAGES="${PACKAGES} cmake ninja-build"
         ;;
     putty-*)
-	INSTALL_PUTTY=$(echo "${TARGET}" | cut -f2 -d-)
+	INSTALL_PUTTY=0.83
 	PACKAGES="${PACKAGES} cmake"
 	;;
     valgrind*)
@@ -184,7 +201,8 @@ while [ ! -z "$PACKAGES" ] && [ "$tries" -gt "0" ]; do
 	fi
 	;;
     setup)
-	if /cygdrive/c/setup.exe -q -P `echo "$PACKAGES" | tr ' ' ,`; then
+	setup="/cygdrive/$(echo "${CYGWIN_SETUP}" | tr -d : | tr '\' '/')"
+	if "${setup}" -q -P `echo "$PACKAGES" | tr ' ' ,`; then
 		PACKAGES=""
 	fi
 	;;
@@ -207,13 +225,8 @@ if [ "${INSTALL_HARDENED_MALLOC}" = "yes" ]; then
 fi
 
 if [ ! -z "${INSTALL_OPENSSL}" ]; then
-    (cd ${HOME} &&
-     git clone https://github.com/openssl/openssl.git &&
-     cd ${HOME}/openssl &&
-     git checkout ${INSTALL_OPENSSL} &&
-     ./config no-threads shared ${SSLCONFOPTS} \
-         --prefix=/opt/openssl &&
-     make && sudo make install_sw)
+	.github/install_libcrypto.sh \
+	    "${INSTALL_OPENSSL}" /opt/openssl "${SSLCONFOPTS}"
 fi
 
 if [ ! -z "${INSTALL_LIBRESSL}" ]; then
@@ -240,7 +253,7 @@ if [ ! -z "${INSTALL_BORINGSSL}" ]; then
      cd ${HOME}/boringssl && mkdir build && cd build &&
      cmake -GNinja  -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. && ninja &&
      mkdir -p /opt/boringssl/lib &&
-     cp ${HOME}/boringssl/build/crypto/libcrypto.a /opt/boringssl/lib &&
+     cp ${HOME}/boringssl/build/libcrypto.a /opt/boringssl/lib &&
      cp -r ${HOME}/boringssl/include /opt/boringssl)
 fi
 
@@ -260,23 +273,23 @@ if [ ! -z "${INSTALL_ZLIB}" ]; then
 fi
 
 if [ ! -z "${INSTALL_PUTTY}" ]; then
-    ver="${INSTALL_PUTTY}"
-    case "${INSTALL_PUTTY}" in
-    snapshot)
-	tarball=putty.tar.gz
-	(cd /tmp && wget https://tartarus.org/~simon/putty-snapshots/${tarball})
-	;;
-    *)
-	tarball=putty-${ver}.tar.gz
-	(cd /tmp && wget https://the.earth.li/~sgtatham/putty/${ver}/${tarball})
+	.github/install_putty.sh "${INSTALL_PUTTY}"
+fi
+
+# If we're running on an ephemeral VM, set a random password and set
+# up to run the password auth test.
+if [ ! -z "${EPHEMERAL_VM}" ]; then
+
+    # This is the github "target" as specified in the yml file.
+    # In particular, ubuntu-latest sets the password field to the locked
+    # value, so unless we reset it here most of the tests will fail.
+    case "${target}" in
+    ubuntu-*)
+	echo ${target} target: setting random password.
+	openssl rand -base64 9 >regress/password
+	pw=$(tr -d '\n' <regress/password | openssl passwd -6 -stdin)
+	sudo usermod --password "${pw}" runner
+	sudo usermod --unlock runner
 	;;
     esac
-    (cd ${HOME} && tar xfz /tmp/${tarball} && cd putty-*
-     if [ -f CMakeLists.txt ]; then
-	cmake . && cmake --build . && sudo cmake --build . --target install
-     else
-	./configure && make && sudo make install
-     fi
-    )
-    /usr/local/bin/plink -V
 fi
diff --git a/crypto/openssh/.github/workflows/c-cpp.yml b/crypto/openssh/.github/workflows/c-cpp.yml
index 424c193fb207..f64803b55ef6 100644
--- a/crypto/openssh/.github/workflows/c-cpp.yml
+++ b/crypto/openssh/.github/workflows/c-cpp.yml
@@ -1,10 +1,20 @@
-name: C/C++ CI
+name: CI
+
+# For testing, you can set variables in your repo (Repo -> Settings ->
+# Security -> Actions -> Variables) to restrict the tests that are run.
+# The supported variables are:
+#
+# RUN_ONLY_TARGET_CONFIG: Run only the single matching target and config,
+#   separated by spaces, eg "ubuntu-latest default".  All other tests will
+#   fail immediately.
+#
+# LTESTS: Override the set of tests run.
 
 on:
   push:
-    paths: [ '**.c', '**.h', '**.m4', '**.sh', '**/Makefile.in', 'configure.ac', '.github/configs', '.github/workflows/c-cpp.yml' ]
+    paths: [ '**.c', '**.h', '**.m4', '**.sh', '**/Makefile.in', 'configure.ac', '.github/configs', '.github/*.sh', '.github/workflows/c-cpp.yml' ]
   pull_request:
-    paths: [ '**.c', '**.h', '**.m4', '**.sh', '**/Makefile.in', 'configure.ac', '.github/configs', '.github/workflows/c-cpp.yml' ]
+    paths: [ '**.c', '**.h', '**.m4', '**.sh', '**/Makefile.in', 'configure.ac', '.github/configs', '.github/*.sh', '.github/workflows/c-cpp.yml' ]
 
 jobs:
   ci:
@@ -22,14 +32,14 @@ jobs:
           - macos-13
           - macos-14
           - macos-15
-          - windows-2019
           - windows-2022
+          - windows-2025
         config: [default]
         # Then we include any extra configs we want to test for specific VMs.
         # Valgrind slows things down quite a bit, so start them first.
         include:
-          - { target: windows-2019, config: cygwin-release }
           - { target: windows-2022, config: cygwin-release }
+          - { target: windows-2025, config: cygwin-release }
           - { target: ubuntu-22.04, config: c89 }
           - { target: ubuntu-22.04, config: clang-11 }
           - { target: ubuntu-22.04, config: clang-12-Werror }
@@ -61,46 +71,41 @@ jobs:
           - { target: ubuntu-latest, config: boringssl }
           - { target: ubuntu-latest, config: aws-lc }
           - { target: ubuntu-latest, config: libressl-master }
-          - { target: ubuntu-latest, config: libressl-3.2.6 }
+          - { target: ubuntu-latest, config: libressl-3.2.7 }
           - { target: ubuntu-latest, config: libressl-3.3.6 }
           - { target: ubuntu-latest, config: libressl-3.4.3 }
-          - { target: ubuntu-latest, config: libressl-3.5.3 }
-          - { target: ubuntu-latest, config: libressl-3.6.1 }
-          - { target: ubuntu-latest, config: libressl-3.7.2 }
+          - { target: ubuntu-latest, config: libressl-3.5.4 }
+          - { target: ubuntu-latest, config: libressl-3.6.3 }
+          - { target: ubuntu-latest, config: libressl-3.7.3 }
           - { target: ubuntu-latest, config: libressl-3.8.4 }
           - { target: ubuntu-latest, config: libressl-3.9.2 }
           - { target: ubuntu-latest, config: libressl-4.0.0 }
+          - { target: ubuntu-latest, config: libressl-4.1.0 }
           - { target: ubuntu-latest, config: openssl-master }
           - { target: ubuntu-latest, config: openssl-noec }
           - { target: ubuntu-latest, config: openssl-1.1.1 }
           - { target: ubuntu-latest, config: openssl-1.1.1t }
           - { target: ubuntu-latest, config: openssl-1.1.1w }
           - { target: ubuntu-latest, config: openssl-3.0.0 }
-          - { target: ubuntu-latest, config: openssl-3.0.15 }
+          - { target: ubuntu-latest, config: openssl-3.0.18 }
           - { target: ubuntu-latest, config: openssl-3.1.0 }
-          - { target: ubuntu-latest, config: openssl-3.1.7 }
-          - { target: ubuntu-latest, config: openssl-3.2.3 }
-          - { target: ubuntu-latest, config: openssl-3.3.2 }
+          - { target: ubuntu-latest, config: openssl-3.1.8 }
+          - { target: ubuntu-latest, config: openssl-3.2.6 }
+          - { target: ubuntu-latest, config: openssl-3.3.5 }
           - { target: ubuntu-latest, config: openssl-3.4.0 }
+          - { target: ubuntu-latest, config: openssl-3.4.3 }
+          - { target: ubuntu-latest, config: openssl-3.5.0 }
+          - { target: ubuntu-latest, config: openssl-3.5.3 }  # keep
+          - { target: ubuntu-latest, config: openssl-3.5.4 }
           - { target: ubuntu-latest, config: openssl-1.1.1_stable }
           - { target: ubuntu-latest, config: openssl-3.0 }  # stable branch
           - { target: ubuntu-latest, config: openssl-3.1 }  # stable branch
           - { target: ubuntu-latest, config: openssl-3.2 }  # stable branch
           - { target: ubuntu-latest, config: openssl-3.3 }  # stable branch
-          - { target: ubuntu-latest, config: putty-0.71 }
-          - { target: ubuntu-latest, config: putty-0.72 }
-          - { target: ubuntu-latest, config: putty-0.73 }
-          - { target: ubuntu-latest, config: putty-0.74 }
-          - { target: ubuntu-latest, config: putty-0.75 }
-          - { target: ubuntu-latest, config: putty-0.76 }
-          - { target: ubuntu-latest, config: putty-0.77 }
-          - { target: ubuntu-latest, config: putty-0.78 }
-          - { target: ubuntu-latest, config: putty-0.79 }
-          - { target: ubuntu-latest, config: putty-0.80 }
-          - { target: ubuntu-latest, config: putty-0.81 }
-          - { target: ubuntu-latest, config: putty-0.82 }
-          - { target: ubuntu-latest, config: putty-0.83 }
-          - { target: ubuntu-latest, config: putty-snapshot }
+          - { target: ubuntu-latest, config: openssl-3.4 }  # stable branch
+          - { target: ubuntu-latest, config: openssl-3.5 }  # stable branch
+          - { target: ubuntu-latest, config: openssl-3.6 }  # stable branch
+          - { target: ubuntu-latest, config: putty-versions }
           - { target: ubuntu-latest, config: zlib-develop }
           - { target: ubuntu-latest, config: tcmalloc }
           - { target: ubuntu-latest, config: musl }
@@ -110,16 +115,26 @@ jobs:
           - { target: macos-14, config: pam }
           - { target: macos-15, config: pam }
     runs-on: ${{ matrix.target }}
+    env:
+      EPHEMERAL_VM: yes
     steps:
+    - name: check RUN_ONLY_TARGET_CONFIG
+      if: vars.RUN_ONLY_TARGET_CONFIG != ''
+      run: sh -c 'if [ "${{ vars.RUN_ONLY_TARGET_CONFIG }}" != "${{ matrix.target }} ${{matrix.config }}" ]; then exit 1; else exit 0; fi'
     - name: set cygwin git params
       if: ${{ startsWith(matrix.target, 'windows') }}
       run: git config --global core.autocrlf input
     - name: install cygwin
+      id: cygwin_install
       if: ${{ startsWith(matrix.target, 'windows') }}
       uses: cygwin/cygwin-install-action@master
+      env:
+        CYGWIN: "winsymlinks:native"
     - uses: actions/checkout@main
     - name: setup CI system
-      run: sh ./.github/setup_ci.sh ${{ matrix.config }}
+      run: sh ./.github/setup_ci.sh ${{ matrix.config }} ${{ matrix.target }}
+      env:
+        CYGWIN_SETUP: ${{ steps.cygwin_install.outputs.setup }}
     - name: autoreconf
       run: sh -c autoreconf
     - name: configure
@@ -138,6 +153,18 @@ jobs:
       env:
         TEST_SSH_UNSAFE_PERMISSIONS: 1
         TEST_SSH_HOSTBASED_AUTH: yes
+        LTESTS: ${{ vars.LTESTS }}
+    - name: test OpenSSL3 ABI compatibility
+      if: ${{ startsWith(matrix.config, 'openssl-3') }}
+      run: |
+       sh .github/install_libcrypto.sh -a ${{ matrix.config }} /opt/openssl
+       sh .github/run_test.sh ${{ matrix.config }}
+    - name: show logs
+      if: failure()
+      run: for i in regress/failed*.log; do echo ====; echo logfile $i; echo =====; cat $i; done
+    - name: chown logs
+      if: failure()
+      run: test -x "$(which sudo 2>&1)" && sudo chown -R "${LOGNAME}" regress
     - name: save logs
       if: failure()
       uses: actions/upload-artifact@main
@@ -146,8 +173,4 @@ jobs:
         path: |
           config.h
           config.log
-          regress/*.log
-          regress/valgrind-out/
-          regress/asan.log.*
-          regress/msan.log.*
-          regress/log/*
+          regress/
diff --git a/crypto/openssh/.github/workflows/selfhosted.yml b/crypto/openssh/.github/workflows/selfhosted.yml
index d892a28c3eb6..a46d8a451aa7 100644
*** 42367 LINES SKIPPED ***

From nobody Mon Oct  5 13:58:18 2026
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 4hz1F65strz6jthx
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 13:58:18 +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 4hz1F63ytJz4v5t
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:58:18 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791208698;
	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=Zc/tJEOgM3lTKtgPDyZT3Aor2ddZ7uLFOSpWubJM5as=;
	b=F3DvnrPW1JTCuOR58BcG68dEnbRikqaaMNWrUOOYRuc0XLwtcQ7TTDmOYR42yyFyIn7NtJ
	T9s21OfQwjuPRaPZpboXor4TxoTFESk23W8bH5XxDufpY5nd4zMNDeNtnlpabx72vQVRRQ
	6AXBq1DRoz4QC8WAqwWEbh1NCo1rDNKBz4um5B7VrRxzsRfsRFZ2uKN7NRgs944r1YlqF+
	VPUeYPcJgmyB7kmefAqJU+WUFtytcnYm+Os6MzggwpVBdEzBBvAng/Hf2O7Tmz9634FTut
	inErm+Rl6elUay1lY3o607fq7fg1WSkCWkJ8tbIj8eY/leFB2rYKOutqewAHsA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791208698;
	b=Ii93xylGOa0WI06s873lH5GlioRPevhBtGGTqWRmqErnpNXWFCb1RfWzNjm+O2pqIsnwDi
	Ijo6yvZDdGmS5gRxKrnReLgNFxoc0t+pxvWja1lryIey6s307cepxGnvmI1sXyHtCXm03M
	kJVHaNxI+5Pwm1oA2ScFHI5mGtz/kAImCPfwg/61uQjfvsS6TR0tGlQd0iGNbb3kE5g3so
	msLgRBHhkan76SgVt44mtuPTLTk93D+3B9t6BuVbyfjZFhFueMx729II/U4IrUmaUcRJqs
	w4rBtl4FP9KnEX/dPh86GvJvLkJBpl5Opt44KXeBbNp/cfbbbavWKvrtvJFuxg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791208698;
	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=Zc/tJEOgM3lTKtgPDyZT3Aor2ddZ7uLFOSpWubJM5as=;
	b=w2T0hoNgbb2QqFxrmc8+CHMJIesJzQcdWABnki6QMNhOGIrkhbIsTQge6s8DPKFZal5l11
	0SMlatM4b1kEA9KX/CrYfJaC4/AWSYe0Z0v24yGgA+dDifakdBo0IJlRHbhPWp5OkshRgS
	67FtI1YfcZc6PrRceHbGRVhgNJNUBkCJAACKvcREF2rI3kTrK83NsfNpg3U5maAVfDevHd
	xyY1nVOPh6AtL0KuMIjyLh32hJHZPD4QF6WFWh9dX4DLPh4E0KBRE9ZjGBlXE/E1KlZTgA
	N/uYGxeCkRy0KaYhIyCOSwgW1SAWfVCKaY8+TyGA/L8YFumfN/jfFjda/D9/bw==
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 4hz1F61rWbzLxV
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:58:18 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 44dcf
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 13:58:18 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: 2bdbd0a3702f - stable/15 - OpenSSH: Update to 10.2p1
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 2bdbd0a3702fb9595767379a68861dd401c28621
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 13:58:18 +0000
Message-Id: <6ac3acfa.44dcf.42912b23@gitrepo.freebsd.org>

The branch stable/15 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=2bdbd0a3702fb9595767379a68861dd401c28621

commit 2bdbd0a3702fb9595767379a68861dd401c28621
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2026-05-12 21:12:09 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-05 13:47:51 +0000

    OpenSSH: Update to 10.2p1
    
    Full release notes are available at
    https://www.openssh.com/txt/release-10.2
    
    Selected highlights from the release notes:
    
    Bugfixes
    --------
    
     * ssh(1): fix mishandling of terminal connections when
       ControlPersist was active that rendered the session unusable.
       bz3872
    
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit e68aa5ab80ab57bdbcbe94dd2922a018d675e7f0)
---
 crypto/openssh/.depend                     |   2 +-
 crypto/openssh/.github/ci-status.md        |   5 +
 crypto/openssh/.github/run_test.sh         |   1 -
 crypto/openssh/ChangeLog                   | 183 +++++++++++++++++++++++------
 crypto/openssh/Makefile.in                 |   2 +-
 crypto/openssh/README                      |   2 +-
 crypto/openssh/auth-pam.c                  |   2 +-
 crypto/openssh/channels.c                  |   9 +-
 crypto/openssh/channels.h                  |   3 +-
 crypto/openssh/config.h                    |   5 +-
 crypto/openssh/configure.ac                |   2 +
 crypto/openssh/contrib/redhat/openssh.spec |   2 +-
 crypto/openssh/contrib/suse/openssh.spec   |   2 +-
 crypto/openssh/openbsd-compat/arc4random.h |   4 +-
 crypto/openssh/openbsd-compat/bsd-misc.c   |  24 ++++
 crypto/openssh/openbsd-compat/bsd-misc.h   |   8 ++
 crypto/openssh/regress/test-exec.sh        |  12 +-
 crypto/openssh/ssh-pkcs11-helper.c         |  16 ---
 crypto/openssh/ssh-pkcs11.c                |  31 ++++-
 crypto/openssh/ssh_namespace.h             |   1 -
 crypto/openssh/sshkey.c                    |   8 ++
 crypto/openssh/version.h                   |   4 +-
 22 files changed, 248 insertions(+), 80 deletions(-)

diff --git a/crypto/openssh/.depend b/crypto/openssh/.depend
index 93e4d864eb52..660f515caf54 100644
--- a/crypto/openssh/.depend
+++ b/crypto/openssh/.depend
@@ -140,7 +140,7 @@ ssh-keyscan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-c
 ssh-keysign.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h sshkey.h ssh.h ssh2.h misc.h sshbuf.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h
 ssh-pkcs11-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h pathnames.h xmalloc.h sshbuf.h log.h ssherr.h misc.h sshkey.h authfd.h atomicio.h ssh-pkcs11.h
 ssh-pkcs11-helper.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h log.h ssherr.h misc.h sshkey.h authfd.h ssh-pkcs11.h
-ssh-pkcs11.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sshkey.h
+ssh-pkcs11.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sshkey.h ssh-pkcs11.h
 ssh-rsa.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
 ssh-sk-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sshbuf.h sshkey.h msg.h digest.h pathnames.h ssh-sk.h misc.h
 ssh-sk-helper.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h sshkey.h authfd.h misc.h sshbuf.h msg.h uidswap.h ssh-sk.h ssh-pkcs11.h
diff --git a/crypto/openssh/.github/ci-status.md b/crypto/openssh/.github/ci-status.md
index 5b1f77f2369c..82ea40a840b4 100644
--- a/crypto/openssh/.github/ci-status.md
+++ b/crypto/openssh/.github/ci-status.md
@@ -8,6 +8,11 @@ master :
 [![Coverity Status](https://scan.coverity.com/projects/21341/badge.svg)](https://scan.coverity.com/projects/openssh-portable)
 <br>
 
+10.1 :
+[![C/C++ CI](../../../actions/workflows/c-cpp.yml/badge.svg?branch=V_10_1)](../../../actions/workflows/c-cpp.yml?query=branch:V_10_1)
+[![VM CI](../../../actions/workflows/vm.yml/badge.svg?branch=V_10_1)](../../../actions/workflows/vm.yml?query=branch:V_10_1)
+[![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_10_1)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_10_1)
+
 10.0 :
 [![C/C++ CI](../../../actions/workflows/c-cpp.yml/badge.svg?branch=V_10_0)](../../../actions/workflows/c-cpp.yml?query=branch:V_10_0)
 [![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_10_0)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_10_0)
diff --git a/crypto/openssh/.github/run_test.sh b/crypto/openssh/.github/run_test.sh
index aac9ce57942e..33c90ac291c2 100755
--- a/crypto/openssh/.github/run_test.sh
+++ b/crypto/openssh/.github/run_test.sh
@@ -13,7 +13,6 @@ if [ ! -z "$SUDO" ] && [ ! -z "$TEST_SSH_HOSTBASED_AUTH" ]; then
     hostname | $SUDO tee $sshconf/shosts.equiv >/dev/null
     echo "EnableSSHKeysign yes" | $SUDO tee $sshconf/ssh_config >/dev/null
     $SUDO mkdir -p $sshconf
-    $SUDO cp -p /etc/ssh/ssh_host*key* $sshconf
     $SUDO make install
     for key in $sshconf/ssh_host*key*.pub; do
         echo `hostname` `cat $key` | \
diff --git a/crypto/openssh/ChangeLog b/crypto/openssh/ChangeLog
index e690f70726a2..83b4cece2f34 100644
--- a/crypto/openssh/ChangeLog
+++ b/crypto/openssh/ChangeLog
@@ -1,3 +1,149 @@
+commit 2d8a388de215d9959d72bb11f03e07a6eb2e4614
+Author: Damien Miller <djm@mindrot.org>
+Date:   Fri Oct 10 13:37:07 2025 +1100
+
+    depend
+
+commit 1d2676f4ffae35e2db37a35c385efaf2932cd639
+Author: Damien Miller <djm@mindrot.org>
+Date:   Thu Oct 9 14:53:04 2025 +1100
+
+    update versions
+
+commit ecd65a492bd0ed3a44a1c07428107b2e148bfee4
+Author: djm@openbsd.org <djm@openbsd.org>
+Date:   Wed Oct 8 00:32:52 2025 +0000
+
+    upstream: openssh-10.2
+    
+    The only change since 10.1 is the channels.c fix
+    
+    OpenBSD-Commit-ID: 5eebeb0db14c694efd4ee96b5f16112e3e5d5ba9
+
+commit ea9af2921cb6af8e65341531db3a7351917f0a92
+Author: djm@openbsd.org <djm@openbsd.org>
+Date:   Wed Oct 8 21:02:16 2025 +0000
+
+    upstream: fix crash at exit (visible via ssh-keygen -D) when
+    
+    multiple keys loaded. ok markus deraadt dtucker
+    
+    OpenBSD-Commit-ID: baa9763ec69d162108dafd962792ec5610ff45c9
+
+commit e49013576074ccd2d7ae75fb824170c739ce97a1
+Author: Damien Miller <djm@mindrot.org>
+Date:   Thu Oct 9 10:07:40 2025 +1100
+
+    link ssh-keygen directly against ssh-pkcs11.c
+    
+    Matches what OpenBSD does and fixes ssh-keygen regression in
+    certifying keys using a CA key hosted via ssh-agent (bz3877)
+
+commit 684f2ceff8c0eeb775e8653cf32609f8fbfe07b1
+Author: Damien Miller <djm@mindrot.org>
+Date:   Thu Oct 9 13:10:27 2025 +1100
+
+    some fixes to p11_setup
+    
+    1. Use the ssh-keygen under test and not the one in $PATH
+    2. Include a test PKCS#11 operation to ensure that the P11 stack is
+       working correctly.
+    
+    Previously, it was possible for p11_setup to return success on
+    configurations with PKCS#11 support disabled.
+
+commit af17ae64a5cfee42334883d2802f40f779131740
+Author: Damien Miller <djm@mindrot.org>
+Date:   Thu Oct 9 13:12:15 2025 +1100
+
+    complete PKCS#11 stubs and move to ssh-pkcs11.c
+    
+    Should unbreak --disable-pkcs11 builds
+
+commit bcf7c05a473f92a35f4f3b561fd7a1e339e0a30f
+Author: Darren Tucker <dtucker@dtucker.net>
+Date:   Wed Oct 8 11:26:52 2025 +1100
+
+    Fix header name and move return outside of ifdef.
+    
+    Fixes from Mike Frysinger via Github PR#597.
+
+commit b937061fe4922caced7b91442b3233c0bd763492
+Author: Darren Tucker <dtucker@dtucker.net>
+Date:   Tue Oct 7 21:10:33 2025 +1100
+
+    Check HAVE_MMAP too now that configure sets it.
+
+commit 8d57083c062f03098c9f767ec8d6278dc549a2f6
+Author: Darren Tucker <dtucker@dtucker.net>
+Date:   Tue Oct 7 21:07:05 2025 +1100
+
+    Use calloc for sshkeys if mmap is not supported.
+    
+    Based on Github PR#597 from Mike Frysinger, any bugs added by me.
+
+commit c97b931bffa481c72ff4bfddd9d59a2110899289
+Author: Darren Tucker <dtucker@dtucker.net>
+Date:   Tue Oct 7 20:25:07 2025 +1100
+
+    Add fcntl.h to includes.
+    
+    From FreeBSD via bz#3874: "This was previously included due to nested
+    includes in Heimdal's headers.  Without this, the build fails with an
+    error due to redefining AT_FDCWD."
+
+commit 8aa13832315e52c4404c993a59c6139b44ac6114
+Author: Daan De Meyer <daan.j.demeyer@gmail.com>
+Date:   Mon Mar 20 20:22:14 2023 +0100
+
+    Only set PAM_RHOST if the remote host is not "UNKNOWN"
+    
+    When using sshd's -i option with stdio that is not a AF_INET/AF_INET6
+    socket, auth_get_canonical_hostname() returns "UNKNOWN" which is then
+    set as the value of PAM_RHOST, causing pam to try to do a reverse DNS
+    query of "UNKNOWN", which times out multiple times, causing a
+    substantial slowdown when logging in.
+    
+    To fix this, let's only set PAM_RHOST if the hostname is not "UNKNOWN".
+
+commit 0bd6649ea80ead0cd6404dbc25b64937421b556e
+Author: Darren Tucker <dtucker@dtucker.net>
+Date:   Tue Oct 7 20:10:56 2025 +1100
+
+    Don't copy native host keys for hostbased test.
+    
+    Some github runners (notably macos-14) seem to have host keys where
+    public and private do not match, so generate our own keys for testing
+    purposes.
+
+commit 33b63718d40ccc555b8c7a24331a3790b2efc6c5
+Author: Darren Tucker <dtucker@dtucker.net>
+Date:   Tue Oct 7 20:10:07 2025 +1100
+
+    Add 10.1 branch to ci-status page.
+
+commit 52411f15353257e9ec883fc044b7a56b6fca242d
+Author: Darren Tucker <dtucker@dtucker.net>
+Date:   Tue Oct 7 20:04:40 2025 +1100
+
+    Add clock_gettime compat shim.
+    
+    This fixes the build on macOS prior to 10.12 Sierra, since it does not
+    have it.  Found and tested by Sevan Janiyan.
+
+commit beae06f56e0d0a66ca535896149d5fb0b2e8a1b4
+Author: djm@openbsd.org <djm@openbsd.org>
+Date:   Tue Oct 7 08:02:32 2025 +0000
+
+    upstream: don't reuse c->isatty for signalling that the remote channel
+    
+    has a tty attached as this causes side effects, e.g. in channel_handle_rfd().
+    bz3872
+    
+    ok markus@
+    
+    OpenBSD-Commit-ID: 4cd8a9f641498ca6089442e59bad0fd3dcbe85f8
+
 commit 476bab6259d5a6ea0402ec79bc47ed61e2c15e86
 Author: Damien Miller <djm@mindrot.org>
 Date:   Mon Oct 6 12:52:25 2025 +1100
@@ -9292,40 +9438,3 @@ Date:   Tue Oct 10 03:57:45 2023 +0000
     OpenSSH promises not to use (comment change only)
     
     OpenBSD-Commit-ID: e61795b453d4892d2c99ce1039112c4a00250e03
-
-commit 90b0d73d63a706e85f6431f05a62d2ce1b476472
-Author: djm@openbsd.org <djm@openbsd.org>
-Date:   Fri Oct 6 03:32:15 2023 +0000
-
-    upstream: typo in error message
-    
-    OpenBSD-Regress-ID: 6a8edf0dc39941298e3780b147b10c0a600b4fee
-
-commit e84517f51532ec913d8fb01a8aab7307134774bb
-Author: djm@openbsd.org <djm@openbsd.org>
-Date:   Fri Oct 6 03:25:14 2023 +0000
-
-    upstream: Perform the softhsm2 setup as discrete steps rather than
-    
-    as a long shell pipeline. Makes it easier to figure out what has happened
-    when it breaks.
-    
-    OpenBSD-Regress-ID: b3f1292115fed65765d0a95414df16e27772d81c
-
-commit cb54becff4d776238e0e9072943ba0872260535d
-Author: claudio@openbsd.org <claudio@openbsd.org>
-Date:   Sun Sep 24 08:14:13 2023 +0000
-
-    upstream: REGRESS_FAIL_EARLY defaults to yes now. So no need to
-    
-    overload the value here anymore. OK tb@ bluhm@
-    
-    OpenBSD-Regress-ID: f063330f1bebbcd373100afccebc91a965b14496
-
-commit f01f5137ceba65baf34ceac5a298c12ac01b1fef
-Author: jmc@openbsd.org <jmc@openbsd.org>
-Date:   Wed Oct 4 05:42:10 2023 +0000
-
-    upstream: spelling fix;
-    
-    OpenBSD-Commit-ID: 493f95121567e5ab0d9dd1150f873b5535ca0195
diff --git a/crypto/openssh/Makefile.in b/crypto/openssh/Makefile.in
index 760fbaa5b997..ba17a79f0d3d 100644
--- a/crypto/openssh/Makefile.in
+++ b/crypto/openssh/Makefile.in
@@ -158,7 +158,7 @@ SSHADD_OBJS=	ssh-add.o $(P11OBJS) $(SKOBJS)
 
 SSHAGENT_OBJS=	ssh-agent.o $(P11OBJS) $(SKOBJS)
 
-SSHKEYGEN_OBJS=	ssh-keygen.o sshsig.o $(P11OBJS) $(SKOBJS)
+SSHKEYGEN_OBJS=	ssh-keygen.o sshsig.o ssh-pkcs11.o $(SKOBJS)
 
 SSHKEYSIGN_OBJS=ssh-keysign.o readconf.o uidswap.o $(P11OBJS) $(SKOBJS)
 
diff --git a/crypto/openssh/README b/crypto/openssh/README
index e19b021e4fbc..41ecba193597 100644
--- a/crypto/openssh/README
+++ b/crypto/openssh/README
@@ -1,4 +1,4 @@
-See https://www.openssh.com/releasenotes.html#10.1p1 for the release
+See https://www.openssh.com/releasenotes.html#10.2p1 for the release
 notes.
 
 Please read https://www.openssh.com/report.html for bug reporting
diff --git a/crypto/openssh/auth-pam.c b/crypto/openssh/auth-pam.c
index 806a7ecf3c25..a4d26e4a5faa 100644
--- a/crypto/openssh/auth-pam.c
+++ b/crypto/openssh/auth-pam.c
@@ -759,7 +759,7 @@ sshpam_init(struct ssh *ssh, Authctxt *authctxt)
 		sshpam_laddr = get_local_ipaddr(
 		    ssh_packet_get_connection_in(ssh));
 	}
-	if (sshpam_rhost != NULL) {
+	if (sshpam_rhost != NULL && strcmp(sshpam_rhost, "UNKNOWN") != 0) {
 		debug("PAM: setting PAM_RHOST to \"%s\"", sshpam_rhost);
 		sshpam_err = pam_set_item(sshpam_handle, PAM_RHOST,
 		    sshpam_rhost);
diff --git a/crypto/openssh/channels.c b/crypto/openssh/channels.c
index f1d7bcf345b1..80014ff341fa 100644
--- a/crypto/openssh/channels.c
+++ b/crypto/openssh/channels.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.c,v 1.451 2025/09/25 06:33:19 djm Exp $ */
+/* $OpenBSD: channels.c,v 1.452 2025/10/07 08:02:32 djm Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -362,7 +362,7 @@ channel_classify(struct ssh *ssh, Channel *c)
 {
 	struct ssh_channels *sc = ssh->chanctxt;
 	const char *type = c->xctype == NULL ? c->ctype : c->xctype;
-	const char *classifier = c->isatty ?
+	const char *classifier = (c->isatty || c->remote_has_tty) ?
 	    sc->bulk_classifier_tty : sc->bulk_classifier_notty;
 
 	c->bulk = type != NULL && match_pattern_list(type, classifier, 0) == 1;
@@ -566,7 +566,7 @@ channel_new(struct ssh *ssh, char *ctype, int type, int rfd, int wfd, int efd,
 void
 channel_set_tty(struct ssh *ssh, Channel *c)
 {
-	c->isatty = 1;
+	c->remote_has_tty = 1;
 	channel_classify(ssh, c);
 }
 
@@ -1078,7 +1078,8 @@ channel_format_status(const Channel *c)
 	    c->rfd, c->wfd, c->efd, c->sock, c->ctl_chan,
 	    c->have_ctl_child_id ? "c" : "nc", c->ctl_child_id,
 	    c->io_want, c->io_ready,
-	    c->isatty ? "T" : "", c->bulk ? "B" : "I");
+	    c->isatty ? "T" : (c->remote_has_tty ? "RT" : ""),
+	    c->bulk ? "B" : "I");
 	return ret;
 }
 
diff --git a/crypto/openssh/channels.h b/crypto/openssh/channels.h
index df7c7f364d22..7456541f8ce3 100644
--- a/crypto/openssh/channels.h
+++ b/crypto/openssh/channels.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.h,v 1.161 2025/09/25 06:33:19 djm Exp $ */
+/* $OpenBSD: channels.h,v 1.162 2025/10/07 08:02:32 djm Exp $ */
 
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -145,6 +145,7 @@ struct Channel {
 	int     ctl_chan;	/* control channel (multiplexed connections) */
 	uint32_t ctl_child_id;	/* child session for mux controllers */
 	int	have_ctl_child_id;/* non-zero if ctl_child_id is valid */
+	int     remote_has_tty;	/* remote side has a tty */
 	int     isatty;		/* rfd is a tty */
 #ifdef _AIX
 	int     wfd_isatty;	/* wfd is a tty */
diff --git a/crypto/openssh/config.h b/crypto/openssh/config.h
index 23d24fadf6cd..b7f432596b55 100644
--- a/crypto/openssh/config.h
+++ b/crypto/openssh/config.h
@@ -995,6 +995,9 @@
 /* Define to 1 if you have the 'mkdtemp' function. */
 #define HAVE_MKDTEMP 1
 
+/* Define to 1 if you have the 'mmap' function. */
+#define HAVE_MMAP 1
+
 /* define if you have mode_t data type */
 #define HAVE_MODE_T 1
 
@@ -1145,7 +1148,7 @@
 #define HAVE_REALPATH 1
 
 /* Define to 1 if you have the 'recallocarray' function. */
-/* #undef HAVE_RECALLOCARRAY */
+#define HAVE_RECALLOCARRAY 1
 
 /* Define to 1 if you have the 'recvmsg' function. */
 #define HAVE_RECVMSG 1
diff --git a/crypto/openssh/configure.ac b/crypto/openssh/configure.ac
index 287fbfbefdd9..0c1b447db87e 100644
--- a/crypto/openssh/configure.ac
+++ b/crypto/openssh/configure.ac
@@ -536,6 +536,7 @@ AC_CHECK_HEADERS([ \
     nlist.h \
     poll.h \
     stdint.h \
+    sys/mman.h \
     sys/stat.h \
     sys/time.h \
     sys/un.h \
@@ -2159,6 +2160,7 @@ AC_CHECK_FUNCS([ \
 	memmove \
 	memset_s \
 	mkdtemp \
+	mmap \
 	ngetaddrinfo \
 	nlist \
 	nsleep \
diff --git a/crypto/openssh/contrib/redhat/openssh.spec b/crypto/openssh/contrib/redhat/openssh.spec
index a8fe2ecd0620..9a84728556de 100644
--- a/crypto/openssh/contrib/redhat/openssh.spec
+++ b/crypto/openssh/contrib/redhat/openssh.spec
@@ -1,4 +1,4 @@
-%global ver 10.1p1
+%global ver 10.2p1
 %global rel 1%{?dist}
 
 # OpenSSH privilege separation requires a user & group ID
diff --git a/crypto/openssh/contrib/suse/openssh.spec b/crypto/openssh/contrib/suse/openssh.spec
index 63ea57064d10..46514234dedb 100644
--- a/crypto/openssh/contrib/suse/openssh.spec
+++ b/crypto/openssh/contrib/suse/openssh.spec
@@ -13,7 +13,7 @@
 
 Summary:	OpenSSH, a free Secure Shell (SSH) protocol implementation
 Name:		openssh
-Version:	10.1p1
+Version:	10.2p1
 URL:		https://www.openssh.com/
 Release:	1
 Source0:	openssh-%{version}.tar.gz
diff --git a/crypto/openssh/openbsd-compat/arc4random.h b/crypto/openssh/openbsd-compat/arc4random.h
index af2d5c172a28..8f6842874b29 100644
--- a/crypto/openssh/openbsd-compat/arc4random.h
+++ b/crypto/openssh/openbsd-compat/arc4random.h
@@ -65,7 +65,7 @@ _rs_forkdetect(void)
 static inline int
 _rs_allocate(struct _rs **rsp, struct _rsx **rsxp)
 {
-#if defined(MAP_ANON) && defined(MAP_PRIVATE)
+#if defined(HAVE_MMAP) && defined(MAP_ANON) && defined(MAP_PRIVATE)
 	if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE,
 	    MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED)
 		return (-1);
@@ -84,7 +84,7 @@ _rs_allocate(struct _rs **rsp, struct _rsx **rsxp)
 		*rsp = NULL;
 		return (-1);
 	}
-#endif
+#endif /* HAVE_MMAP et al */
 
 	_ARC4_ATFORK(_rs_forkhandler);
 	return (0);
diff --git a/crypto/openssh/openbsd-compat/bsd-misc.c b/crypto/openssh/openbsd-compat/bsd-misc.c
index 983cd3fe6216..2c196ec23eee 100644
--- a/crypto/openssh/openbsd-compat/bsd-misc.c
+++ b/crypto/openssh/openbsd-compat/bsd-misc.c
@@ -494,6 +494,30 @@ localtime_r(const time_t *timep, struct tm *result)
 }
 #endif
 
+#ifndef HAVE_CLOCK_GETTIME
+int
+clock_gettime(clockid_t clockid, struct timespec *ts)
+{
+	struct timeval tv;
+
+	if (clockid != CLOCK_REALTIME) {
+		errno = ENOSYS;
+		return -1;
+	}
+	if (ts == NULL) {
+		errno = EFAULT;
+		return -1;
+	}
+
+	if (gettimeofday(&tv, NULL) == -1)
+		return -1;
+
+	ts->tv_sec = tv.tv_sec;
+	ts->tv_nsec = (long)tv.tv_usec * 1000;
+	return 0;
+}
+#endif
+
 #ifdef ASAN_OPTIONS
 const char *__asan_default_options(void) {
 	return ASAN_OPTIONS;
diff --git a/crypto/openssh/openbsd-compat/bsd-misc.h b/crypto/openssh/openbsd-compat/bsd-misc.h
index 2ad89cd83b59..8495f471c285 100644
--- a/crypto/openssh/openbsd-compat/bsd-misc.h
+++ b/crypto/openssh/openbsd-compat/bsd-misc.h
@@ -202,6 +202,14 @@ int flock(int, int);
 struct tm *localtime_r(const time_t *, struct tm *);
 #endif
 
+#ifndef HAVE_CLOCK_GETTIME
+typedef int clockid_t;
+#ifndef CLOCK_REALTIME
+# define CLOCK_REALTIME	0
+#endif
+int clock_gettime(clockid_t, struct timespec *);
+#endif
+
 #ifndef HAVE_REALPATH
 #define realpath(x, y)	(sftp_realpath((x), (y)))
 #endif
diff --git a/crypto/openssh/regress/test-exec.sh b/crypto/openssh/regress/test-exec.sh
index c5270042e6a9..34fb58fda0f8 100644
--- a/crypto/openssh/regress/test-exec.sh
+++ b/crypto/openssh/regress/test-exec.sh
@@ -964,7 +964,7 @@ EOF
 	softhsm2-util --slot "$slot" --label 01 --id 01 --pin "$TEST_SSH_PIN" \
 	    --import $RSAP8 >/dev/null || fatal "softhsm import RSA fail"
 	chmod 600 $RSA
-	ssh-keygen -y -f $RSA > ${RSA}.pub
+	${SSHKEYGEN} -y -f $RSA > ${RSA}.pub
 	# ECDSA key
 	ECPARAM=${SSH_SOFTHSM_DIR}/ECPARAM
 	EC=${SSH_SOFTHSM_DIR}/EC
@@ -978,7 +978,7 @@ EOF
 	softhsm2-util --slot "$slot" --label 02 --id 02 --pin "$TEST_SSH_PIN" \
 	    --import $ECP8 >/dev/null || fatal "softhsm import EC fail"
 	chmod 600 $EC
-	ssh-keygen -y -f $EC > ${EC}.pub
+	${SSHKEYGEN} -y -f $EC > ${EC}.pub
 	# Ed25519 key
 	ED25519=${SSH_SOFTHSM_DIR}/ED25519
 	ED25519P8=${SSH_SOFTHSM_DIR}/ED25519P8
@@ -990,7 +990,7 @@ EOF
 	    --import $ED25519P8 >/dev/null || \
 		fatal "softhsm import ed25519 fail"
 	chmod 600 $ED25519
-	ssh-keygen -y -f $ED25519 > ${ED25519}.pub
+	${SSHKEYGEN} -y -f $ED25519 > ${ED25519}.pub
 	# Prepare askpass script to load PIN.
 	PIN_SH=$SSH_SOFTHSM_DIR/pin.sh
 	cat > $PIN_SH << EOF
@@ -999,7 +999,11 @@ echo "${TEST_SSH_PIN}"
 EOF
 	chmod 0700 "$PIN_SH"
 	PKCS11_OK=yes
-	return 0
+	if env SSH_ASKPASS="$PIN_SH" SSH_ASKPASS_REQUIRE=force \
+	    ${SSHKEYGEN} -D ${TEST_SSH_PKCS11} >/dev/null 2>&1 ; then
+		return 0
+	fi
+	return 1
 }
 
 # Peforms ssh-add with the right token PIN.
diff --git a/crypto/openssh/ssh-pkcs11-helper.c b/crypto/openssh/ssh-pkcs11-helper.c
index 7ed4bdb76841..aeb5b7a8a924 100644
--- a/crypto/openssh/ssh-pkcs11-helper.c
+++ b/crypto/openssh/ssh-pkcs11-helper.c
@@ -310,22 +310,6 @@ main(int argc, char **argv)
 	}
 }
 #else /* ENABLE_PKCS11 */
-/* stubs */
-int
-pkcs11_sign(struct sshkey *key,
-    u_char **sigp, size_t *lenp,
-    const u_char *data, size_t datalen,
-    const char *alg, const char *sk_provider,
-    const char *sk_pin, u_int compat)
-{
-	return SSH_ERR_INTERNAL_ERROR;
-}
-
-void
-pkcs11_key_free(struct sshkey *key)
-{
-}
-
 int
 main(int argc, char **argv)
 {
diff --git a/crypto/openssh/ssh-pkcs11.c b/crypto/openssh/ssh-pkcs11.c
index 0a94fcd97adb..c8817947395a 100644
--- a/crypto/openssh/ssh-pkcs11.c
+++ b/crypto/openssh/ssh-pkcs11.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-pkcs11.c,v 1.72 2025/10/03 00:08:02 djm Exp $ */
+/* $OpenBSD: ssh-pkcs11.c,v 1.73 2025/10/08 21:02:16 djm Exp $ */
 /*
  * Copyright (c) 2010 Markus Friedl.  All rights reserved.
  * Copyright (c) 2014 Pedro Martelletto. All rights reserved.
@@ -2029,8 +2029,10 @@ pkcs11_terminate(void)
 
 	debug3_f("called");
 
-	while ((k11 = TAILQ_FIRST(&pkcs11_keys)) != NULL)
+	while ((k11 = TAILQ_FIRST(&pkcs11_keys)) != NULL) {
+		TAILQ_REMOVE(&pkcs11_keys, k11, next);
 		pkcs11_k11_free(k11);
+	}
 	while ((p = TAILQ_FIRST(&pkcs11_providers)) != NULL) {
 		TAILQ_REMOVE(&pkcs11_providers, p, next);
 		pkcs11_provider_finalize(p);
@@ -2287,11 +2289,13 @@ out:
 
 #include "log.h"
 #include "sshkey.h"
+#include "ssherr.h"
+#include "ssh-pkcs11.h"
 
 int
 pkcs11_init(int interactive)
 {
-	error_f("dlopen() not supported");
+	error_f("PKCS#11 not supported");
 	return (-1);
 }
 
@@ -2299,13 +2303,30 @@ int
 pkcs11_add_provider(char *provider_id, char *pin, struct sshkey ***keyp,
     char ***labelsp)
 {
-	error_f("dlopen() not supported");
+	error_f("PKCS#11 not supported");
 	return (-1);
 }
 
+void
+pkcs11_key_free(struct sshkey *key)
+{
+	error_f("PKCS#11 not supported");
+}
+
+int
+pkcs11_sign(struct sshkey *key,
+    u_char **sigp, size_t *lenp,
+    const u_char *data, size_t datalen,
+    const char *alg, const char *sk_provider,
+    const char *sk_pin, u_int compat)
+{
+	error_f("PKCS#11 not supported");
+	return SSH_ERR_FEATURE_UNSUPPORTED;
+}
+
 void
 pkcs11_terminate(void)
 {
-	error_f("dlopen() not supported");
+	error_f("PKCS#11 not supported");
 }
 #endif /* ENABLE_PKCS11 */
diff --git a/crypto/openssh/ssh_namespace.h b/crypto/openssh/ssh_namespace.h
index d11f4ee6ccb1..c91b050c7867 100644
--- a/crypto/openssh/ssh_namespace.h
+++ b/crypto/openssh/ssh_namespace.h
@@ -535,7 +535,6 @@
 #define qfileout				Fssh_qfileout
 #define read_mux				Fssh_read_mux
 #define read_passphrase				Fssh_read_passphrase
-#define recallocarray				Fssh_recallocarray
 #define record_hostkey				Fssh_record_hostkey
 #define replacearg				Fssh_replacearg
 #define revoke_blob				Fssh_revoke_blob
diff --git a/crypto/openssh/sshkey.c b/crypto/openssh/sshkey.c
index e17e929e0258..afd7822c4f41 100644
--- a/crypto/openssh/sshkey.c
+++ b/crypto/openssh/sshkey.c
@@ -723,6 +723,7 @@ sshkey_sk_cleanup(struct sshkey *k)
 static int
 sshkey_prekey_alloc(u_char **prekeyp, size_t len)
 {
+#if defined(HAVE_MMAP) && defined(MAP_ANON) && defined(MAP_PRIVATE)
 	u_char *prekey;
 
 	*prekeyp = NULL;
@@ -733,15 +734,22 @@ sshkey_prekey_alloc(u_char **prekeyp, size_t len)
 	(void)madvise(prekey, len, MADV_DONTDUMP);
 #endif
 	*prekeyp = prekey;
+#else
+	*prekeyp = calloc(1, len);
+#endif /* HAVE_MMAP et al */
 	return 0;
 }
 
 static void
 sshkey_prekey_free(void *prekey, size_t len)
 {
+#if defined(HAVE_MMAP) && defined(MAP_ANON) && defined(MAP_PRIVATE)
 	if (prekey == NULL)
 		return;
 	munmap(prekey, len);
+#else
+	free(prekey);
+#endif /* HAVE_MMAP et al */
 }
 
 static void
diff --git a/crypto/openssh/version.h b/crypto/openssh/version.h
index e2c35c3dfb83..f258b035582f 100644
--- a/crypto/openssh/version.h
+++ b/crypto/openssh/version.h
@@ -1,6 +1,6 @@
-/* $OpenBSD: version.h,v 1.106 2025/10/06 01:45:22 djm Exp $ */
+/* $OpenBSD: version.h,v 1.107 2025/10/08 00:32:52 djm Exp $ */
 
-#define SSH_VERSION	"OpenSSH_10.1"
+#define SSH_VERSION	"OpenSSH_10.2"
 
 #define SSH_PORTABLE	"p1"
 #define SSH_RELEASE	SSH_VERSION SSH_PORTABLE

From nobody Mon Oct  5 13:58:21 2026
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 4hz1FC0DvBz6jtj3
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 13:58:23 +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 4hz1FB4CKWz4vQ7
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:58:22 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791208702;
	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=Fbn5ZyzsAFD0tUwnlpPWKlp/7sSHBCGoE/Y/tAZ/QeQ=;
	b=td4chJQ6nca/Ae9i/ps/tGHjnM5JNTTlI2oBRg9hE5h3KumB+8XinZUWQOdFh1OF0einAb
	5jcy2X55XHEWoluqs3+nbQZyJWqDRkL+jFuCUi4+YlXmcyq1ErknbedEU0ONm2xX9NpeT1
	+i5kHBK54H3H6QnbeGyWaPIznBUMwobl1l1fYRAzyF+0UZgc2tSxcd6vDSlt7l1sgKA1lU
	ur97qd0CLx6Rn+kAB2T+C98prqeJUPDMXo9AAF3R5GDm8mOi4yayd5lXGZhXXbM0NoBcWi
	stpyhigTxxqoLc6wKCKsFHH3ng1Paks/fAMlVrmRTga8JCTyuAETTK5CMrM6ag==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791208702;
	b=etkQhMNqh+v5wWRPDV21F2Sjp2CaVo1OhNRoKUhrjFmNpopnW+qCMGXooAALR+UjD0X5Q1
	52FSoVYnVp29ZvZEQ98oYI0aLt5CxKRbqVdQhBquJ/K6NM9iaYZpqG/vA1uA1RlumxHBJd
	/M97n+bgfjh3hK7TNlKRrch/grWgxsmiacWY37KAcr5L1pXBtdHJmoG8wfaoMZZo30B4XT
	wAkWM+jD/PW4oU7zimp8pUS4TsrHDMsvBJ8K0YT3rddmmrqlfZmqrEqIMF9uQnXwP5Tnqi
	zUQzUkfOiEKj5czwcrj82QCaR7F/aaz5Bolf3NOsC+Kc9NnBplgm14GznhetSQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791208702;
	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=Fbn5ZyzsAFD0tUwnlpPWKlp/7sSHBCGoE/Y/tAZ/QeQ=;
	b=TmlMRRkubyWhn4OMvwB9QeZ1/XTag63gSJ19KnTEyn1RVqnyMiRBvSmuRCg/tCfg1fSQ7n
	E5zs9OteXK9XYmTNiDGNaiuDsVk9lQG0cp0nLqEsRxlwPLoxKvqLGGcYbfOmqww3nP8gYX
	RCPrCTCbyP8OTJPymvXNGTdQGdFGyTJEUrsOc+kLMCqMzkbnFsuoBfykn9dFxoHRWBRhac
	xCjjGmCQ3BOmeIVFi8anNxjs56z8K/yXgZTcaC0mej3poU/Vaww/Nvcduot5i2oEEa5ff2
	f1MwHqgrBrdEXj3Fcitv82HnTb6iQzOEpFCYu1w7gtdStQnHsQgybTNGBs5rpg==
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 4hz1FB2Q9KzMKK
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 13:58:22 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 45490
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 13:58:21 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: f2b0910a9831 - stable/15 - OpenSSH: Update to 10.4p1
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: f2b0910a9831d09404558611d20364456549a96f
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 13:58:21 +0000
Message-Id: <6ac3acfd.45490.484eccfa@gitrepo.freebsd.org>

The branch stable/15 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=f2b0910a9831d09404558611d20364456549a96f

commit f2b0910a9831d09404558611d20364456549a96f
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2026-07-09 17:17:11 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-05 13:47:51 +0000

    OpenSSH: Update to 10.4p1
    
    Full release notes are available at
    https://www.openssh.com/txt/release-10.4
    
    Selected highlights from the release notes:
    
    Potentially-incompatible changes
    --------------------------------
    
     * sshd(8): configuration dump mode ("sshd -G") now writes directives
       in mixed case (e.g. "PubkeyAuthentication") whereas previously it
       emitted only lower-case names.
    
     * ssh(1), sshd(8): make the transport protocol stricter by
       disconnecting if the peer sends non-KEX messages during a post-
       authentication key re-exchange. Previously a malicious peer could
       continue sending non-key exchange messages without penalty. These
       would be buffered, causing memory to be wasted up until the
       connection terminated or the server/client hit a memory limit.
       Implementations that do not restrict messages sent during key
       exchange as per RFC4253 section 7.1 may be disconnected.
       Reported by Marko Jevtic.
    
    Changes since OpenSSH 10.3
    ==========================
    
    This release contains a number of security fixes as well as general
    bugfixes and a couple of new features.
    
    Security
    ========
    
     * sftp(1): when downloading files on the command-line using
       "sftp host:/path .", a malicious server could cause the file to
       be downloaded to an unexpected location. This issue was identified
       by the Swival Security Scanner.
    
     * scp(1): when copying files between two remote destinations, do
       not allow a malicious server to write files to the parent
       directory of the intended target directory.  This issue was
       identified by the Swival Security Scanner.
    
     * sshd(8): DisableForwarding=yes didn't override PermitTunnel=yes
       as it was documented to do. Note that PermitTunnel is not enabled
       by default. Reported independently by Huzaifa Sidhpurwala of
       Redhat and Marko Jevtic.
    
     * sshd(8): avoid a potential pre-authentication denial of service
       when GSSAPIAuthentication was enabled (this feature is off by
       default). This was not mitigated by MaxAuthTries, but would be
       penalised by PerSourcePenalties. This was reported by Manfred
       Kaiser of the milCERT AT (Austrian Ministry of Defence).
    
     * sshd(8): fix a number of cases where the minimum authentication
       delay was not being enforced. Reported by the Orange Cyberdefense
       Vulnerability Team.
    
     * ssh(1): fix a possible client-side use-after-free if the server
       changes its host key during a key reexchange. This was reported by
       Zhenpeng (Leo) Lin of Depthfirst.
    
    New features
    ------------
    
     * All: add experimental support for a composite post-quantum
       signature scheme that combines ML-DSA 44 and Ed25519 as specified
       in draft-miller-sshm-mldsa44-ed25519-composite-sigs.
    
       This scheme is not enabled by default. To use it, you'll need
       to add it to HostKeyAlgorithms, PubkeyAcceptedAlgorithms, etc.
       Keys may be generated using "ssh-keygen -t mldsa44-ed25519".
    
    Bugfixes
    --------
    
     * sshd(8): avoid sending observably different messages for valid vs
       invalid users in GSSAPIAuthentication (disabled by default).
    
     * ssh(1), sshd(8): fix several bugs that incorrectly
       classified bulk traffic as interactive. bz3972, bz3958
    
     * ssh-keygen(1), ssh-add(1): skip unsupported key types when
       downloading resident keys from a FIDO token. Previously, downloads
       would abort when one was encountered. GHPR657
    
    Sponsored by:   The FreeBSD Foundation
    Differential Revision: https://reviews.freebsd.org/D58083
    
    (cherry picked from commit bb5c77e9d281d6def6835d48249898764bc6a5fe)
    (cherry picked from commit f7c08d8dd810d031e5b2e53cbaa102a9105ada3f)
    (cherry picked from commit 5792a639ab950fb7e6add09352e1cd41f1809bc2)
---
 crypto/openssh/.depend                             |     4 +-
 crypto/openssh/.git_allowed_signers.asc            |    26 +-
 crypto/openssh/.github/ci-status.md                |    12 +-
 crypto/openssh/.github/configs                     |     7 +-
 crypto/openssh/.github/install_dropbear.sh         |    35 +
 crypto/openssh/.github/install_libcrypto.sh        |     2 +-
 crypto/openssh/.github/pin_actions.sh              |    35 +
 crypto/openssh/.github/run_test.sh                 |    24 +-
 crypto/openssh/.github/setup_ci.sh                 |   167 +-
 crypto/openssh/.github/workflows/c-cpp.yml         |    42 +-
 crypto/openssh/.github/workflows/cifuzz.yml        |     6 +-
 crypto/openssh/.github/workflows/selfhosted.yml    |    10 +-
 crypto/openssh/.github/workflows/upstream.yml      |    20 +-
 crypto/openssh/.github/workflows/vm.yml            |   155 +-
 crypto/openssh/.skipped-commit-ids                 |     2 +
 crypto/openssh/ChangeLog                           | 14820 +++++-----
 crypto/openssh/Makefile.in                         |    42 +
 crypto/openssh/PROTOCOL.agent                      |     4 +-
 crypto/openssh/README                              |     2 +-
 crypto/openssh/README.privsep                      |   184 +-
 crypto/openssh/auth.h                              |     3 +-
 crypto/openssh/auth2-chall.c                       |     6 +-
 crypto/openssh/auth2-gss.c                         |    62 +-
 crypto/openssh/auth2.c                             |    12 +-
 crypto/openssh/authfd.c                            |     8 +-
 crypto/openssh/authfile.c                          |     9 +-
 crypto/openssh/chacha.c                            |     6 +-
 crypto/openssh/channels.c                          |    17 +-
 crypto/openssh/channels.h                          |     5 +-
 crypto/openssh/cipher.c                            |    44 +-
 crypto/openssh/cipher.h                            |     4 +-
 crypto/openssh/clientloop.c                        |    26 +-
 crypto/openssh/config.h                            |    13 +-
 crypto/openssh/configure.ac                        |    39 +-
 crypto/openssh/contrib/redhat/openssh.spec         |     2 +-
 crypto/openssh/contrib/suse/openssh.spec           |     2 +-
 crypto/openssh/crypto_api.h                        |   127 +-
 crypto/openssh/defines.h                           |    16 +-
 crypto/openssh/ed25519-openssl.c                   |    38 +-
 crypto/openssh/ed25519.c                           |    36 +-
 crypto/openssh/ed25519.sh                          |    74 +-
 crypto/openssh/kex.c                               |     9 +-
 crypto/openssh/kex.h                               |     3 +-
 crypto/openssh/kexmlkem768x25519.c                 |   100 +-
 crypto/openssh/libcrux-mlkem-mldsa.c               |   430 +
 crypto/openssh/libcrux_internal.h                  | 27332 +++++++++++++++++++
 crypto/openssh/libcrux_mlkem768_sha3.h             | 11752 --------
 crypto/openssh/mac.c                               |     8 +-
 crypto/openssh/match.c                             |   137 +-
 crypto/openssh/misc.c                              |     8 +-
 crypto/openssh/mlkem768.sh                         |   219 -
 crypto/openssh/mlkem_mldsa.sh                      |   341 +
 crypto/openssh/moduli                              |  1124 +-
 crypto/openssh/monitor.c                           |    58 +-
 crypto/openssh/monitor_wrap.c                      |    84 +-
 crypto/openssh/monitor_wrap.h                      |     6 +-
 crypto/openssh/openbsd-compat/bsd-cygwin_util.c    |     6 +-
 crypto/openssh/openbsd-compat/bsd-misc.c           |     2 +-
 crypto/openssh/openbsd-compat/fake-rfc2553.c       |     3 +-
 crypto/openssh/openbsd-compat/fmt_scaled.c         |    39 +-
 .../openssh/openbsd-compat/getrrsetbyname-ldns.c   |     3 +-
 crypto/openssh/openbsd-compat/getrrsetbyname.c     |    23 +-
 crypto/openssh/openbsd-compat/vis.c                |     2 +
 crypto/openssh/packet.c                            |    35 +-
 crypto/openssh/pathnames.h                         |     4 +-
 crypto/openssh/readconf.c                          |     6 +-
 crypto/openssh/regress/Makefile                    |     3 +
 crypto/openssh/regress/addrmatch.sh                |     4 +-
 crypto/openssh/regress/agent.sh                    |    21 +-
 crypto/openssh/regress/cert-hostkey.sh             |    15 +-
 crypto/openssh/regress/cert-userkey.sh             |    16 +-
 crypto/openssh/regress/cfgmatch.sh                 |     4 +-
 crypto/openssh/regress/dropbear-kex.sh             |    10 +-
 crypto/openssh/regress/dropbear-server.sh          |   202 +-
 crypto/openssh/regress/hostkey-agent.sh            |     8 +-
 crypto/openssh/regress/kbdint.sh                   |     4 +-
 crypto/openssh/regress/keyscan.sh                  |     6 +-
 crypto/openssh/regress/keytype.sh                  |     8 +-
 crypto/openssh/regress/knownhosts-command.sh       |     5 +-
 .../ssh-verify-attestation.c                       |     4 +-
 crypto/openssh/regress/sshsig.sh                   |     8 +-
 crypto/openssh/regress/test-exec.sh                |     8 +
 crypto/openssh/regress/unittests/Makefile          |     4 +-
 crypto/openssh/regress/unittests/Makefile.inc      |     3 +-
 crypto/openssh/regress/unittests/authopt/Makefile  |     4 +-
 crypto/openssh/regress/unittests/crypto/Makefile   |    26 +
 .../regress/unittests/crypto/test_ed25519.c        |    99 +
 .../openssh/regress/unittests/crypto/test_mldsa.c  |   140 +
 .../regress/unittests/crypto/test_mldsa_eddsa.c    |   197 +
 .../openssh/regress/unittests/crypto/test_mlkem.c  |   164 +
 .../draft-ietf-lamps-pq-composite-sigs.json        |     8 +
 .../unittests/crypto/testdata/nistkats-44.json     |   802 +
 crypto/openssh/regress/unittests/crypto/tests.c    |   123 +
 crypto/openssh/regress/unittests/hostkeys/Makefile |     4 +-
 crypto/openssh/regress/unittests/kex/Makefile      |     3 +-
 crypto/openssh/regress/unittests/match/tests.c     |   202 +-
 crypto/openssh/regress/unittests/servconf/Makefile |    26 +
 crypto/openssh/regress/unittests/servconf/tests.c  |   364 +
 crypto/openssh/regress/unittests/sshkey/Makefile   |     4 +-
 .../openssh/regress/unittests/sshkey/mktestdata.sh |    22 +-
 .../openssh/regress/unittests/sshkey/test_file.c   |    67 +-
 .../openssh/regress/unittests/sshkey/test_fuzz.c   |    58 +-
 .../openssh/regress/unittests/sshkey/test_sshkey.c |   111 +-
 .../unittests/sshkey/testdata/mldsa44_ed25519_1    |    58 +
 .../sshkey/testdata/mldsa44_ed25519_1-cert.fp      |     1 +
 .../sshkey/testdata/mldsa44_ed25519_1-cert.pub     |     1 +
 .../unittests/sshkey/testdata/mldsa44_ed25519_1.fp |     1 +
 .../sshkey/testdata/mldsa44_ed25519_1.fp.bb        |     1 +
 .../sshkey/testdata/mldsa44_ed25519_1.pub          |     1 +
 .../unittests/sshkey/testdata/mldsa44_ed25519_1_pw |    59 +
 .../unittests/sshkey/testdata/mldsa44_ed25519_2    |    58 +
 .../unittests/sshkey/testdata/mldsa44_ed25519_2.fp |     1 +
 .../sshkey/testdata/mldsa44_ed25519_2.fp.bb        |     1 +
 .../sshkey/testdata/mldsa44_ed25519_2.pub          |     1 +
 crypto/openssh/regress/unittests/sshkey/tests.c    |     2 +-
 crypto/openssh/regress/unittests/sshsig/Makefile   |     4 +-
 .../openssh/regress/unittests/sshsig/mktestdata.sh |     9 +-
 .../unittests/sshsig/testdata/mldsa44-ed25519      |    58 +
 .../unittests/sshsig/testdata/mldsa44-ed25519.pub  |     1 +
 .../unittests/sshsig/testdata/mldsa44-ed25519.sig  |    78 +
 crypto/openssh/regress/unittests/sshsig/tests.c    |     9 +-
 .../regress/unittests/test_helper/test_helper.c    |    18 +-
 .../regress/unittests/test_helper/test_helper.h    |     4 +-
 crypto/openssh/sandbox-seccomp-filter.c            |    17 +-
 crypto/openssh/scp.c                               |     8 +-
 crypto/openssh/servconf.c                          |  2011 +-
 crypto/openssh/servconf.h                          |   483 +-
 crypto/openssh/serverloop.c                        |     4 +-
 crypto/openssh/session.c                           |    70 +-
 crypto/openssh/sftp-client.c                       |    16 +-
 crypto/openssh/sftp-server.8                       |    15 +-
 crypto/openssh/sftp-server.c                       |    43 +-
 crypto/openssh/sftp.c                              |    40 +-
 crypto/openssh/sk-usbhid.c                         |    31 +-
 crypto/openssh/ssh-add.c                           |    33 +-
 crypto/openssh/ssh-agent.1                         |     8 +-
 crypto/openssh/ssh-agent.c                         |    42 +-
 crypto/openssh/ssh-keygen.1                        |    16 +-
 crypto/openssh/ssh-keygen.c                        |    12 +-
 crypto/openssh/ssh-keyscan.1                       |    13 +-
 crypto/openssh/ssh-keyscan.c                       |    15 +-
 crypto/openssh/ssh-keysign.c                       |     3 +-
 crypto/openssh/ssh-mldsa-eddsa.c                   |   506 +
 crypto/openssh/ssh.1                               |     9 +-
 crypto/openssh/ssh.c                               |    32 +-
 crypto/openssh/ssh_config.5                        |    96 +-
 crypto/openssh/ssh_namespace.h                     |    64 +-
 crypto/openssh/sshbuf-io.c                         |     7 +-
 crypto/openssh/sshbuf.h                            |     3 +-
 crypto/openssh/sshconnect.c                        |    50 +-
 crypto/openssh/sshconnect.h                        |     9 +-
 crypto/openssh/sshconnect2.c                       |    25 +-
 crypto/openssh/sshd-auth.c                         |    60 +-
 crypto/openssh/sshd-session.c                      |     3 +-
 crypto/openssh/sshd.c                              |     6 +-
 crypto/openssh/sshd_config                         |     2 +-
 crypto/openssh/sshd_config.5                       |    14 +-
 crypto/openssh/ssherr-libcrypto.c                  |     4 +-
 crypto/openssh/ssherr.c                            |     4 +-
 crypto/openssh/ssherr.h                            |     4 +-
 crypto/openssh/sshkey.c                            |    22 +-
 crypto/openssh/sshkey.h                            |     7 +-
 crypto/openssh/version.h                           |     6 +-
 secure/lib/libssh/Makefile                         |     1 +
 164 files changed, 43376 insertions(+), 21443 deletions(-)

diff --git a/crypto/openssh/.depend b/crypto/openssh/.depend
index 134a986596a0..03e8c423d3ab 100644
--- a/crypto/openssh/.depend
+++ b/crypto/openssh/.depend
@@ -73,6 +73,7 @@ kexgexs.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compa
 kexmlkem768x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ssherr.h log.h
 kexsntrup761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h
 krl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h ssherr.h sshkey.h misc.h log.h digest.h bitmap.h utf8.h krl.h
+libcrux-mlkem-mldsa.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
 log.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h match.h
 loginrec.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h hostfile.h ssh.h loginrec.h log.h ssherr.h atomicio.h packet.h dispatch.h canohost.h auth.h auth-pam.h audit.h sshbuf.h misc.h
 logintest.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h loginrec.h
@@ -126,7 +127,7 @@ sk-usbhid.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-com
 sntrup761.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
 srclimit.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h addr.h canohost.h log.h ssherr.h misc.h srclimit.h xmalloc.h servconf.h match.h
 ssh-add.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h log.h ssherr.h sshkey.h sshbuf.h authfd.h authfile.h pathnames.h misc.h digest.h ssh-sk.h sk-api.h hostfile.h
-ssh-agent.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h ssh2.h sshbuf.h sshkey.h authfd.h log.h ssherr.h misc.h digest.h match.h msg.h pathnames.h ssh-pkcs11.h sk-api.h myproposal.h
+ssh-agent.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h ssh2.h sshbuf.h sshkey.h authfd.h log.h ssherr.h misc.h digest.h match.h msg.h pathnames.h ssh-pkcs11.h sk-api.h myproposal.h version.h
 ssh-ecdsa-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h sshbuf.h ssherr.h digest.h sshkey.h
 ssh-ecdsa.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
 ssh-ed25519-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ssherr.h sshbuf.h sshkey.h digest.h
@@ -136,6 +137,7 @@ ssh-keygen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-co
 ssh-keyscan.o: atomicio.h misc.h hostfile.h ssh_api.h ssh2.h dns.h addr.h
 ssh-keyscan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h kex.h mac.h crypto_api.h compat.h myproposal.h packet.h dispatch.h log.h ssherr.h
 ssh-keysign.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h sshkey.h ssh.h ssh2.h misc.h sshbuf.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h
+ssh-mldsa-eddsa.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
 ssh-pkcs11-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h pathnames.h xmalloc.h sshbuf.h log.h ssherr.h misc.h sshkey.h authfd.h atomicio.h ssh-pkcs11.h
 ssh-pkcs11-helper.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h log.h ssherr.h misc.h sshkey.h authfd.h ssh-pkcs11.h
 ssh-pkcs11.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/bsd-sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sshkey.h ssh-pkcs11.h
diff --git a/crypto/openssh/.git_allowed_signers.asc b/crypto/openssh/.git_allowed_signers.asc
index 1a8401b838a3..4d7269b1b485 100644
--- a/crypto/openssh/.git_allowed_signers.asc
+++ b/crypto/openssh/.git_allowed_signers.asc
@@ -1,16 +1,16 @@
 -----BEGIN PGP SIGNATURE-----
 
-iQIzBAABCgAdFiEEcWi5g4FaXu9ZpK39Kj9BTnNgYLoFAmYHnZ8ACgkQKj9BTnNg
-YLquuQ/6A8E6P2jcgn3wmbbCTXP7kmxoh3nmw/e6PC8CEua1512oT3GHOKVD5cGK
-cgYRObpWvjOjg7L1HRABftq7a9M2zfsGnY/WNe3/fbetfkyY8hG8c31vA1ePIOt2
-AjBLCWFblH0CtyH/MssoQ19JCLtXK/GmekB1Q0JzyOog7w/0r3CKuUnZ0juCYR1R
-4FBePl5l3nFSZEcFEdptGlNGeuolS5XBCqB9Y91TCzkVkH5eXUUW+shgjNhWCEhT
-pZvkxfhsmOEnwNofyPdgKVfDBVkHmvuC67EU395mJVN4c2NZ8pOztb9hOt3xr980
-q44I4kT2NpaApCx1dWIGhMy/37LJ8heI0W1B+ofTA5n34/RU8UXH3SCkj2AK6Ao5
-H2u8vbmuWKUCiECmrw35EeKGmtuK/bWJzx3KBP7fx5J9S3mWUgT4W4xlWNN9RWoU
-sSvH1ppie5ARINVaAWl5k44fk60ahTf80DbQBIOZBmQn7myZZka+yGcQbAiZZ1Gc
-0l8+Nf5Ao1ckmuyY5o8FyWdsyDeK3+MqjPn5Rr1CqbKCn2VnqrVWbI33Eyu8c96U
-bxVgU5H1BDhNjJC8UrT3LFPvJMO8p3a0IJ3eHydjk2jVOhOdBZmA0yoqUTrhPpXq
-ymIHESjDJR8TDe4TCfb46o9oEC3cdbDwgnzPqdg0n+0uIsJLYiU=
-=gl+l
+iQIzBAABCgAdFiEEcWi5g4FaXu9ZpK39Kj9BTnNgYLoFAmnevEAACgkQKj9BTnNg
+YLr72w//ay7JpFSfUF5h97Vi2T58fwkRO2aapXrK8f3mnzeelN9H09XBpRquFZCL
+o5S/8RSmVtRjCTXyo7GjwhaAF6+XyKiKgwvjTnY9EA4leCCoNdBJ2/77xlBZdPD4
+AuKPRQKpGjJi+P+2yB0ocgpT6MWXDlg0xkdLWaiQC4xpADUD9AlebUVHtCPOqXWb
+LgGampMjQu8usg9QX3x0oHpuMUot+wo3dTD2xjgWv03DmPK7wCUiA760GeEGibma
+jv3JT8JZnDtPk4J0PpoJecoJsMhH9Zoy55yi3d4y/SxBUSIBFs2qcw4tO3iixZwD
+mlZVW83KFhIlH6Q8GJtymrYrQ2Gw88wWZ6Oj3glzHCkrxUeO9MIbnTSzXekg6+O7
+qBxQC4xdlNtHFS+GvG3EZzztl8C4Qfmdl35bStQaVhWzygI5+o19yoeYi4lMTYQM
+CAH6ONeDFvm3SwlTJk41O/zXz7mO1vRpsn5QMCHt3KLBZkkMrSKl4C2r9iuq7MeY
+gx3mnPW6/yu1TzGUl5wtzeb6I2R1/zPK3ibhbGQyt4WggCio3D8xmcmhyxKL79fi
+Pb02QXRYplXrkR6Lf2HCRdJoNu3bodqelkeiAtgj0CLHlK355dtmya6txn4Ccoc1
++kH7vdHqPKJSrsMBZ/Qm+0dA9Kq4Qoib2tog9De09u5p8XQUdAY=
+=9i1L
 -----END PGP SIGNATURE-----
diff --git a/crypto/openssh/.github/ci-status.md b/crypto/openssh/.github/ci-status.md
index 00a1db0df76a..5d17f893761d 100644
--- a/crypto/openssh/.github/ci-status.md
+++ b/crypto/openssh/.github/ci-status.md
@@ -8,6 +8,11 @@ master :
 [![Coverity Status](https://scan.coverity.com/projects/21341/badge.svg)](https://scan.coverity.com/projects/openssh-portable)
 <br>
 
+10.3 :
+[![C/C++ CI](../../../actions/workflows/c-cpp.yml/badge.svg?branch=V_10_3)](../../../actions/workflows/c-cpp.yml?query=branch:V_10_3)
+[![VM CI](../../../actions/workflows/vm.yml/badge.svg?branch=V_10_3)](../../../actions/workflows/vm.yml?query=branch:V_10_3)
+[![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_10_3)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_10_3)
+
 10.2 :
 [![C/C++ CI](../../../actions/workflows/c-cpp.yml/badge.svg?branch=V_10_2)](../../../actions/workflows/c-cpp.yml?query=branch:V_10_2)
 [![VM CI](../../../actions/workflows/vm.yml/badge.svg?branch=V_10_2)](../../../actions/workflows/vm.yml?query=branch:V_10_2)
@@ -18,10 +23,3 @@ master :
 [![VM CI](../../../actions/workflows/vm.yml/badge.svg?branch=V_10_1)](../../../actions/workflows/vm.yml?query=branch:V_10_1)
 [![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_10_1)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_10_1)
 
-10.0 :
-[![C/C++ CI](../../../actions/workflows/c-cpp.yml/badge.svg?branch=V_10_0)](../../../actions/workflows/c-cpp.yml?query=branch:V_10_0)
-[![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_10_0)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_10_0)
-
-9.9 :
-[![C/C++ CI](../../../actions/workflows/c-cpp.yml/badge.svg?branch=V_9_9)](../../../actions/workflows/c-cpp.yml?query=branch:V_9_9)
-[![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_9_9)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_9_9)
diff --git a/crypto/openssh/.github/configs b/crypto/openssh/.github/configs
index 9ad2439df493..ece6441b1617 100755
--- a/crypto/openssh/.github/configs
+++ b/crypto/openssh/.github/configs
@@ -185,6 +185,11 @@ case "$config" in
     libressl-*)
 	LIBCRYPTOFLAGS="--with-ssl-dir=/opt/libressl --with-rpath=-Wl,-rpath,"
 	;;
+    dropbear-*)
+	CONFIGFLAGS="--with-dbclient=/usr/local/bin/plink --with-dropbear=/usr/local/sbin/dropbear"
+	# We don't need to rerun the regular tests, just the interop ones.
+	TEST_TARGET=interop-tests
+	;;
     putty-*)
 	CONFIGFLAGS="--with-plink=/usr/local/bin/plink --with-puttygen=/usr/local/bin/puttygen"
 	# We don't need to rerun the regular tests, just the interop ones.
@@ -203,7 +208,7 @@ case "$config" in
 	;;
     sk)
 	CONFIGFLAGS="--with-security-key-builtin --with-security-key-standalone"
-        ;;
+	;;
     without-openssl)
 	LIBCRYPTOFLAGS="--without-openssl"
 	TEST_TARGET=t-exec
diff --git a/crypto/openssh/.github/install_dropbear.sh b/crypto/openssh/.github/install_dropbear.sh
new file mode 100755
index 000000000000..ed91c52f7cdb
--- /dev/null
+++ b/crypto/openssh/.github/install_dropbear.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# Install specified Dropbear version into /usr/local.
+#
+
+ver="$1"
+
+echo
+echo ---------------------------------------------
+echo Installing dropbear version: ${ver}
+echo ---------------------------------------------
+
+set -e
+
+cd /tmp
+
+if [ ! -d dropbear-clean ]; then
+	git clone https://github.com/mkj/dropbear.git dropbear-clean
+	(cd dropbear-clean && git config --global advice.detachedHead false)
+fi
+
+rm -rf dropbear
+cp -a dropbear-clean dropbear
+cd dropbear
+git checkout "$ver"
+git status
+echo "Building Dropbear version '$ver'"
+(
+	autoreconf 2>&1 &&
+	./configure 2>&1 &&
+	make clean 2>&1 &&
+	make 2>&1 &&
+	sudo make install 2>&1) >/tmp/db-build.log 2>&1 || cat /tmp/db-build.log
+
+echo "Installed dropbear version: '$(/usr/local/bin/dbclient -V 2>&1)'"
diff --git a/crypto/openssh/.github/install_libcrypto.sh b/crypto/openssh/.github/install_libcrypto.sh
index d1aa23450679..cef9416808d8 100755
--- a/crypto/openssh/.github/install_libcrypto.sh
+++ b/crypto/openssh/.github/install_libcrypto.sh
@@ -51,7 +51,7 @@ if [ "${abi_compat_test}" = "y" ]; then
 		ver="${major}.$((${minor} + 1))"
 		echo selecting next release branch ${ver}
 		;;
-	openssl-3.*.*)
+	openssl-[34].*.*)
 		major=$(echo ${ver} | cut -f1 -d.)
 		minor=$(echo ${ver} | cut -f2 -d.)
 		patch=$(echo ${ver} | cut -f3 -d.)
diff --git a/crypto/openssh/.github/pin_actions.sh b/crypto/openssh/.github/pin_actions.sh
new file mode 100755
index 000000000000..8b64e823827e
--- /dev/null
+++ b/crypto/openssh/.github/pin_actions.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# Look up specified version of Github Actions an pin to that specific
+# revision.
+#
+
+set -e
+
+github=https://github.com
+
+for workflow in workflows/*.yml; do
+	sed 's/ - /   /' ${workflow} | grep -v '^#' | awk '/uses:/ {print}' | \
+	    while read line; do
+		action_ver=$(awk '{print $2}' <<<${line})
+		action=$(cut -f1 -d@ <<<${action_ver})
+		ver=$(cut -f2 -d@ <<<${action_ver})
+		intendedver=$(awk '{print $4}' <<<${line})
+		if [ -z "${intendedver}" ]; then
+			intendedver=${ver}
+		fi
+		case "${action}" in
+		google/oss-fuzz/*)	actiondir=google/oss-fuzz ;;
+		*)			actiondir="${action}" ;;
+		esac
+		if [ ! -d /tmp/${actiondir} ]; then
+			git clone ${github}/${actiondir} /tmp/${actiondir}
+		fi
+		hash=$(cd /tmp/${actiondir} && git rev-parse ${intendedver})
+		sed -i -e "s|uses: ${action}@.*|uses: ${action}@${hash} # ${intendedver}|" \
+		     ${workflow}
+	done
+done
+
+# Output actions for allowlist.
+awk 'BEGIN{IFS=":"} /^ +uses:.*@/{print $2","}' workflows/*.yml | sort -u
diff --git a/crypto/openssh/.github/run_test.sh b/crypto/openssh/.github/run_test.sh
index c67d00700f23..63aa31f6c004 100755
--- a/crypto/openssh/.github/run_test.sh
+++ b/crypto/openssh/.github/run_test.sh
@@ -15,8 +15,8 @@ if [ ! -z "$SUDO" ] && [ ! -z "$TEST_SSH_HOSTBASED_AUTH" ]; then
     $SUDO mkdir -p $sshconf
     $SUDO make install
     for key in $sshconf/ssh_host*key*.pub; do
-        echo `hostname` `cat $key` | \
-            $SUDO tee -a $sshconf/ssh_known_hosts >/dev/null
+	echo `hostname` `cat $key` | \
+	    $SUDO tee -a $sshconf/ssh_known_hosts >/dev/null
     done
 fi
 
@@ -45,6 +45,22 @@ if [ "$1" = "putty-versions" ]; then
 	exit 0
 fi
 
+if [ "$1" = "dropbear-versions" ]; then
+	make regress-binaries
+	# Work backward from current version to last version we support.
+	for ver in main `cd /tmp/dropbear && git tag | grep -E 'DROPBEAR_' | sort -rn`; do
+		year=`echo "$ver" | cut -f2 -d_ | cut -f1 -d.`
+		if [ "$ver" != "master" ] && [ "$year" -lt "2020" ]; then
+			exit 0
+		fi
+		.github/install_dropbear.sh "${ver}"
+		${env} make ${TEST_TARGET} \
+		    SKIP_LTESTS="${SKIP_LTESTS}" LTESTS="${LTESTS}"
+	done
+
+	exit 0
+fi
+
 if [ -z "${LTESTS}" ]; then
     ${env} make ${TEST_TARGET} SKIP_LTESTS="${SKIP_LTESTS}"
 else
@@ -59,8 +75,8 @@ fi
 if [ ! -z "${SSHD_CONFOPTS}" ]; then
     echo "rerunning t-exec with TEST_SSH_SSHD_CONFOPTS='${SSHD_CONFOPTS}'"
     if [ -z "${LTESTS}" ]; then
-        ${env} make t-exec SKIP_LTESTS="${SKIP_LTESTS}" TEST_SSH_SSHD_CONFOPTS="${SSHD_CONFOPTS}"
+	${env} make t-exec SKIP_LTESTS="${SKIP_LTESTS}" TEST_SSH_SSHD_CONFOPTS="${SSHD_CONFOPTS}"
     else
-        ${env} make t-exec SKIP_LTESTS="${SKIP_LTESTS}" LTESTS="${LTESTS}" TEST_SSH_SSHD_CONFOPTS="${SSHD_CONFOPTS}"
+	${env} make t-exec SKIP_LTESTS="${SKIP_LTESTS}" LTESTS="${LTESTS}" TEST_SSH_SSHD_CONFOPTS="${SSHD_CONFOPTS}"
     fi
 fi
diff --git a/crypto/openssh/.github/setup_ci.sh b/crypto/openssh/.github/setup_ci.sh
index e1b3dcf04a84..6ab4e4fb56f2 100755
--- a/crypto/openssh/.github/setup_ci.sh
+++ b/crypto/openssh/.github/setup_ci.sh
@@ -8,8 +8,8 @@ PACKAGES="tmux"
 echo Running as:
 id
 
-echo Environment:
-set
+echo Saving environment to runner-env.txt
+set >runner-env.txt
 
  . .github/configs ${config}
 
@@ -20,16 +20,36 @@ case "$host" in
 	PACKAGER=setup
 	echo Setting CYGWIN system environment variable.
 	setx CYGWIN "winsymlinks:native"
-	echo Removing extended ACLs so umask works as expected.
-	set -x
-	setfacl -b . regress
-	icacls regress /c /t /q /Inheritance:d
-	icacls regress /c /t /q /Grant ${USERNAME}:F
-	icacls regress /c /t /q /Remove:g "Authenticated Users" \
-	     BUILTIN\\Administrators BUILTIN Everyone System Users
-	takeown /F regress
+	echo Removing extended ACLs on regress so umask works as expected.
+	echo "Original ACLs"
 	icacls regress
-	set +x
+	setfacl -b regress
+	icacls regress /c /t /q /grant 'BUILTIN\Administrators:(RX)'
+	echo "Modifiled ACLs"
+	icacls regress
+
+	echo Enabling OpenSSL rh-allow-sha1-signatures for unit tests.
+	cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.bak
+	cat >>/etc/pki/tls/openssl.cnf <<EOD
+[openssl_init]
+alg_section = evp_properties
+
+[evp_properties]
+rh-allow-sha1-signatures = yes
+EOD
+	openssl list -providers -provider legacy
+	printf "Test openssl signing with RSA+SHA1: "
+	openssl genpkey -quiet -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
+	openssl pkey -in private_key.pem -pubout -out public_key.pem
+	if ! openssl dgst -sha1 -sign private_key.pem -out signature.sig public_key.pem; then
+		echo fail
+		echo "openssl could not sign with RSA+SHA1."
+		cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.bak regress/
+		exit 1
+	else
+		echo success
+	fi
+
 	PACKAGES="$PACKAGES,autoconf,automake,cygwin-devel,gcc-core"
 	PACKAGES="$PACKAGES,make,openssl,libssl-devel,zlib-devel"
 	;;
@@ -87,82 +107,88 @@ echo "Setting up for '$TARGETS'"
 for TARGET in $TARGETS; do
     case $TARGET in
     default|without-openssl|without-zlib|c89)
-        # nothing to do
-        ;;
+	# nothing to do
+	;;
     clang-sanitize*)
-        PACKAGES="$PACKAGES clang-12"
-        ;;
+	PACKAGES="$PACKAGES clang-12"
+	;;
     cygwin-release)
-        PACKAGES="$PACKAGES libcrypt-devel libfido2-devel libkrb5-devel"
-        ;;
+	PACKAGES="$PACKAGES libcrypt-devel libfido2-devel libkrb5-devel"
+	;;
     gcc-sanitize*)
-        ;;
+	;;
     clang-*|gcc-*)
-        compiler=$(echo $TARGET | sed 's/-Werror//')
-        PACKAGES="$PACKAGES $compiler"
-        ;;
+	compiler=$(echo $TARGET | sed 's/-Werror//')
+	PACKAGES="$PACKAGES $compiler"
+	;;
     krb5)
-        PACKAGES="$PACKAGES libkrb5-dev libnss-wrapper krb5-admin-server"
+	PACKAGES="$PACKAGES libkrb5-dev libnss-wrapper krb5-admin-server"
 	;;
     heimdal)
-        PACKAGES="$PACKAGES heimdal-dev libnss-wrapper krb5-admin-server"
-        ;;
+	PACKAGES="$PACKAGES heimdal-dev libnss-wrapper krb5-admin-server"
+	;;
     libedit)
 	case "$PACKAGER" in
 	setup)	PACKAGES="$PACKAGES libedit-devel" ;;
 	apt)	PACKAGES="$PACKAGES libedit-dev" ;;
 	esac
-        ;;
+	;;
     *pam)
 	case "$PACKAGER" in
 	apt)	PACKAGES="$PACKAGES libpam0g-dev" ;;
 	esac
-        ;;
+	;;
     sk)
-        INSTALL_FIDO_PPA="yes"
-        PACKAGES="$PACKAGES libfido2-dev libu2f-host-dev libcbor-dev"
-        ;;
+	INSTALL_FIDO_PPA="yes"
+	PACKAGES="$PACKAGES libfido2-dev libu2f-host-dev libcbor-dev"
+	;;
     selinux)
-        PACKAGES="$PACKAGES libselinux1-dev selinux-policy-dev libaudit-dev"
-        ;;
+	PACKAGES="$PACKAGES libselinux1-dev selinux-policy-dev libaudit-dev"
+	;;
     hardenedmalloc)
-        INSTALL_HARDENED_MALLOC=yes
-        ;;
+	INSTALL_HARDENED_MALLOC=yes
+	# Need clang >= 19 for constexpr.
+	PACKAGES="$PACKAGES clang-19"
+	;;
     musl)
 	PACKAGES="$PACKAGES musl-tools"
 	;;
     tcmalloc)
-        PACKAGES="$PACKAGES libgoogle-perftools-dev"
-        ;;
+	PACKAGES="$PACKAGES libgoogle-perftools-dev"
+	;;
     openssl-noec)
 	INSTALL_OPENSSL=OpenSSL_1_1_1k
 	SSLCONFOPTS="no-ec"
 	;;
     openssl-*)
-        INSTALL_OPENSSL=$(echo ${TARGET} | cut -f2 -d-)
-        case ${INSTALL_OPENSSL} in
-          1.1.1_stable)	INSTALL_OPENSSL="OpenSSL_1_1_1-stable" ;;
-          1.*)	INSTALL_OPENSSL="OpenSSL_$(echo ${INSTALL_OPENSSL} | tr . _)" ;;
-          3.*)	INSTALL_OPENSSL="openssl-${INSTALL_OPENSSL}" ;;
-        esac
-        PACKAGES="${PACKAGES} putty-tools dropbear-bin"
+	INSTALL_OPENSSL=$(echo ${TARGET} | cut -f2 -d-)
+	case ${INSTALL_OPENSSL} in
+	  1.1.1_stable)	INSTALL_OPENSSL="OpenSSL_1_1_1-stable" ;;
+	  1.*)	INSTALL_OPENSSL="OpenSSL_$(echo ${INSTALL_OPENSSL} | tr . _)" ;;
+	  master)	;;
+	  *)	INSTALL_OPENSSL="openssl-${INSTALL_OPENSSL}" ;;
+	esac
+	PACKAGES="${PACKAGES} putty-tools dropbear-bin"
        ;;
     libressl-*)
-        INSTALL_LIBRESSL=$(echo ${TARGET} | cut -f2 -d-)
-        case ${INSTALL_LIBRESSL} in
-          master) ;;
-          *) INSTALL_LIBRESSL="$(echo ${TARGET} | cut -f2 -d-)" ;;
-        esac
-        PACKAGES="${PACKAGES} putty-tools dropbear-bin"
+	INSTALL_LIBRESSL=$(echo ${TARGET} | cut -f2 -d-)
+	case ${INSTALL_LIBRESSL} in
+	  master) ;;
+	  *) INSTALL_LIBRESSL="$(echo ${TARGET} | cut -f2 -d-)" ;;
+	esac
+	PACKAGES="${PACKAGES} putty-tools dropbear-bin"
        ;;
     boringssl)
-        INSTALL_BORINGSSL=1
-        PACKAGES="${PACKAGES} cmake ninja-build"
+	INSTALL_BORINGSSL=1
+	PACKAGES="${PACKAGES} cmake ninja-build"
        ;;
     aws-lc)
-        INSTALL_AWSLC=1
-        PACKAGES="${PACKAGES} cmake ninja-build"
-        ;;
+	INSTALL_AWSLC=1
+	PACKAGES="${PACKAGES} cmake ninja-build"
+	;;
+    dropbear-versions)
+	INSTALL_DROPBEAR=main
+	;;
     putty-*)
 	INSTALL_PUTTY=0.83
 	PACKAGES="${PACKAGES} cmake"
@@ -173,8 +199,8 @@ for TARGET in $TARGETS; do
     zlib-*)
        ;;
     *) echo "Invalid option '${TARGET}'"
-        exit 1
-        ;;
+	exit 1
+	;;
     esac
 done
 
@@ -221,7 +247,7 @@ if [ "${INSTALL_HARDENED_MALLOC}" = "yes" ]; then
     (cd ${HOME} &&
      git clone https://github.com/GrapheneOS/hardened_malloc.git &&
      cd ${HOME}/hardened_malloc &&
-     make && sudo cp out/libhardened_malloc.so /usr/lib/)
+     make CC=clang-19 && sudo cp out/libhardened_malloc.so /usr/lib/)
 fi
 
 if [ ! -z "${INSTALL_OPENSSL}" ]; then
@@ -231,20 +257,20 @@ fi
 
 if [ ! -z "${INSTALL_LIBRESSL}" ]; then
     if [ "${INSTALL_LIBRESSL}" = "master" ]; then
-        (mkdir -p ${HOME}/libressl && cd ${HOME}/libressl &&
-         git clone https://github.com/libressl-portable/portable.git &&
-         cd ${HOME}/libressl/portable &&
-         git checkout ${INSTALL_LIBRESSL} &&
-         sh update.sh && sh autogen.sh &&
-         ./configure --prefix=/opt/libressl &&
-         make && sudo make install)
+	(mkdir -p ${HOME}/libressl && cd ${HOME}/libressl &&
+	 git clone https://github.com/libressl-portable/portable.git &&
+	 cd ${HOME}/libressl/portable &&
+	 git checkout ${INSTALL_LIBRESSL} &&
+	 sh update.sh && sh autogen.sh &&
+	 ./configure --prefix=/opt/libressl &&
+	 make && sudo make install)
     else
-        LIBRESSL_URLBASE=https://cdn.openbsd.org/pub/OpenBSD/LibreSSL
-        (cd ${HOME} &&
-         wget ${LIBRESSL_URLBASE}/libressl-${INSTALL_LIBRESSL}.tar.gz &&
-         tar xfz libressl-${INSTALL_LIBRESSL}.tar.gz &&
-         cd libressl-${INSTALL_LIBRESSL} &&
-         ./configure --prefix=/opt/libressl && make && sudo make install)
+	LIBRESSL_URLBASE=https://cdn.openbsd.org/pub/OpenBSD/LibreSSL
+	(cd ${HOME} &&
+	 wget ${LIBRESSL_URLBASE}/libressl-${INSTALL_LIBRESSL}.tar.gz &&
+	 tar xfz libressl-${INSTALL_LIBRESSL}.tar.gz &&
+	 cd libressl-${INSTALL_LIBRESSL} &&
+	 ./configure --prefix=/opt/libressl && make && sudo make install)
     fi
 fi
 
@@ -272,6 +298,9 @@ if [ ! -z "${INSTALL_ZLIB}" ]; then
      sudo make install prefix=/opt/zlib)
 fi
 
+if [ ! -z "${INSTALL_DROPBEAR}" ]; then
+	.github/install_dropbear.sh "${INSTALL_DROPBEAR}"
+fi
 if [ ! -z "${INSTALL_PUTTY}" ]; then
 	.github/install_putty.sh "${INSTALL_PUTTY}"
 fi
diff --git a/crypto/openssh/.github/workflows/c-cpp.yml b/crypto/openssh/.github/workflows/c-cpp.yml
index 02cd10bfbb6e..ffead602f5d3 100644
--- a/crypto/openssh/.github/workflows/c-cpp.yml
+++ b/crypto/openssh/.github/workflows/c-cpp.yml
@@ -9,6 +9,7 @@ name: CI
 #   fail immediately.
 #
 # LTESTS: Override the set of tests run.
+# TEST_SSH_TRACE: Set to yes for additional regress output.
 
 on:
   push:
@@ -51,7 +52,6 @@ jobs:
           - { target: ubuntu-22.04, config: gcc-12-Werror }
           - { target: ubuntu-22.04, config: gcc-sanitize-address }
           - { target: ubuntu-22.04, config: gcc-sanitize-undefined }
-          - { target: ubuntu-22.04, config: hardenedmalloc }
           - { target: ubuntu-22.04, config: heimdal }
           - { target: ubuntu-22.04, config: kitchensink }
           - { target: ubuntu-22.04, config: krb5 }
@@ -63,7 +63,7 @@ jobs:
           - { target: ubuntu-22.04, config: valgrind-2 }
           - { target: ubuntu-22.04, config: valgrind-3 }
           - { target: ubuntu-22.04, config: valgrind-4 }
-          - { target: ubuntu-22.04, config: valgrind-pam-1 }
+          # - { target: ubuntu-22.04, config: valgrind-pam-1 }
           - { target: ubuntu-22.04, config: valgrind-unit }
           - { target: ubuntu-22.04, config: without-openssl }
           - { target: ubuntu-latest, config: gcc-14 }
@@ -71,6 +71,7 @@ jobs:
           - { target: ubuntu-latest, config: clang-19 }
           - { target: ubuntu-latest, config: boringssl }
           - { target: ubuntu-latest, config: aws-lc }
+          - { target: ubuntu-latest, config: hardenedmalloc }
           - { target: ubuntu-latest, config: libressl-master }
           - { target: ubuntu-latest, config: libressl-3.2.7 }
           - { target: ubuntu-latest, config: libressl-3.3.6 }
@@ -83,6 +84,7 @@ jobs:
           - { target: ubuntu-latest, config: libressl-4.0.1 }
           - { target: ubuntu-latest, config: libressl-4.1.1 }
           - { target: ubuntu-latest, config: libressl-4.2.0 }
+          - { target: ubuntu-latest, config: libressl-4.3.2 }
           - { target: ubuntu-latest, config: openssl-master }
           - { target: ubuntu-latest, config: openssl-noec }
           - { target: ubuntu-latest, config: openssl-1.1.1 }
@@ -93,12 +95,14 @@ jobs:
           - { target: ubuntu-latest, config: openssl-3.1.0 }
           - { target: ubuntu-latest, config: openssl-3.1.8 }
           - { target: ubuntu-latest, config: openssl-3.2.6 }
-          - { target: ubuntu-latest, config: openssl-3.3.5 }
+          - { target: ubuntu-latest, config: openssl-3.3.7 }
           - { target: ubuntu-latest, config: openssl-3.4.0 }
-          - { target: ubuntu-latest, config: openssl-3.4.3 }
+          - { target: ubuntu-latest, config: openssl-3.4.5 }
           - { target: ubuntu-latest, config: openssl-3.5.0 }
           - { target: ubuntu-latest, config: openssl-3.5.3 }  # keep
-          - { target: ubuntu-latest, config: openssl-3.5.4 }
+          - { target: ubuntu-latest, config: openssl-3.5.6 }
+          - { target: ubuntu-latest, config: openssl-3.6.2 }
+          - { target: ubuntu-latest, config: openssl-4.0.0 }
           - { target: ubuntu-latest, config: openssl-1.1.1_stable }
           - { target: ubuntu-latest, config: openssl-3.0 }  # stable branch
           - { target: ubuntu-latest, config: openssl-3.1 }  # stable branch
@@ -107,6 +111,8 @@ jobs:
           - { target: ubuntu-latest, config: openssl-3.4 }  # stable branch
           - { target: ubuntu-latest, config: openssl-3.5 }  # stable branch
           - { target: ubuntu-latest, config: openssl-3.6 }  # stable branch
+          - { target: ubuntu-latest, config: openssl-4.0 }  # stable branch
+          - { target: ubuntu-latest, config: dropbear-versions }
           - { target: ubuntu-latest, config: putty-versions }
           - { target: ubuntu-latest, config: zlib-develop }
           - { target: ubuntu-latest, config: tcmalloc }
@@ -118,6 +124,7 @@ jobs:
     runs-on: ${{ matrix.target }}
     env:
       EPHEMERAL_VM: yes
+      CYGWIN: "winsymlinks:native"
     steps:
     - name: check RUN_ONLY_TARGET_CONFIG
       if: vars.RUN_ONLY_TARGET_CONFIG != ''
@@ -128,12 +135,12 @@ jobs:
     - name: install cygwin
       id: cygwin_install
       if: ${{ startsWith(matrix.target, 'windows') }}
-      uses: cygwin/cygwin-install-action@master
-      env:
-        CYGWIN: "winsymlinks:native"
-    - uses: actions/checkout@main
+      uses: cygwin/cygwin-install-action@a3d72946b163026bbd0fa9a88379ccbda4bd86bb # master
+    - name: checkout openssh git repo
+      uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # main
     - name: setup CI system
-      run: sh ./.github/setup_ci.sh ${{ matrix.config }} ${{ matrix.target }}
+      run: |
+        sh -c "timeout 1200 .github/setup_ci.sh ${{ matrix.config }} ${{ matrix.target }} || .github/setup_ci.sh ${{ matrix.config }} ${{ matrix.target }}"
       env:
         CYGWIN_SETUP: ${{ steps.cygwin_install.outputs.setup }}
     - name: autoreconf
@@ -141,34 +148,35 @@ jobs:
     - name: configure
       run: sh ./.github/configure.sh ${{ matrix.config }}
     - name: save config
-      uses: actions/upload-artifact@main
+      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # main
       with:
         name: ${{ matrix.target }}-${{ matrix.config }}-config
         path: config.h
     - name: make clean
       run: make clean
     - name: make
-      run: make
+      run: make -j2
     - name: make tests
       run: sh ./.github/run_test.sh ${{ matrix.config }}
       env:
         TEST_SSH_UNSAFE_PERMISSIONS: 1
         TEST_SSH_HOSTBASED_AUTH: yes
+        TEST_SSH_TRACE: ${{ vars.TEST_SSH_TRACE }}
         LTESTS: ${{ vars.LTESTS }}
     - name: test OpenSSL3 ABI compatibility
       if: ${{ startsWith(matrix.config, 'openssl-3') }}
       run: |
        sh .github/install_libcrypto.sh -a ${{ matrix.config }} /opt/openssl
        sh .github/run_test.sh ${{ matrix.config }}
-    - name: show logs
-      if: failure()
-      run: for i in regress/failed*.log; do echo ====; echo logfile $i; echo =====; cat $i; done
     - name: chown logs
       if: failure()
-      run: test -x "$(which sudo 2>&1)" && sudo chown -R "${LOGNAME}" regress
+      run: sh -c 'SUDO="$(which sudo 2>/dev/null)"; $SUDO chown -R "${LOGNAME}" regress'
+    - name: show logs
+      if: failure()
+      run: sh -c "for i in regress/failed*.log; do echo ====; echo logfile $i; echo =====; cat $i; done"
     - name: save logs
       if: failure()
-      uses: actions/upload-artifact@main
+      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # main
       with:
         name: ${{ matrix.target }}-${{ matrix.config }}-logs
         path: |
diff --git a/crypto/openssh/.github/workflows/cifuzz.yml b/crypto/openssh/.github/workflows/cifuzz.yml
index ab8b1c6e0971..286b39c12cb0 100644
--- a/crypto/openssh/.github/workflows/cifuzz.yml
+++ b/crypto/openssh/.github/workflows/cifuzz.yml
@@ -12,20 +12,20 @@ jobs:
     steps:
     - name: Build Fuzzers
       id: build
-      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
+      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@b1836d5aed2e5aaae7f618ddd40bbcc477119825 # master
       with:
         oss-fuzz-project-name: 'openssh'
         dry-run: false
         language: c++
     - name: Run Fuzzers
-      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
+      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@b1836d5aed2e5aaae7f618ddd40bbcc477119825 # master
       with:
         oss-fuzz-project-name: 'openssh'
         fuzz-seconds: 600
         dry-run: false
         language: c++
     - name: Upload Crash
-      uses: actions/upload-artifact@main
+      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # main
       if: failure() && steps.build.outcome == 'success'
       with:
         name: artifacts
diff --git a/crypto/openssh/.github/workflows/selfhosted.yml b/crypto/openssh/.github/workflows/selfhosted.yml
index aa01c8b296a9..d9f38472c405 100644
--- a/crypto/openssh/.github/workflows/selfhosted.yml
+++ b/crypto/openssh/.github/workflows/selfhosted.yml
@@ -88,7 +88,7 @@ jobs:
           - { target: nbsd10, config: pam, host: libvirt }
           - { target: omnios, config: pam, host: libvirt }
           # ARM64 VMs
-          - { target: obsd-arm64, config: default, host: libvirt-arm64 }
+          - { target: obsdsnap-arm64, config: default, host: libvirt-arm64 }
           # VMs with persistent disks that have their own runner.
           - { target: win10, config: default,        host: persist-win10 }
           - { target: win10, config: cygwin-release, host: persist-win10 }
@@ -105,7 +105,7 @@ jobs:
     - name: shutdown VM if running
       if: env.VM == 'true'
       run: vmshutdown
-    - uses: actions/checkout@main
+    - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # main
     - name: autoreconf
       run: autoreconf
     - name: startup VM
@@ -119,7 +119,7 @@ jobs:
     - name: configure
       run: vmrun ./.github/configure.sh ${{ matrix.config }}
 #    - name: save config
-#      uses: actions/upload-artifact@main
+#      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # main
 #      with:
 #        name: ${{ matrix.target }}-${{ matrix.config }}-config
 #        path: config.h
@@ -135,7 +135,7 @@ jobs:
       run: vmrun 'for i in regress/failed*.log; do echo ====; echo logfile $i; echo =====; cat $i; done'
     - name: save logs
*** 72252 LINES SKIPPED ***

From nobody Mon Oct  5 14:11:37 2026
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 4hz1XV0g6lz6jw1M
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 14:11:38 +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 4hz1XV028Lz3FDf
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 14:11:38 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791209498;
	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=s3bd8txy4rjyn6P7ld/sUyx9vRIOBxv31O/6Fy6GAW4=;
	b=RavC/+aBcKZEkWrLmVfc8Pmlq+ARjE/vAmzLBQDVOJ8leHJoyiDIy766B8SiM4xJPf7hBo
	ZJVfd/ItX890O5BF7IuYM8YU1csgF0VIYJnjisEKoUID5p5Dc+rnbMhvCR+JvjrdVxSJF3
	1OkrOgkGtU+RQTDlrKm6/vCmYCAiFeu2wiCkMTDM0HJuryWgSJz3JQ2e806CutbeCh6/+y
	EHWwOLyNdGzuaZGfZsWIP8vhIVMwVozXsZNklShTyKV9M7c8zDyYb3T6oX24WpIHKwF+kl
	wiD5FhdQjUcomVC7PwbmfU20E2YuW+b8bIVDUcYh/ghIR1S2k6CEw6+nj8HfJA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791209498;
	b=qvOPaoVjLtRRRyiJHOw6WdaUWcBRzf9gac0sweYZ5voVSvVsAcGrsp929hOToTwztugav+
	AeA4uYdZoMBWQDLN899yni0TTf5P3v5Vf4qfNJ+7FDhhxL6I/p5+LOidH73JSxjtPZuXBq
	csoqLF8iYvjebQGN1TGzu/W9vrRpDGTEAJGwQ1CcM2gx/0/NwwTeD+sOVv9Cj+B3li3tOD
	OW2WrUTTDGnTUGG7Yo0ecYga+BvVV4I7iPoxfGpBSXIelh8PepTFj3ouvVOWwImHYLubal
	vCqn6aI/SS15nxov/ETfhg9d53vVtJcVvPugC7IcJw9YzKeXOtv784fA7wYp/w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791209498;
	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=s3bd8txy4rjyn6P7ld/sUyx9vRIOBxv31O/6Fy6GAW4=;
	b=sRtaAhylK18It3lFWmZ+t+YVPFt18VhY1yntQqUnfMqWysEoG4ZWeph5/4K9gD6XItHmmm
	B4NyfXmK4ocqTvjwLhjUoVTz38Ue5kZ5hDvysyUBzhVzzfywHAVnGu5uR1dLq8mXKwvglB
	tZoPyVogtfwAjyTV6weENUo20vojerGk+gbiF2UvZkSe8WapMQf7DqcmZ3oSaiqrJX/Scm
	JNp8ecE3AF8IyEh8oy5JU+Tj7yDFWDOzPVILMatfUSoXg9rZdXuJ6yjDLF0twNa3cYZmvK
	nuXhKkO5tZcKaXbP5aIvTPWdprw+1B6uNpTWdUZTWTDoJPjSpn3c0dyibi6Vhw==
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 4hz1XT6BWqzMCx
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 14:11:37 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 466ba
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 14:11:37 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Gleb Popov <arrowd@FreeBSD.org>
Subject: git: 128e91e002d2 - stable/15 - nuageinit: Allow the userdata script to run before firstboot* rc services
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: arrowd
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 128e91e002d29ecfb62f0568dda316eac4125b68
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 14:11:37 +0000
Message-Id: <6ac3b019.466ba.7a12cbc3@gitrepo.freebsd.org>

The branch stable/15 has been updated by arrowd:

URL: https://cgit.FreeBSD.org/src/commit/?id=128e91e002d29ecfb62f0568dda316eac4125b68

commit 128e91e002d29ecfb62f0568dda316eac4125b68
Author:     Gleb Popov <arrowd@FreeBSD.org>
AuthorDate: 2026-07-27 18:18:12 +0000
Commit:     Gleb Popov <arrowd@FreeBSD.org>
CommitDate: 2026-10-05 14:11:26 +0000

    nuageinit: Allow the userdata script to run before firstboot* rc services
    
    Allowing nuageinit user scripts to run before these makes it possible to
    customize official BASIC-CI and BASIC-CLOUDINIT FreeBSD images.
    
    This was requested by KDE for their CI.
    
    Approved by:    cperciva
    Pull-Request:   https://ron-dev.freebsd.org/FreeBSD/src/pulls/60
    
    (cherry picked from commit 16e47f317c4ce2be5fed530bf8a9af9f9bf55364)
---
 libexec/rc/rc.d/nuageinit_user_data_script | 1 +
 1 file changed, 1 insertion(+)

diff --git a/libexec/rc/rc.d/nuageinit_user_data_script b/libexec/rc/rc.d/nuageinit_user_data_script
index decb6bf1483e..acc14bbe9164 100755
--- a/libexec/rc/rc.d/nuageinit_user_data_script
+++ b/libexec/rc/rc.d/nuageinit_user_data_script
@@ -3,6 +3,7 @@
 
 # PROVIDE: nuageinit_user_data_script
 # REQUIRE: local
+# BEFORE:  firstboot_freebsd_update firstboot_pkg_upgrade
 # KEYWORD: firstboot
 
 . /etc/rc.subr

From nobody Mon Oct  5 14:16:55 2026
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 4hz1fj172dz6jwLg
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 14:17:01 +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 4hz1fh69Krz3GW1
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 14:17:00 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791209820;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=j5ayKOOhvrjKNcG3866DFEuDzl3ueRcN3AMY+TC4WNo=;
	b=AyJRY4igZkBNMnkOXvC/A4HQyOZcDdJTKwxFk82zr2BIqJWl0wxWA7277AVywVAZFPK0/K
	uXpsiWFipPZv4/twOqPwZOvrdAC+D7jPj86IMBQzSizVyab9qXT2C7kNIKWGLHlxS1wa9q
	bcwlRiLyqfAxxgrhzkQJwECbqml4dF10vFle5fYvgH0WDZRxVaBph3s+u2Hj0efB+xquTv
	FNZ7enNEC+xUpzqkf5srZqcJJYt/65XNS/LZP0L31objKhOFQUUKZVqWHN8Jpju8ftiQHg
	CwID/G2UIilD+oVzLPF9mbAVzW2vTToBFrrTt0Kmtt/1qposJgMm0d/eXXLscg==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791209820;
	b=ypi8LXbH8N5uLGCMPyHKWcOyw9V7Bbh7oNcaE25/q7gP+tOvdAssefvSF2eenvjnauDYkL
	ajMAnrHC1ATcW5qMvAB7jjX9ONudD9jAIW58uxrATnQbl90VQqSmLxlV5TFkSGHOhF4Lfz
	ptU6b87cJK677RUmkBNhQjjh6qn+wyKgfOwSzP0FtB/Wu84l6/wDDe5qPn18iAxRPaugBg
	L/wu8IFYjcTtpqukvw9rpHiOpW2B9fvxg65f6AP7hFzDEnm6pYDuMqDtkoHsnS5AQyPHpH
	/FB/Xe2O/Utb37wbnI2qoLl16feduW46Y3vwtdeOX61kd5Vn/66pa4bK/LXLFw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791209820;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=j5ayKOOhvrjKNcG3866DFEuDzl3ueRcN3AMY+TC4WNo=;
	b=yN059/sb8NbyQW5ZQcMIZ7yqCn6SKX5/FkpzGUxj/X7ApLyRHaYYLrB+t+k3MgvOCSuAgB
	Wzr4pbEftKzSf2z2qEQPZihQWjYKWhglUmsmyftI4VGSrVVr8beDWBiy+9IO8VycD3JK7C
	wHjO19wfZwv9IaNdOmQDnMP3eh53K8CFSUg5ZoYEg3dKT2huW6wu7oriP0f0b2dB/WDi3N
	d9qiccDOQ0a1zFUW3XiFdnBiOxEPQ5wZme10pQ9M4ylbMXpJ3Z1ag4shoZQKLPlyMmiKlt
	XZLeErCgtyBvW/E4eO9e0jfdw/VXFXrehoKaUU6w3GRVVNWkn2ianJH+uTvpgA==
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 4hz1fh4mhSzN00
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 14:17:00 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 475fd
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 14:16:55 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Cc: Jose Luis Duran <jlduran@FreeBSD.org>
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: dcab58551115 - stable/14 - secure: Rearrange Makefile SRCS to match upstream Makefile.in
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: dcab58551115b2299e4b0f23e26fc0b763d7cf32
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 14:16:55 +0000
Message-Id: <6ac3b157.475fd.7aa07851@gitrepo.freebsd.org>

The branch stable/14 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=dcab58551115b2299e4b0f23e26fc0b763d7cf32

commit dcab58551115b2299e4b0f23e26fc0b763d7cf32
Author:     Jose Luis Duran <jlduran@FreeBSD.org>
AuthorDate: 2025-04-17 18:56:00 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-05 14:14:44 +0000

    secure: Rearrange Makefile SRCS to match upstream Makefile.in
    
    SRCS entries are kept in the same order and with the same line breaks as
    upstream, to make comparison easier.
    
    No functional change intended.
    
    Reviewed by:    emaste
    Approved by:    emaste (mentor)
    Differential Revision:  https://reviews.freebsd.org/D49793
    
    (cherry picked from commit 9440aad19dca73fdd224b128ac2dc2e78191ff15)
---
 secure/lib/libssh/Makefile                | 23 ++++++++++++++++-------
 secure/libexec/sftp-server/Makefile       |  4 ++--
 secure/libexec/ssh-pkcs11-helper/Makefile |  2 +-
 secure/ssh.mk                             |  2 ++
 secure/usr.bin/scp/Makefile               |  2 +-
 secure/usr.bin/sftp/Makefile              |  3 +--
 secure/usr.bin/ssh-add/Makefile           |  2 +-
 7 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/secure/lib/libssh/Makefile b/secure/lib/libssh/Makefile
index 1917e0a58e31..0a95c401c52f 100644
--- a/secure/lib/libssh/Makefile
+++ b/secure/lib/libssh/Makefile
@@ -5,10 +5,22 @@
 LIB=	ssh
 PRIVATELIB=	true
 SHLIB_MAJOR=	5
-SRCS=	ssh_api.c ssherr.c \
-	sshbuf.c sshkey.c sshbuf-getput-basic.c \
-	sshbuf-misc.c sshbuf-getput-crypto.c krl.c bitmap.c
-SRCS+=	authfd.c authfile.c \
+
+LIBOPENSSH_SRCS=\
+	ssh_api.c \
+	ssherr.c \
+	sshbuf.c \
+	sshkey.c \
+	sshbuf-getput-basic.c \
+	sshbuf-misc.c \
+	sshbuf-getput-crypto.c \
+	krl.c \
+	bitmap.c
+
+# gss-genr.c should be in $SRCS but causes linking problems, so it is
+# compiled directly into sshd instead.
+SRCS=	${LIBOPENSSH_SRCS} \
+	authfd.c authfile.c \
 	canohost.c channels.c cipher.c cipher-aes.c cipher-aesctr.c \
 	cleanup.c \
 	compat.c fatal.c hostfile.c \
@@ -31,9 +43,6 @@ SRCS+=	ssh-sk-client.c
 
 PACKAGE=	ssh
 
-# gss-genr.c should be in $SRCS but causes linking problems, so it is
-# compiled directly into sshd instead.
-
 # Portability layer
 SRCS+=	bcrypt_pbkdf.c blowfish.c bsd-misc.c bsd-signal.c explicit_bzero.c \
 	fmt_scaled.c freezero.c glob.c \
diff --git a/secure/libexec/sftp-server/Makefile b/secure/libexec/sftp-server/Makefile
index 4aac86ac01bf..00570268ffe6 100644
--- a/secure/libexec/sftp-server/Makefile
+++ b/secure/libexec/sftp-server/Makefile
@@ -2,8 +2,8 @@
 .include <src.opts.mk>
 .include "${SRCTOP}/secure/ssh.mk"
 
-PROG=   sftp-server
-SRCS=   sftp-server.c sftp-common.c sftp-server-main.c
+PROG=	sftp-server
+SRCS=	sftp-common.c sftp-server.c sftp-server-main.c
 MAN=	sftp-server.8
 
 LIBADD=	ssh
diff --git a/secure/libexec/ssh-pkcs11-helper/Makefile b/secure/libexec/ssh-pkcs11-helper/Makefile
index 506697531965..34fb59381305 100644
--- a/secure/libexec/ssh-pkcs11-helper/Makefile
+++ b/secure/libexec/ssh-pkcs11-helper/Makefile
@@ -3,7 +3,7 @@
 .include "${SRCTOP}/secure/ssh.mk"
 
 PROG=	ssh-pkcs11-helper
-SRCS=	ssh-pkcs11.c ssh-pkcs11-helper.c
+SRCS=	ssh-pkcs11-helper.c ssh-pkcs11.c
 MAN=	ssh-pkcs11-helper.8
 
 LIBADD=	crypto ssh
diff --git a/secure/ssh.mk b/secure/ssh.mk
index f522e1a927fc..641343ac993a 100644
--- a/secure/ssh.mk
+++ b/secure/ssh.mk
@@ -4,6 +4,8 @@
 
 SSHDIR=		${SRCTOP}/crypto/openssh
 
+SFTP_CLIENT_SRCS=sftp-common.c sftp-client.c sftp-glob.c
+
 CFLAGS+= -I${SSHDIR} -include ssh_namespace.h
 
 .if ${MK_GSSAPI} != "no" && ${MK_KERBEROS_SUPPORT} != "no"
diff --git a/secure/usr.bin/scp/Makefile b/secure/usr.bin/scp/Makefile
index a8d5eac77397..2a79fa3773f8 100644
--- a/secure/usr.bin/scp/Makefile
+++ b/secure/usr.bin/scp/Makefile
@@ -3,7 +3,7 @@
 .include "${SRCTOP}/secure/ssh.mk"
 
 PROG=	scp
-SRCS=	scp.c sftp-common.c sftp-client.c sftp-glob.c progressmeter.c
+SRCS=	scp.c progressmeter.c $(SFTP_CLIENT_SRCS)
 PACKAGE=	ssh
 
 LIBADD=	ssh
diff --git a/secure/usr.bin/sftp/Makefile b/secure/usr.bin/sftp/Makefile
index 2f51bf524c6b..fe59af49f3ba 100644
--- a/secure/usr.bin/sftp/Makefile
+++ b/secure/usr.bin/sftp/Makefile
@@ -3,8 +3,7 @@
 .include "${SRCTOP}/secure/ssh.mk"
 
 PROG=	sftp
-SRCS=   sftp.c sftp-client.c sftp-common.c sftp-glob.c sftp-usergroup.c \
-	progressmeter.c
+SRCS=	sftp.c sftp-usergroup.c progressmeter.c $(SFTP_CLIENT_SRCS)
 PACKAGE=	ssh
 
 LIBADD=	ssh edit
diff --git a/secure/usr.bin/ssh-add/Makefile b/secure/usr.bin/ssh-add/Makefile
index ddde52130027..504c65ff043e 100644
--- a/secure/usr.bin/ssh-add/Makefile
+++ b/secure/usr.bin/ssh-add/Makefile
@@ -3,7 +3,7 @@
 .include "${SRCTOP}/secure/ssh.mk"
 
 PROG=	ssh-add
-SRCS+=	ssh-add.c ssh-sk-client.c
+SRCS=	ssh-add.c ssh-sk-client.c
 PACKAGE=	ssh
 
 LIBADD=	ssh

From nobody Mon Oct  5 14:37:53 2026
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 4hz26p5Pfxz6jy0Y
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 14:37:54 +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 4hz26p2js1z3JT6
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 14:37:54 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791211074;
	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=5qdCJ3CGEBvJ6YTqAdxhGWbgXNsZx9pqX3CUbMH9e1s=;
	b=Ctm1O2+tQSqIpCKVdo+W3KaxNqCjZQJO+RQ95+tbYYThf3Ht+1OSYV6JZKiv6aDjMldgvx
	UdtMFNgyy6+c0tO0LrRZCJLmiLybg190BI6OUuOh7LY0POWxM+jrTlHSFdeIzOvi7Vu6qM
	Ak3LHOzZO1lzLSLoV+uibEcGSu07zrulIl+8FKq/Tf7TQtM48tey8m6ynNiudoTj9v3Ai6
	nn17sMSJQzz5sMxEtUDcpmFPVeow/+sheJQ2fEYWA5ZBrGdCLOwNcTdKuPNppYVJyiml59
	m8b0HXMBzMDNYFA9aZOr1wkzdm6jKQm6gLGaQrqtVB+V8jNEXLMMH8EF3PIbWQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791211074;
	b=BkHMOb5MAdpzHeb4Wi4w1kdEBWfMUAAM3PXa7jwjcpy3MZkefD/Hi3d/P2+5DCAnRjkWdj
	42lrunfF+O6nmD/tloQM/VtAZ8Ymlwh40S71E+ZvbUKFAgrKPlAryLtHHNvW39Rgr0ly7H
	u3bGgFB4I2d+FqBgyOelFU0nXaOJvd/170gqYw5PnqHRiU1MDnzIDJweDY0Mn1S7ksQ+5h
	fppcBsXK1ZE2mcNCEwqZXuCZImj3P0Hgq5unVh5QSECouADNgjUKTcIPeBBFSK0EaiSxho
	9zHdakfp0teNBAc43ud/ns74GMUtO3Gpfpmdx82C0vcjtoIpW9Xmf8350anFyg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791211074;
	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=5qdCJ3CGEBvJ6YTqAdxhGWbgXNsZx9pqX3CUbMH9e1s=;
	b=usu+3aWf+vBPUBWclsWuX+4qx5bpomgYqjX2fxR5j8Hs0r65QNevSlKQtuyQuwaunNucl8
	gdZiYGfKWsw2DEcRdNGF3jn2B86dR8VbjFGjBTCwodypy21KRXHJSB6feCGpBzgi90R+/3
	704l7ZRSXzuJme5c8MPCMwmgC7RCPbzgWE2vg9hHKC+wJf8fU8bXPsnCkKIPwThkqiYuns
	MFfX5Uj/VSuhWuFU6DDiRgEY4l1EQdBpOXqJtGr/tH3UqoRBtyOKHRItIHw4H9IHWQni5C
	Bq1SBzDEL77d2PS56IhEdEfV2oyBPbYzBFwNfcQhLsdjpI8NhsjckRL5r1w8ag==
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 4hz26p0frmzNdD
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 14:37:54 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 46b77
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 14:37:53 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: 0dfc112ac722 - stable/14 - openssh: Remove residual blank line at start of Makefile
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: 0dfc112ac722b1f0437c198f6b58a2536e69be49
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 14:37:53 +0000
Message-Id: <6ac3b641.46b77.6ec6e7d8@gitrepo.freebsd.org>

The branch stable/14 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=0dfc112ac722b1f0437c198f6b58a2536e69be49

commit 0dfc112ac722b1f0437c198f6b58a2536e69be49
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2026-10-05 14:35:54 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-05 14:37:30 +0000

    openssh: Remove residual blank line at start of Makefile
    
    This is part of commit e9ac41698b2f in main by imp@
---
 secure/usr.bin/scp/Makefile         | 1 -
 secure/usr.bin/sftp/Makefile        | 1 -
 secure/usr.bin/ssh-add/Makefile     | 1 -
 secure/usr.bin/ssh-agent/Makefile   | 1 -
 secure/usr.bin/ssh-keygen/Makefile  | 1 -
 secure/usr.bin/ssh-keyscan/Makefile | 1 -
 secure/usr.bin/ssh/Makefile         | 1 -
 secure/usr.bin/tests/Makefile       | 1 -
 secure/usr.sbin/Makefile            | 1 -
 secure/usr.sbin/Makefile.inc        | 1 -
 secure/usr.sbin/sshd/Makefile       | 1 -
 secure/usr.sbin/tests/Makefile      | 1 -
 12 files changed, 12 deletions(-)

diff --git a/secure/usr.bin/scp/Makefile b/secure/usr.bin/scp/Makefile
index 2a79fa3773f8..8d38d815d3fb 100644
--- a/secure/usr.bin/scp/Makefile
+++ b/secure/usr.bin/scp/Makefile
@@ -1,4 +1,3 @@
-
 .include <src.opts.mk>
 .include "${SRCTOP}/secure/ssh.mk"
 
diff --git a/secure/usr.bin/sftp/Makefile b/secure/usr.bin/sftp/Makefile
index fe59af49f3ba..cc13a86794c5 100644
--- a/secure/usr.bin/sftp/Makefile
+++ b/secure/usr.bin/sftp/Makefile
@@ -1,4 +1,3 @@
-
 .include <src.opts.mk>
 .include "${SRCTOP}/secure/ssh.mk"
 
diff --git a/secure/usr.bin/ssh-add/Makefile b/secure/usr.bin/ssh-add/Makefile
index 504c65ff043e..8de508bd6c12 100644
--- a/secure/usr.bin/ssh-add/Makefile
+++ b/secure/usr.bin/ssh-add/Makefile
@@ -1,4 +1,3 @@
-
 .include <src.opts.mk>
 .include "${SRCTOP}/secure/ssh.mk"
 
diff --git a/secure/usr.bin/ssh-agent/Makefile b/secure/usr.bin/ssh-agent/Makefile
index a96af6255b7e..06abc627fcd5 100644
--- a/secure/usr.bin/ssh-agent/Makefile
+++ b/secure/usr.bin/ssh-agent/Makefile
@@ -1,4 +1,3 @@
-
 .include <src.opts.mk>
 .include "${SRCTOP}/secure/ssh.mk"
 
diff --git a/secure/usr.bin/ssh-keygen/Makefile b/secure/usr.bin/ssh-keygen/Makefile
index e15b7aafbb45..89e61e68ee55 100644
--- a/secure/usr.bin/ssh-keygen/Makefile
+++ b/secure/usr.bin/ssh-keygen/Makefile
@@ -1,4 +1,3 @@
-
 .include <src.opts.mk>
 .include "${SRCTOP}/secure/ssh.mk"
 
diff --git a/secure/usr.bin/ssh-keyscan/Makefile b/secure/usr.bin/ssh-keyscan/Makefile
index 72057781a286..baa7f54b048d 100644
--- a/secure/usr.bin/ssh-keyscan/Makefile
+++ b/secure/usr.bin/ssh-keyscan/Makefile
@@ -1,4 +1,3 @@
-
 .include <src.opts.mk>
 .include "${SRCTOP}/secure/ssh.mk"
 
diff --git a/secure/usr.bin/ssh/Makefile b/secure/usr.bin/ssh/Makefile
index ad4b692c961c..df85f47d5975 100644
--- a/secure/usr.bin/ssh/Makefile
+++ b/secure/usr.bin/ssh/Makefile
@@ -1,4 +1,3 @@
-
 .include <src.opts.mk>
 .include "${SRCTOP}/secure/ssh.mk"
 
diff --git a/secure/usr.bin/tests/Makefile b/secure/usr.bin/tests/Makefile
index b8996030aafc..29b1b564beca 100644
--- a/secure/usr.bin/tests/Makefile
+++ b/secure/usr.bin/tests/Makefile
@@ -1,4 +1,3 @@
-
 .PATH:		${SRCTOP}/tests
 KYUAFILE=	yes
 
diff --git a/secure/usr.sbin/Makefile b/secure/usr.sbin/Makefile
index c0521b95cdb4..50b863096138 100644
--- a/secure/usr.sbin/Makefile
+++ b/secure/usr.sbin/Makefile
@@ -1,4 +1,3 @@
-
 .include <src.opts.mk>
 
 SUBDIR= 
diff --git a/secure/usr.sbin/Makefile.inc b/secure/usr.sbin/Makefile.inc
index 5c01baa093b7..b660f1cc6638 100644
--- a/secure/usr.sbin/Makefile.inc
+++ b/secure/usr.sbin/Makefile.inc
@@ -1,4 +1,3 @@
-
 BINDIR?=	/usr/sbin
 
 .include "../Makefile.inc"
diff --git a/secure/usr.sbin/sshd/Makefile b/secure/usr.sbin/sshd/Makefile
index f0a6105e83b6..23a053f27ae7 100644
--- a/secure/usr.sbin/sshd/Makefile
+++ b/secure/usr.sbin/sshd/Makefile
@@ -1,4 +1,3 @@
-
 .include <src.opts.mk>
 .include "${SRCTOP}/secure/ssh.mk"
 
diff --git a/secure/usr.sbin/tests/Makefile b/secure/usr.sbin/tests/Makefile
index b8996030aafc..29b1b564beca 100644
--- a/secure/usr.sbin/tests/Makefile
+++ b/secure/usr.sbin/tests/Makefile
@@ -1,4 +1,3 @@
-
 .PATH:		${SRCTOP}/tests
 KYUAFILE=	yes
 

From nobody Mon Oct  5 14:41:10 2026
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 4hz2BZ2Prlz6jy4s
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 14:41:10 +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 4hz2BZ1P8wz3JhJ
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 14:41:10 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791211270;
	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=9RpL40lqzUEGbqiBdkSM5L4EJ3mZwpu4lsJNCtawXTc=;
	b=jUCfpJ0QHvYLQYdt8LFHG0ToR2CfSLAK8RnqjGdOFHfRENZLbajudctF7z99cmHI26RAkY
	YNa2ShZJcVXOqq0xydI5xbWxtuhYwRKaJGZqyPpvXyL58ghkPsI6atwws3W2iL+9GTd8Tk
	z56ZyEoRjHThxXNa1RSQfzVVrMPmb7Q9SuICUq6XLVfY3sMezNBGsX5xdpwKlMlTa8jZnB
	YSR/L7aQkbGsmyUJ8SuyHfTNf+m5yd60THNFC+RN4Qb3R+xneCUiTQNuNOjwO8YKTGSWVh
	+LLMZe24ufVWHw4iAZsRbTS4rbuOvZAaw5+QhV6HmYZL9jpiYPsnAfgkJ+F+BQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791211270;
	b=SLcaMG5HFjcIprjMQlVzZYo8YOJWnjnWvTuBWg694UdLk+LWQvt2yZPenyXxTfwklNkI4v
	nlrCApDCHLnGtuEORwCn3OBLjnxkpL+gdlm5WIiSZevXFI+XsLSBSPpx2P2BmganCRJDKK
	VwROTxZ91wmY1EU8Xk1hwyk2dqekmR35+WwLBmCB5a8vjpWuUZpSgmgRZRK9d97vELDvt/
	6VasDMlOtHKut6DaDbv+jFp22WHwDtvXYswCine4+QAziHEe/rmxAX38Ji0ywAitjsn84V
	eHNMnf5ontfR2H4YUGZ/skvq73BnOsUsaGZpgf1oIGNr+fbFw8xCinl8JMLr4w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791211270;
	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=9RpL40lqzUEGbqiBdkSM5L4EJ3mZwpu4lsJNCtawXTc=;
	b=mgRy0tOCxHQIW3eXTq+wOLm3c7k+t0C2DxfDblxYRArv4dQxqWBGNNy3LyxL73zoH7rztN
	Nj/zl7W0JH+22cfBqgwspl4HrlmGFXFkIGhcOL9mSIr5fz8oKYQOkULze2GhlPr8W9D3r0
	5XO3cxZKY3Dgz55q8T6edduxezisMO7TeOXqrtdsxrRacrLj0eb4fVFLwuokzKOPRQwnWg
	+mPgdYgG4cKm9P+2fjsvFOrrC5j7K4ixR8IEMMrGnKTVeibKOBcsyx+MzhNXY7MP1blRjF
	i/WRg6MwnkVjBOrxd+WMfgWdz1r7R4UZECeNIG6C7duJ2MsYvJ+Tt7ZWdEZYew==
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 4hz2BZ0NCRzNjN
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 14:41:10 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 19a05
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 14:41:10 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: b690ed49ffd0 - stable/14 - openssh: Add reference for another local patch
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: b690ed49ffd0d7467789badb742e977aff1406b7
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 14:41:10 +0000
Message-Id: <6ac3b706.19a05.3b812171@gitrepo.freebsd.org>

The branch stable/14 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=b690ed49ffd0d7467789badb742e977aff1406b7

commit b690ed49ffd0d7467789badb742e977aff1406b7
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2026-05-15 16:16:45 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-05 14:40:50 +0000

    openssh: Add reference for another local patch
    
    A bug fix was committed locally and submitted upstream.  Document it in
    our upgrade instructions, as these sometimes take a long time before
    getting merged.
    
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 6531070132b0210aaaeb08c0dc93cb272bed348e)
    (cherry picked from commit 14d6926293569048d2d04f6e5a13d80f192ad99e)
---
 crypto/openssh/FREEBSD-upgrade | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/crypto/openssh/FREEBSD-upgrade b/crypto/openssh/FREEBSD-upgrade
index 815c11a8f8ca..6987956ce163 100644
--- a/crypto/openssh/FREEBSD-upgrade
+++ b/crypto/openssh/FREEBSD-upgrade
@@ -188,6 +188,11 @@
    internet protocols are supported by the kernel before trying to
    connect to the target host.  This avoids confusing the user with
    spurious error messages.
+
+12) EVP_CIPHER_CTX_get_iv() stub bugfix
+
+   Bug fix submitted upstream at
+   https://bugzilla.mindrot.org/show_bug.cgi?id=3873
 
 
 This port was brought to you by (in no particular order) DARPA, NAI

From nobody Mon Oct  5 14:41:11 2026
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 4hz2Bb4MKcz6jy7Y
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 14:41:11 +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 4hz2Bb27lqz3JhP
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 14:41:11 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791211271;
	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=pu8xdD/ME3LlOaBh3LxzTmzrddznU7ORHovzdC51dmM=;
	b=AC4dfwcgzg4mXGzNYsMrOnx5jKjW99nZGBAX0VWzeURyOqBISIX/04qmF7wN2mfBZdaEJL
	ZU76MC0lRsXf6hzG5Qn/G1fgS2qmBAmJAUoB9ovZGSbvwDof7xc1WszU3wDJEekVwVrZ0O
	UIY+n1b7OcGYHD53ELEWY/seQVNNqluj1mu+IozOs02mJcKA+OI7FIf025cmQE6J1YIFZo
	TPGgMcXk3p61bR53ySYJeGL+zReGMiX8wP4m0wssMYwQgRquM2lVxOdfrsrZaYNPWkuDkc
	zREpbaAKUf8414ehnFdvZmH49OqzpSTY8grQxagGjA59JyhjHlxBaYIxGYTzhg==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791211271;
	b=e81eyWS3T17cScKB4SNxqrHr0EWkbszXqWsCQjdiQKrA21KB1yZE7LpcseTWFaAvsN7Bzr
	wkb/7MZu3Jr9ns9KkjxtUUKTXUxUzx03lgVxB6LFjjP4VmVfng2WNlHd02VcIPHTrhmIGU
	+QgjSpLhIwEPCKQbJXd+x4BgDwnvjj9BIImnVgKiCumI/ep8siNFLcIYc8XL7EVQjKSO8q
	gKIN7AoQYCZdkvvOLnS3CrQDRN0UI/tYMvu0gCM0msh8UqgELQ9Q8H3ttJCxi7rRtWb9o1
	GkwP1jwKCeJyyVIVqoR9/CEGcqOjDQBduzvyluG/RlqTRLnBwZ+pam315QKdjw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791211271;
	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=pu8xdD/ME3LlOaBh3LxzTmzrddznU7ORHovzdC51dmM=;
	b=vKt/93zYRWkh24XNDRCHYHINKkJHYrwmBaFJ85Gezd6Frs8Wc2Vw/QqhJ6AWjS3FCy5O5X
	Tg1bUEeg0Fm9pDfJiDnNdIrRNa7GRvPqfKD4Xvu5siUTevUWln1Oi/9w1M8Eba0ktb5VU6
	m10wuBksDXOwAwDczA5BmP3NHGEIMSg5cN2Z8zWWJdHjG6YYTYsmVi+CyxCoUYBp7/Dwcc
	nsr0D2fpbFadCviracGAY+/zMnxTqD4DgtAhZW4aE5a91JtJLvlhzJylo22SN9ioiHRXCI
	iGj2UumllwQzXhTEhFjJ4K0NQPa2KwR0EQCNf3hTYzITAz1ey0SNNnZIce4a/Q==
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 4hz2Bb18lYzP8G
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 14:41:11 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 196a1
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 14:41:11 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: 2082f443dda8 - stable/14 - openssh: Add date bump command to FREEBSD-upgrade instructions
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: 2082f443dda8f7f2bbe21ddee7c88af809348c78
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 14:41:11 +0000
Message-Id: <6ac3b707.196a1.6ae89fb2@gitrepo.freebsd.org>

The branch stable/14 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=2082f443dda8f7f2bbe21ddee7c88af809348c78

commit 2082f443dda8f7f2bbe21ddee7c88af809348c78
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2026-08-24 01:36:25 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-05 14:40:50 +0000

    openssh: Add date bump command to FREEBSD-upgrade instructions
    
    Provide a convenient in-place sed edit command to update the FreeBSD
    VersionAddendum dates with today's date.
    
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 0ec81f6a531bf7b3b06e869c99295f3d4ab9ed8e)
    (cherry picked from commit 2ba5b9da2be10261c383035bef932cd37d52f903)
---
 crypto/openssh/FREEBSD-upgrade | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/crypto/openssh/FREEBSD-upgrade b/crypto/openssh/FREEBSD-upgrade
index 6987956ce163..f536ade84788 100644
--- a/crypto/openssh/FREEBSD-upgrade
+++ b/crypto/openssh/FREEBSD-upgrade
@@ -69,6 +69,11 @@
     version.h, and update the default value in sshd_config and
     sshd_config.5.
 
+    $ sed -E -i "" "s/FreeBSD-202[0-9]{5}/FreeBSD-$(date +%Y%m%d)/" \
+        crypto/openssh/sshd_config \
+        crypto/openssh/sshd_config.5 \
+        crypto/openssh/version.h
+
 11) Diff against the vendor branch:
 
     $ git diff --diff-filter=M vendor/openssh/X.YpZ HEAD:crypto/openssh

From nobody Mon Oct  5 15:25:04 2026
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 4hz39b05Ybz6k1s2
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 15:25:23 +0000 (UTC)
	(envelope-from freebsd@oldach.net)
Received: from mp80.oldach.net (hmo.in-vpn.de [IPv6:2001:67c:1407:60::1])
	(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 ECDSA (prime256v1) client-digest SHA256)
	(Client CN "mp80.oldach.net", Issuer "YE2" (not verified))
	by mx1.freebsd.org (Postfix) with ESMTPS id 4hz39X1lMyz4CZ3
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 15:25:20 +0000 (UTC)
	(envelope-from freebsd@oldach.net)
Authentication-Results: mx1.freebsd.org;
	dkim=none;
	spf=pass (mx1.freebsd.org: domain of freebsd@oldach.net designates 2001:67c:1407:60::1 as permitted sender) smtp.mailfrom=freebsd@oldach.net;
	dmarc=pass (policy=none) header.from=oldach.net
Received: from mp80.oldach.net (localhost [127.0.0.1])
	by mp80.oldach.net (8.18.2/8.18.2) with ESMTPS id 695FP4BU073649
	(version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO);
	Mon, 5 Oct 2026 17:25:04 +0200 (CEST)
	(envelope-from freebsd@oldach.net)
Received: (from hmo@localhost)
	by mp80.oldach.net (8.18.2/8.18.2/Submit) id 695FP4VL073648;
	Mon, 5 Oct 2026 17:25:04 +0200 (CEST)
	(envelope-from freebsd@oldach.net)
Message-Id: <202610051525.695FP4VL073648@mp80.oldach.net>
X-Authentication-Warning: mp80.oldach.net: hmo set sender to freebsd@oldach.net using -f
Subject: Re: git: 687a0d4a6b23 - stable/15 - OpenSSH: Update to 10.1p1
In-Reply-To: <6ac3acf8.452d9.8573132@gitrepo.freebsd.org> from Ed Maste at "5 Oct 2026 13:58:16"
To: emaste@FreeBSD.org (Ed Maste)
Date: Mon, 5 Oct 2026 17:25:04 +0200 (CEST)
Cc: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
        dev-commits-src-branches@FreeBSD.org
From: freebsd@oldach.net (Helge Oldach)
X-No-Archive: Yes
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Greylist: inspected by milter-greylist-4.6.4 (mp80.oldach.net [0.0.0.0]); Mon, 05 Oct 2026 17:25:04 +0200 (CEST) for IP:127.0.0.1 DOMAIN:localhost HELO:mp80.oldach.net FROM:freebsd@oldach.net RCPT:
X-Spamd-Bar: /
X-Spamd-Result: default: False [-0.80 / 15.00];
	DMARC_POLICY_ALLOW(-0.50)[oldach.net,none];
	R_SPF_ALLOW(-0.20)[+mx];
	MIME_GOOD(-0.10)[text/plain];
	R_DKIM_NA(0.00)[];
	ARC_NA(0.00)[];
	FROM_NO_DN(0.00)[];
	ASN(0.00)[asn:29670, ipnet:2001:67c:1400::/45, country:DE];
	MIME_TRACE(0.00)[0:+];
	MLMMJ_DEST(0.00)[dev-commits-src-branches@FreeBSD.org];
	MID_RHS_MATCH_FROMTLD(0.00)[];
	RCVD_TLS_LAST(0.00)[];
	FROM_EQ_ENVFROM(0.00)[];
	HAS_XAW(0.00)[];
	MISSING_XM_UA(0.00)[];
	RCVD_COUNT_TWO(0.00)[2];
	TO_MATCH_ENVRCPT_SOME(0.00)[];
	TO_DN_NONE(0.00)[];
	RCPT_COUNT_THREE(0.00)[4]
X-Rspamd-Queue-Id: 4hz39X1lMyz4CZ3

Ed Maste wrote on Mon, 05 Oct 2026 15:58:16 +0200 (CEST):
> The branch stable/15 has been updated by emaste:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=687a0d4a6b2391cd045951e4e431dd585d131575
> 
> commit 687a0d4a6b2391cd045951e4e431dd585d131575
> Author:     Ed Maste <emaste@FreeBSD.org>
> AuthorDate: 2026-05-12 20:24:10 +0000
> Commit:     Ed Maste <emaste@FreeBSD.org>
> CommitDate: 2026-10-05 13:47:51 +0000
> 
>     OpenSSH: Update to 10.1p1

It seems that an adaption of lib/libpam/modules/pam_ssh/pam_ssh.c is required as the function ssh_add_identity (declared in crypto/openssh/authfd.h) has changed with 10.1p1:

===> lib/libpam/modules/pam_ssh (all)
--- .depend ---
echo pam_ssh.so.6: /usr/obj/usr/src/amd64.amd64/tmp/usr/lib/libprivatessh.a /usr/obj/usr/src/amd64.amd64/tmp/usr/lib/libpam.a >> .depend
--- pam_ssh.o ---
cc -target x86_64-unknown-freebsd15.1 --sysroot=/usr/obj/usr/src/amd64.amd64/tmp -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin -DOPENPAM_STATIC_MODULES -O2 -pipe -fno-common -I/usr/src/crypto/openssh -include ssh_namespace.h   -I/usr/src/contrib/openpam/include -I/usr/src/lib/libpam -DOPENPAM_DEBUG -ffile-prefix-map=/usr/src=/usr/src -ffile-prefix-map=/usr/obj/usr/src=/usr/obj -MD  -MF.depend.pam_ssh.o -MTpam_ssh.o -std=gnu17 -Wno-format-zero-length -fstack-protector-strong  -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wno-pointer-sign -Wdate-time -Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable -Wno-error=unused-but-set-parameter -Wno-error=cast-function-type-mismatch  -Qunused-arguments     -c /usr/src/lib/libpam/modules/pam_ssh/pam_ssh.c -o pam_ssh.o
/usr/src/lib/libpam/modules/pam_ssh/pam_ssh.c:350:8: error: too many arguments to function call, expected 8, have 9
  350 |                         if (ssh_add_identity(fd, psk->key, psk->comment) == 0)
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/src/lib/libpam/modules/pam_ssh/pam_ssh.c:65:72: note: expanded from macro 'ssh_add_identity'
   65 |         ssh_add_identity_constrained(auth, key, comment, 0, 0, 0, NULL, NULL, 0)
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                          ^
/usr/src/crypto/openssh/authfd.h:50:5: note: 'Fssh_ssh_add_identity_constrained' declared here
   50 | int     ssh_add_identity_constrained(int sock, struct sshkey *key,
      |         ^                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   51 |     const char *comment, u_int life, u_int confirm, const char *provider,
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   52 |     struct dest_constraint **dest_constraints, size_t ndest_constraints);
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/src/crypto/openssh/ssh_namespace.h:600:39: note: expanded from macro 'ssh_add_identity_constrained'
  600 | #define ssh_add_identity_constrained            Fssh_ssh_add_identity_constrained
      |                                                 ^
1 error generated.
*** [pam_ssh.o] Error code 1

make[7]: stopped making "all" in /usr/src/lib/libpam/modules/pam_ssh
make[7]: 1 error



From nobody Mon Oct  5 15:36:49 2026
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 4hz3Qr4mm0z6k3Hg
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 15:36:52 +0000 (UTC)
	(envelope-from freebsd@oldach.net)
Received: from mp80.oldach.net (hmo.in-vpn.de [IPv6:2001:67c:1407:60::1])
	(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 ECDSA (prime256v1) client-digest SHA256)
	(Client CN "mp80.oldach.net", Issuer "YE2" (not verified))
	by mx1.freebsd.org (Postfix) with ESMTPS id 4hz3Qq3Rr7z4DXy
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 15:36:51 +0000 (UTC)
	(envelope-from freebsd@oldach.net)
Authentication-Results: mx1.freebsd.org;
	dkim=none;
	spf=pass (mx1.freebsd.org: domain of freebsd@oldach.net designates 2001:67c:1407:60::1 as permitted sender) smtp.mailfrom=freebsd@oldach.net;
	dmarc=pass (policy=none) header.from=oldach.net
Received: from mp80.oldach.net (localhost [127.0.0.1])
	by mp80.oldach.net (8.18.2/8.18.2) with ESMTPS id 695FanvA082502
	(version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO);
	Mon, 5 Oct 2026 17:36:50 +0200 (CEST)
	(envelope-from freebsd@oldach.net)
Received: (from hmo@localhost)
	by mp80.oldach.net (8.18.2/8.18.2/Submit) id 695FanmI082500;
	Mon, 5 Oct 2026 17:36:49 +0200 (CEST)
	(envelope-from freebsd@oldach.net)
Message-Id: <202610051536.695FanmI082500@mp80.oldach.net>
X-Authentication-Warning: mp80.oldach.net: hmo set sender to freebsd@oldach.net using -f
Subject: Re: git: 687a0d4a6b23 - stable/15 - OpenSSH: Update to 10.1p1
In-Reply-To: <202610051525.695FP4VL073648@mp80.oldach.net> from Helge Oldach at "5 Oct 2026 17:25:04"
To: emaste@FreeBSD.org
Date: Mon, 5 Oct 2026 17:36:49 +0200 (CEST)
Cc: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
        dev-commits-src-branches@FreeBSD.org
From: freebsd@oldach.net (Helge Oldach)
X-No-Archive: Yes
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-Greylist: inspected by milter-greylist-4.6.4 (mp80.oldach.net [0.0.0.0]); Mon, 05 Oct 2026 17:36:50 +0200 (CEST) for IP:127.0.0.1 DOMAIN:localhost HELO:mp80.oldach.net FROM:freebsd@oldach.net RCPT:
X-Spamd-Bar: /
X-Spamd-Result: default: False [-0.80 / 15.00];
	DMARC_POLICY_ALLOW(-0.50)[oldach.net,none];
	R_SPF_ALLOW(-0.20)[+mx];
	MIME_GOOD(-0.10)[text/plain];
	R_DKIM_NA(0.00)[];
	ARC_NA(0.00)[];
	FROM_NO_DN(0.00)[];
	ASN(0.00)[asn:29670, ipnet:2001:67c:1400::/45, country:DE];
	MIME_TRACE(0.00)[0:+];
	MLMMJ_DEST(0.00)[dev-commits-src-branches@FreeBSD.org];
	MID_RHS_MATCH_FROMTLD(0.00)[];
	RCVD_TLS_LAST(0.00)[];
	FROM_EQ_ENVFROM(0.00)[];
	HAS_XAW(0.00)[];
	MISSING_XM_UA(0.00)[];
	RCVD_COUNT_TWO(0.00)[2];
	TO_MATCH_ENVRCPT_SOME(0.00)[];
	TO_DN_NONE(0.00)[];
	RCPT_COUNT_THREE(0.00)[4]
X-Rspamd-Queue-Id: 4hz3Qq3Rr7z4DXy

Helge Oldach wrote on Mon, 05 Oct 2026 17:25:04 +0200 (CEST):
> Ed Maste wrote on Mon, 05 Oct 2026 15:58:16 +0200 (CEST):
> > The branch stable/15 has been updated by emaste:
> > 
> > URL: https://cgit.FreeBSD.org/src/commit/?id=687a0d4a6b2391cd045951e4e431dd585d131575
> > 
> > commit 687a0d4a6b2391cd045951e4e431dd585d131575
> > Author:     Ed Maste <emaste@FreeBSD.org>
> > AuthorDate: 2026-05-12 20:24:10 +0000
> > Commit:     Ed Maste <emaste@FreeBSD.org>
> > CommitDate: 2026-10-05 13:47:51 +0000
> > 
> >     OpenSSH: Update to 10.1p1
> 
> It seems that an adaption of lib/libpam/modules/pam_ssh/pam_ssh.c is required as the function ssh_add_identity (declared in crypto/openssh/authfd.h) has changed with 10.1p1:

Actually, b76b05c04cc9ed2cd053c7b367c92628447ede6f is missing in stable/15.

Kind regards
Helge

From nobody Mon Oct  5 16:40:30 2026
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 4hz4rT3KXrz6n6Ps
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 16:40:41 +0000 (UTC)
	(envelope-from bogorodskiy@gmail.com)
Received: from mail-ed1-x536.google.com (mail-ed1-x536.google.com [IPv6:2a00:1450:4864:20::536])
	(using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
	 key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256
	 client-signature RSA-PSS (2048 bits) client-digest SHA256)
	(Client CN "smtp.gmail.com", Issuer "WR4" (verified OK))
	by mx1.freebsd.org (Postfix) with ESMTPS id 4hz4rS3KkKz4NyL
	for <dev-commits-src-branches@freebsd.org>; Mon, 05 Oct 2026 16:40:40 +0000 (UTC)
	(envelope-from bogorodskiy@gmail.com)
Authentication-Results: mx1.freebsd.org;
	dkim=pass header.d=gmail.com header.s=20251104 header.b=OHCuPdrz;
	spf=pass (mx1.freebsd.org: domain of bogorodskiy@gmail.com designates 2a00:1450:4864:20::536 as permitted sender) smtp.mailfrom=bogorodskiy@gmail.com;
	dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=freebsd.org (policy=none)
Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-6acbdbc1725so2722398a12.3
        for <dev-commits-src-branches@freebsd.org>; Mon, 05 Oct 2026 09:40:40 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20251104; t=1791218434; x=1791823234; darn=freebsd.org;
        h=user-agent:in-reply-to:content-disposition:content-type
         :mime-version:references:message-id:subject:cc:to:from:date:sender
         :from:to:cc:subject:date:message-id:reply-to:content-type;
        bh=d7gAXtvfjgNQEQZiKWXrbFjlAXPw+4NPXv4vSclJ2Qc=;
        b=OHCuPdrzct/1ZDrXhWfp/8gPIAr8j33Rz4jnU2ZNlU78amr4EXw6dGI8YmjIGPPawF
         hj0eEc8tsFAV9m/lZUjSQ5mFMJNeYbSwFhjdz1K9aXw8EMXJp6MOQwltCHRumG2Q1aX2
         PUJZ+5DtdqfmzATbO+zSyYcNmE+tiTSRkN6wkKjdxR2hC4LuGG8OSU4B/JODY4/iyeh+
         IxKzFjMPWQ/hRQoZEjtA7Sv5vOTQTTkodwbzr6hwmNS0q9UuCFhoQYJc3+gELDdkIYE8
         vjarJ1fucFGvxwih1kPpLafuo7UK49jPM5B1CQBvr9f7DIvAbmP47PHM4TmJxf5jRDL1
         sU4w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791218434; x=1791823234;
        h=user-agent:in-reply-to:content-disposition:content-type
         :mime-version:references:message-id:subject:cc:to:from:date:sender
         :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
         :reply-to:content-type;
        bh=d7gAXtvfjgNQEQZiKWXrbFjlAXPw+4NPXv4vSclJ2Qc=;
        b=CfwYEYzE4yTugAcyigkb99OS51dbyPOuZ/TM9lfC5ttmLyL2/Y9Q8xmgq1fU7ZUDi3
         5iJlBZbSjTURHHt8LB0hQgyOg6AGe4L7TEeXwc3emvD5+XF8OcfPOovo6MGNYFUqL8jl
         MxSmm4FUi3ieU/FQOE1Axxb8liKwte+VFExDsucC8E9lToHV9hk/SnpWJaekRU98yow7
         dicfmL9Nkf7IooNkiezERqDZUH9DUAwyotvG9z4IBcld/56Z6ZUFErMlWc4E3Cqf04mK
         aonQ4zsiCR7OxyHTo+0TXwdW7C21DTKTQFus7C15uc4w445FZvJW8OoeqHOE6rd+LFdF
         9wHw==
X-Forwarded-Encrypted: i=1; AKwUvBxmrcN136jNMLjKc41VojzMVKR/MM57MPvon0G1JMHutgdOB6bJevfSF2zh/ZEZO9H/afYAGn/F+bBzjvCBSZ4ID17PjDTnqPA=@freebsd.org
X-Gm-Message-State: AFuF++lL5tcMfPSlbKFB8kmNjXSBPBxDFNksVAnvCwL+GYbYcuW9R8ep
	SJolOFvvAEJ6UG7w8CfCoIZiPF2PpY4/AUcq2uBfu8VcZn+9RS36vhFe4A0Y62w5
X-Gm-Gg: AYBFou1rIqabNjXDIKB7QjcKPxWBkxu7GvjbnJf8qxc/AiclEkrdCxu7KcdxE+sT1J7
	nLg/Vsn51ro1Hxku14yp6GE2N1QZ+F7EMXw2crIE5UNdfHffHnAjnmmohvchQjF2Ty0hQua3K3I
	XlruhWLuF5WEdu2Zn9S1uzRhJONbw2vSZt4m+8l2Qakftnd35PtZIky60V2DaeqSQJrT/XiHhDF
	CrF7mXg7IF1ccjORqvJ8gdWw32yEgWyXS/Yf1azF/PmkwTACamZd4IcFDczcfOxa6mDWE1RazRx
	cJ627lNU/6yFV68iEq6EtI4ciqZv3SZi8J+FYRxqCQbg54GOKVtQt+BykPcG+B2FVveb5muV/+8
	T51e1vO9q5NlmC27/SiusV3aLWlAGwGrpdX0M4IHOtOSfVoAIxW2FC4LbNBzTmVALcf8nJuhGe7
	4cNU+RH+sWffo7/LTFy6Q/yLLS7khQsBkirXqCA+wXO0caafpZ8rw7H/lLFEvyPr246nZ1UFGt3
	HlQfqB+mLtZSmZi8Ukk5oE3XJpAgZTQuPcgkGAIOEBD5Y6f5oGdNxOP2ivW6la+HQkMit2G6pB0
X-Received: by 2002:a17:907:d26:b0:c2e:4b90:3c55 with SMTP id a640c23a62f3a-c2e6e9ca0f3mr677812566b.5.1791218433803;
        Mon, 05 Oct 2026 09:40:33 -0700 (PDT)
Received: from tulp (2001-1c02-1a15-3000-2727-f7d1-9628-aa81.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:2727:f7d1:9628:aa81])
        by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c3156360e7esm101387466b.74.2026.10.05.09.40.33
        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
        Mon, 05 Oct 2026 09:40:33 -0700 (PDT)
Date: Mon, 5 Oct 2026 18:40:30 +0200
From: Roman Bogorodskiy <novel@freebsd.org>
To: Ed Maste <emaste@freebsd.org>
Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org,
	dev-commits-src-branches@freebsd.org
Subject: Re: git: 687a0d4a6b23 - stable/15 - OpenSSH: Update to 10.1p1
Message-ID: <asPS_vDkyXL9w1HW@tulp>
References: <6ac3acf8.452d9.8573132@gitrepo.freebsd.org>
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <6ac3acf8.452d9.8573132@gitrepo.freebsd.org>
User-Agent: Mutt/2.4.1 (2026-07-04)
X-Spamd-Bar: /
X-Spamd-Result: default: False [0.40 / 15.00];
	MID_RHS_NOT_FQDN(0.50)[];
	FORGED_SENDER(0.30)[novel@freebsd.org,bogorodskiy@gmail.com];
	R_DKIM_ALLOW(-0.20)[gmail.com:s=20251104];
	R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4864::/56];
	MIME_GOOD(-0.10)[text/plain];
	DMARC_POLICY_SOFTFAIL(0.10)[freebsd.org : SPF not aligned (relaxed), DKIM not aligned (relaxed),none];
	TO_DN_SOME(0.00)[];
	RCVD_VIA_SMTP_AUTH(0.00)[];
	MIME_TRACE(0.00)[0:+];
	DWL_DNSWL_NONE(0.00)[gmail.com:dkim];
	FREEMAIL_ENVFROM(0.00)[gmail.com];
	ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US];
	RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::536:from];
	MLMMJ_DEST(0.00)[dev-commits-src-branches@freebsd.org];
	RCVD_COUNT_TWO(0.00)[2];
	FROM_NEQ_ENVFROM(0.00)[novel@freebsd.org,bogorodskiy@gmail.com];
	FROM_HAS_DN(0.00)[];
	RCPT_COUNT_THREE(0.00)[4];
	TO_MATCH_ENVRCPT_SOME(0.00)[];
	RCVD_TLS_LAST(0.00)[];
	PREVIOUSLY_DELIVERED(0.00)[dev-commits-src-branches@freebsd.org];
	ARC_NA(0.00)[];
	DKIM_TRACE(0.00)[gmail.com:+]
X-Rspamd-Queue-Id: 4hz4rS3KkKz4NyL

  Ed Maste wrote:

> The branch stable/15 has been updated by emaste:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=687a0d4a6b2391cd045951e4e431dd585d131575
> 
> commit 687a0d4a6b2391cd045951e4e431dd585d131575
> Author:     Ed Maste <emaste@FreeBSD.org>
> AuthorDate: 2026-05-12 20:24:10 +0000
> Commit:     Ed Maste <emaste@FreeBSD.org>
> CommitDate: 2026-10-05 13:47:51 +0000
> 
>     OpenSSH: Update to 10.1p1

...

It looks like it also needs b76b05c04cc9ed2cd053c7b367c92628447ede6f to
fix build.

From nobody Mon Oct  5 19:26:21 2026
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 4hz8Wd535lz6vHZL
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 19:26: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 "YR2" (not verified))
	by mx1.freebsd.org (Postfix) with ESMTPS id 4hz8Wd4b35z4qvR
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 19:26:21 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791228381;
	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=6Tq4XRq1e1wHE4RQMoLdz+Mo7t13RwG9h2n2ynoJD9c=;
	b=J8hofDoB8V97gsuU68mUlbfn4LWwSja7/Tqf/VsVudttmepXa04PjQqPtcAZP9XcmFCWbZ
	d4nvHQYXqj6E/3YozqKVfkq1rVM/YeTPQsH4ZjK0F2LJiBv6nJPGQu1BC0cI8v7652N9I3
	AVnvcpsHgBATMBRzDnCLo85JszelDbVLWmj6qKROVkkBP4ol93nM8VS7HkKy5chtZXJflX
	bL2ske3RBkF9diBHvEokxroP6nrEDdJVqmB9gfgCEoGCEQ/DG3R47j0SBnoqQludpEG08Q
	2j3RPU9ks0nUfGksEKcHwSlGSkeu2rmibIOGGoUNSMANH+u7S0J6eRMyzWcGRg==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791228381;
	b=srNEU6FwJZmM6XrBKIJAj2Gi0xoyrOJTBLS+7BObDTirhApa0wzvtqdkY3jxaRsPw6TcV6
	Z03fgFWKaKVb06c1fpKS9ZBMyPZKQD+NXxoxRQbLqk+/084k//Uys7wmNjNiY8bpGNSC0t
	5kZhJYprprtuMkeKU3YVv+YxCnmsE6Q+wCgLK7TWQ7xfeqP0uwA6gzjZViSTpR1VNtREYn
	i6DBvefOAFCq2JxYXaxPx9wfIk4xkfaBtES3c+UYCWBdvfZpzfaGp+cb/JFMQM7cxaOOuI
	QIs4A1mYIdDrK32AIN8H1ixxWiHD2E4NdL24FrJ2Rhw/DUc0KIfOVyKSNEI3fQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791228381;
	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=6Tq4XRq1e1wHE4RQMoLdz+Mo7t13RwG9h2n2ynoJD9c=;
	b=AJqBraink3RRKtVQa226eEadWQTiXGrgN4iJ2E+e1T0pG12z2CrnTy1S6cK/OLhtyjhjZ5
	QxXpFl8+sNPTvk1RrUvQ9AfZixWrLnwtq2yKf6j53lvxe45ucikGFLnEiGQBLZfzvqHaL2
	2frtdFehgyZv0V5EA4uwKj7TKKOPo6dvvIQ798lXGIIDaBRasugiTRaZLhQe3ty21MEWp0
	3J1/SqQxpcNJLqqzUjP/Eof/BSug+PdUFiql6ahlOs+QPG2xJPPgEQlspTHR6JhwbHozAg
	Uh/N8IrR+t+qpcKLI/oDvtJ2PVcEL+xPK6AqaGGQGSV+GfADu+7NvNxw+ajAHw==
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 4hz8Wd3ZYszZSG
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 19:26:21 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 402a1
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 19:26:21 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ahmad Khalifa <vexeduxr@FreeBSD.org>
Subject: git: 2192d42bbcde - stable/14 - stand/images: remove translucent pixels around orb
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: vexeduxr
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: 2192d42bbcde78de89177994889481ae6d334f6e
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 19:26:21 +0000
Message-Id: <6ac3f9dd.402a1.7bfdb408@gitrepo.freebsd.org>

The branch stable/14 has been updated by vexeduxr:

URL: https://cgit.FreeBSD.org/src/commit/?id=2192d42bbcde78de89177994889481ae6d334f6e

commit 2192d42bbcde78de89177994889481ae6d334f6e
Author:     Ahmad Khalifa <vexeduxr@FreeBSD.org>
AuthorDate: 2026-10-02 02:11:32 +0000
Commit:     Ahmad Khalifa <vexeduxr@FreeBSD.org>
CommitDate: 2026-10-05 19:19:48 +0000

    stand/images: remove translucent pixels around orb
    
    Remove semi-transparent pixels around the orb. These become more
    pronounced when the orb is used as the spash screen image.
    
    While here also strip metadata.
    
    MFC after:      3 days
    Reviewed by:    tsoome
    Differential Revision:  https://reviews.freebsd.org/D60163
    
    (cherry picked from commit f7663278c2ba527dc681b1a806d4cc78ea49452b)
---
 stand/images/freebsd-logo-rev.png | Bin 39052 -> 34732 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/stand/images/freebsd-logo-rev.png b/stand/images/freebsd-logo-rev.png
index 6e2088df4654..b17e93789116 100644
Binary files a/stand/images/freebsd-logo-rev.png and b/stand/images/freebsd-logo-rev.png differ

From nobody Mon Oct  5 19:26:22 2026
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 4hz8Wg0fPkz6vHFc
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 19:26:23 +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 4hz8Wf5Jdrz4qrt
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 19:26:22 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791228382;
	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=Nlv6/PBvgYVCw3LkvC5nbVyxgOULkGNtSLDYzwGYV3s=;
	b=o/qFbhHa94CRFq7R/kSGNa3WfSIxbJfbfTSl5qkCctPXcBDjfZ6y4/JMob3FeDHRxsE5h1
	QCrPFgnYezkMVj0rQSXI1c63o3qHeELyv1qsz//xB+NEzZzE8nLsdf5/MXi6yAQ56jxOQg
	WBB5ev3kb495urXCx/MDChDTO113VuumqicupOcy4SoSYVoDv2onzudWcSKrMpdymJrpz+
	zUFLhL908HQB9/uoUpb0TTyhM3bc501X4g20HQ883nIn8zyKJJpIpqs1Na8X/U7edf+HuV
	YC0pos2o38XmfXgidx9aaytQYHggQLx9iwIUChGuGwklUZIjVsq94Ur0JS1qCQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791228382;
	b=o0sbexeG0q/2ZKk6H4wOqzwKcBkNHksOBzw5litlqYUevQdGRXdWiBe3ECjBuCh5E1acIo
	uyGCSXt0y+Cntyeh0qo8NZhjJdbV0nZhd4kR4UhKKN/JycMVl5pOvKOp7WHHdtCxBzvkfd
	9kNLr5MW2M2mglaF+35++P2HEhOQq3r4HnlVlE6hVtKzaOY05/TXdurgMFsS29b6VxakWn
	/ziOm9jyh24mzAO/fONQaKXcHLiRX0xirvFeW2lIMhs04ncIY9LyMcofj7lZxgDnwiDE2C
	8BWW235YCbgMc+x6kIM92rk3jqxYcRLYOpOUl6GkYwJRzwlMhnGct+ZZ1ahkow==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791228382;
	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=Nlv6/PBvgYVCw3LkvC5nbVyxgOULkGNtSLDYzwGYV3s=;
	b=ppWtCRqKMKU3ENn4n+G3CUuZHu8XumIJc5I0IsNnTpfFX6fp82Ct9th0t2gHZfMEU6OyE+
	+kDduaqTTjY2eWuI4YuNaghfW07vQ/dLwOOSkNrslbRmDbocTptH7chOa9LsFX5luruPgF
	7QDrQvLrL0FhSKErhUKG0dmzoAQMKZe+5lkLHGN7IWK9bPYdYSuE5NO90eyPyicmilxCUM
	8ftKm3TcJHMwegT8XkA7BzpoMzvAjoUTWakI0pF4KAWQca5f0zH8k41FIOOVl6GtEEpPzr
	z27B7cm35F++Heu4KNxLeUF2K+IA/6TNicl7bMeggfwo1dzgC6hq6VMO1im+HQ==
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 4hz8Wf4LnkzZGh
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 19:26:22 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 40aac
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 19:26:22 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ahmad Khalifa <vexeduxr@FreeBSD.org>
Subject: git: 98cd53be408d - stable/15 - stand/images: remove translucent pixels around orb
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: vexeduxr
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 98cd53be408d3118004a254449d943bfb8a7f25c
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 19:26:22 +0000
Message-Id: <6ac3f9de.40aac.17f374e5@gitrepo.freebsd.org>

The branch stable/15 has been updated by vexeduxr:

URL: https://cgit.FreeBSD.org/src/commit/?id=98cd53be408d3118004a254449d943bfb8a7f25c

commit 98cd53be408d3118004a254449d943bfb8a7f25c
Author:     Ahmad Khalifa <vexeduxr@FreeBSD.org>
AuthorDate: 2026-10-02 02:11:32 +0000
Commit:     Ahmad Khalifa <vexeduxr@FreeBSD.org>
CommitDate: 2026-10-05 19:25:26 +0000

    stand/images: remove translucent pixels around orb
    
    Remove semi-transparent pixels around the orb. These become more
    pronounced when the orb is used as the spash screen image.
    
    While here also strip metadata.
    
    MFC after:      3 days
    Reviewed by:    tsoome
    Differential Revision:  https://reviews.freebsd.org/D60163
    
    (cherry picked from commit f7663278c2ba527dc681b1a806d4cc78ea49452b)
---
 stand/images/freebsd-logo-rev.png | Bin 39052 -> 34732 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/stand/images/freebsd-logo-rev.png b/stand/images/freebsd-logo-rev.png
index 6e2088df4654..b17e93789116 100644
Binary files a/stand/images/freebsd-logo-rev.png and b/stand/images/freebsd-logo-rev.png differ

From nobody Mon Oct  5 19:33:04 2026
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 4hz8gN60sYz6vHv1
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Mon, 05 Oct 2026 19:33:04 +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 4hz8gN3k6dz4rZy
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 19:33:04 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791228784;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=qDce9Zk1n9+BaRiOtfdbW5+I3lI3HrtCySZi6a42K4A=;
	b=ctlal18G2E8yj8if5yfIANDwfHVmxkhN0klLyOubBJVhWjyhEj6J/eV00PUup1bJuHoJP3
	gKXT6guQ+CH+eP1CjdBOMb7Tzkfambe7VQf1NiJsQuouBw/tJ92SykOk/gsws1AkElFUv6
	EvWs17qxrH+PbqLNGTXDx4mFi84aDEk7avzc6MrNFGPvqVJ4U0Q+/kwlx8NhVVIUzmQzss
	U27LSj5gZhpVcSvSglGBPI8Act3Y9/4SjERuexzZDJC63raPPo8jh1HB7lTtNz7+ZP2Szt
	vtAJxm0jzm22yiPTolw5F0SKi0h5SXDJJu1UV72hE+8TmMxotfYohVUVLiwiWQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791228784;
	b=t9JEugdTEHkWh8PfwbBoTABMNNnl7uylECjYLmYL+jTtYtOE9wNFpwKZPotGI8gf9Cjyoo
	Dye1lNZeUmA4+A6CA5sjLYKXcFFc9waPl2cXcEdanvvF0nv4VrsM8AFTvhk8tOXSPghlkX
	m59CZyPO6VyYaqre/Jz+sTRhiBDfMTVHbmnkWnApQC2dljWyikQP6y9LF5bdhKhvG9I9yU
	cbGrIyGgEwXDOs/Bb4CpWnr0rtLmFKtWfCYAWbY3wifJemMhQcxmjno/4IbMEifhaPun5c
	ha9Hid+xAdQMtphO/7dgqRM/gcYv2983nkQ3wLNDINJnGl1sVkBBqNjKgUCPxg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791228784;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=qDce9Zk1n9+BaRiOtfdbW5+I3lI3HrtCySZi6a42K4A=;
	b=qdmCOH9FuDgACkheR7oZ7SMgHoUdoXQYdOI9WoNdijVlkpKKeCOsgn81YmFrvKn9S323P0
	yD8KmTbUrZguLH1qcPksBlnQZw/DoEnC63fUYnF4dJJzQylp9g0MEz/5cbKH0pHS+eKgJp
	CEjAEca+XwA1yl2ZWAs4bHYUwYVrMRIfW4L8zjgmAc3tu5p8lNr6ClgvDwRX6DvYLC6sAw
	CwoY4Wih17JwVT0WT3rFdUlBc4cVsqmsqtkwK9NCX+Ef340ws/e8TFI8ieMVKjmeP0JdIs
	OF6ybUz5RSt4fzhf9P8xgj8HzQ/wRNv5Xmzmg+ZIigafNT2p6qGwkL4Cypcn5Q==
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 4hz8gN1HgGzZWc
	for <dev-commits-src-branches@FreeBSD.org>; Mon, 05 Oct 2026 19:33:04 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 412a1
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Mon, 05 Oct 2026 19:33:04 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Cc: Jose Luis Duran <jlduran@FreeBSD.org>
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: 01f93565ff8e - stable/14 - secure: Adapt Makefile to ssh-sk-client everywhere
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: 01f93565ff8e91ed9074d32f119d77fb40edc63a
Auto-Submitted: auto-generated
Date: Mon, 05 Oct 2026 19:33:04 +0000
Message-Id: <6ac3fb70.412a1.7cd5d68c@gitrepo.freebsd.org>

The branch stable/14 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=01f93565ff8e91ed9074d32f119d77fb40edc63a

commit 01f93565ff8e91ed9074d32f119d77fb40edc63a
Author:     Jose Luis Duran <jlduran@FreeBSD.org>
AuthorDate: 2025-04-17 19:08:02 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-05 19:32:38 +0000

    secure: Adapt Makefile to ssh-sk-client everywhere
    
    Upstream commit 7b47b40b1 ("adapt Makefile to ssh-sk-client everywhere")
    adapted the Makefiles to ssh-sk-client.  Do the same here.
    
    Reviewed by:    emaste
    Approved by:    emaste (mentor)
    Differential Revision:  https://reviews.freebsd.org/D49795
    
    (cherry picked from commit 65d8491719bbc88ed45637d2381931c2d29cfe87)
---
 secure/lib/libssh/Makefile                | 1 -
 secure/libexec/ssh-keysign/Makefile       | 2 +-
 secure/libexec/ssh-pkcs11-helper/Makefile | 2 +-
 secure/ssh.mk                             | 1 +
 secure/usr.bin/ssh-add/Makefile           | 2 +-
 secure/usr.bin/ssh-agent/Makefile         | 2 +-
 secure/usr.bin/ssh-keygen/Makefile        | 3 +--
 secure/usr.bin/ssh-keyscan/Makefile       | 2 +-
 secure/usr.bin/ssh/Makefile               | 2 +-
 secure/usr.sbin/sshd/Makefile             | 3 ++-
 10 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/secure/lib/libssh/Makefile b/secure/lib/libssh/Makefile
index 0a95c401c52f..65c9b06cd573 100644
--- a/secure/lib/libssh/Makefile
+++ b/secure/lib/libssh/Makefile
@@ -39,7 +39,6 @@ SRCS=	${LIBOPENSSH_SRCS} \
 	kexsntrup761x25519.c kexmlkem768x25519.c sntrup761.c kexgen.c \
 	sftp-realpath.c platform-pledge.c platform-tracing.c platform-misc.c \
 	sshbuf-io.c
-SRCS+=	ssh-sk-client.c
 
 PACKAGE=	ssh
 
diff --git a/secure/libexec/ssh-keysign/Makefile b/secure/libexec/ssh-keysign/Makefile
index 129b34199fad..e3fc783264d7 100644
--- a/secure/libexec/ssh-keysign/Makefile
+++ b/secure/libexec/ssh-keysign/Makefile
@@ -3,7 +3,7 @@
 .include "${SRCTOP}/secure/ssh.mk"
 
 PROG=	ssh-keysign
-SRCS=	ssh-keysign.c readconf.c uidswap.c
+SRCS=	ssh-keysign.c readconf.c uidswap.c $(SKSRCS)
 MAN=	ssh-keysign.8
 BINMODE=4555
 
diff --git a/secure/libexec/ssh-pkcs11-helper/Makefile b/secure/libexec/ssh-pkcs11-helper/Makefile
index 34fb59381305..88fc7553882a 100644
--- a/secure/libexec/ssh-pkcs11-helper/Makefile
+++ b/secure/libexec/ssh-pkcs11-helper/Makefile
@@ -3,7 +3,7 @@
 .include "${SRCTOP}/secure/ssh.mk"
 
 PROG=	ssh-pkcs11-helper
-SRCS=	ssh-pkcs11-helper.c ssh-pkcs11.c
+SRCS=	ssh-pkcs11-helper.c ssh-pkcs11.c $(SKSRCS)
 MAN=	ssh-pkcs11-helper.8
 
 LIBADD=	crypto ssh
diff --git a/secure/ssh.mk b/secure/ssh.mk
index 641343ac993a..84d9a7f57032 100644
--- a/secure/ssh.mk
+++ b/secure/ssh.mk
@@ -5,6 +5,7 @@
 SSHDIR=		${SRCTOP}/crypto/openssh
 
 SFTP_CLIENT_SRCS=sftp-common.c sftp-client.c sftp-glob.c
+SKSRCS=	ssh-sk-client.c
 
 CFLAGS+= -I${SSHDIR} -include ssh_namespace.h
 
diff --git a/secure/usr.bin/ssh-add/Makefile b/secure/usr.bin/ssh-add/Makefile
index 8de508bd6c12..c908881ca2e9 100644
--- a/secure/usr.bin/ssh-add/Makefile
+++ b/secure/usr.bin/ssh-add/Makefile
@@ -2,7 +2,7 @@
 .include "${SRCTOP}/secure/ssh.mk"
 
 PROG=	ssh-add
-SRCS=	ssh-add.c ssh-sk-client.c
+SRCS=	ssh-add.c $(SKSRCS)
 PACKAGE=	ssh
 
 LIBADD=	ssh
diff --git a/secure/usr.bin/ssh-agent/Makefile b/secure/usr.bin/ssh-agent/Makefile
index 06abc627fcd5..49d5fe77e943 100644
--- a/secure/usr.bin/ssh-agent/Makefile
+++ b/secure/usr.bin/ssh-agent/Makefile
@@ -2,7 +2,7 @@
 .include "${SRCTOP}/secure/ssh.mk"
 
 PROG=	ssh-agent
-SRCS=	ssh-agent.c ssh-pkcs11-client.c
+SRCS=	ssh-agent.c ssh-pkcs11-client.c $(SKSRCS)
 PACKAGE=	ssh
 
 LIBADD=	crypto ssh
diff --git a/secure/usr.bin/ssh-keygen/Makefile b/secure/usr.bin/ssh-keygen/Makefile
index 89e61e68ee55..c9205e71d219 100644
--- a/secure/usr.bin/ssh-keygen/Makefile
+++ b/secure/usr.bin/ssh-keygen/Makefile
@@ -2,8 +2,7 @@
 .include "${SRCTOP}/secure/ssh.mk"
 
 PROG=	ssh-keygen
-# XXX ssh-sk-client.c in libssh maybe?
-SRCS=	ssh-keygen.c sshsig.c ssh-sk-client.c
+SRCS=	ssh-keygen.c sshsig.c $(SKSRCS)
 PACKAGE=	ssh
 
 LIBADD=	crypto ssh
diff --git a/secure/usr.bin/ssh-keyscan/Makefile b/secure/usr.bin/ssh-keyscan/Makefile
index baa7f54b048d..522e47411011 100644
--- a/secure/usr.bin/ssh-keyscan/Makefile
+++ b/secure/usr.bin/ssh-keyscan/Makefile
@@ -2,7 +2,7 @@
 .include "${SRCTOP}/secure/ssh.mk"
 
 PROG=	ssh-keyscan
-SRCS=	ssh-keyscan.c
+SRCS=	ssh-keyscan.c $(SKSRCS)
 PACKAGE=	ssh
 
 LIBADD=	ssh
diff --git a/secure/usr.bin/ssh/Makefile b/secure/usr.bin/ssh/Makefile
index df85f47d5975..acb1fd4eaa25 100644
--- a/secure/usr.bin/ssh/Makefile
+++ b/secure/usr.bin/ssh/Makefile
@@ -10,7 +10,7 @@ MLINKS=	ssh.1 slogin.1
 PACKAGE=	ssh
 
 SRCS=	ssh.c readconf.c clientloop.c sshtty.c \
-	sshconnect.c sshconnect2.c mux.c
+	sshconnect.c sshconnect2.c mux.c $(SKSRCS)
 
 # gss-genr.c really belongs in libssh; see src/secure/lib/libssh/Makefile
 SRCS+=	gss-genr.c
diff --git a/secure/usr.sbin/sshd/Makefile b/secure/usr.sbin/sshd/Makefile
index 23a053f27ae7..79ee4f330eba 100644
--- a/secure/usr.sbin/sshd/Makefile
+++ b/secure/usr.sbin/sshd/Makefile
@@ -6,7 +6,8 @@ CONFSDIR=	/etc/ssh
 PROG=	sshd
 SRCS=	sshd.c \
 	platform-listen.c \
-	servconf.c sshpty.c srclimit.c groupaccess.c auth2-methods.c
+	servconf.c sshpty.c srclimit.c groupaccess.c auth2-methods.c \
+	$(SKSRCS)
 PACKAGE=	ssh
 
 MAN=	sshd.8 sshd_config.5

From nobody Tue Oct  6 00:35:02 2026
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 4hzHMp531Nz6vgqg
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 00:35:02 +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 4hzHMp4Y4Vz4KTK
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 00:35:02 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791246902;
	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=k6mfp6QQD5MbcRRMW/y44MPqJ/gs2nfVRQfsP75gOe0=;
	b=opODpmQ5iMFf+jc259ODBrLzX4KOL4NAUUX7iKOFobUBLSi7ki6MowVtXsxc0aHkDaMtGc
	WHDbV9RChfLG4Vx3r1vgj4opGeGks8cJKKxsjD2YJi+fMVb7G41vj1qSeV+bEvNyMY+vYY
	uU6OHMbG58hAJaS0W3FfO9S1LOeEYXAmLnfw0MfdN2+VG/HUt7klszbVWW7xpi1x4PVm55
	eofaVPK8+uml3Vec3117UzeYT8m4NKtHDQjmNLJl6v3zttlG65cxTxaavMoqCPf+YRwXff
	wPXAha9ufYT3GGXnaecdCTzoKPElGLeL9EKV09kEYpVcahMdU1rG0GNbtkvfwg==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791246902;
	b=eTOIAgotChAchP1V2AlF+l32mjGYkptIEKLiQzopdQfKuY3GqtvIC3fYgjExWBnE8wdcrl
	zDUhJDyP9dHTltbu/VC66PY3MYz4oQNqA50bix5zvC5OMErH4ubNXq8LZn3DD+rZYC2w/Z
	sthU4C0661SAgp6loynn56IS2Yz8BasBIO3Ew/1WIehwjXgGX4dSFMG7/pn1tfSReYUvyw
	ACy4fNTduU8boZyN4Bkm4uXO3BaQVNuIIZMul3I2+mmNAI5Dl99PibLuhmFig+TS+k3qNK
	fe5xyB1DoyviRrI8oRYM1DDe99WEJiVznB4ycXltrkeyQ/F241saCYrgjDo/NQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791246902;
	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=k6mfp6QQD5MbcRRMW/y44MPqJ/gs2nfVRQfsP75gOe0=;
	b=R8X2JdjWZAoxSgcebkcBE//APwPMysDXO4iP9MXqXwuiX2QHAeUusiHJ9fS2Svas4wilEg
	uTcBkWh7BOsasfqlQv5UVAarSgYCYhKIQe3DoyIr7o/MLbS3Dt9lsoMKo80HtBYy+TfA5Z
	3woFtQl4PEjjziQqADOSeFN7ftQ59SN/+7ppmCTua4ZgKDLIfNAbDQ3UXzuPsdGqQRmYUc
	DmZTgBp50ILFPcVh2tDB/TkCldl8qYT4JrqjcxVeqkByhGZhrCaN9BYZRMgzqX0dGSKVbU
	fQGFKeAZ6NXVJlGnnZwHiOF0AW9g9IVCrr3hz2DyvV4PdujErHFaRP5elWSwdw==
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 4hzHMp3cF3zkQ5
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 00:35:02 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 39d15
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 00:35:02 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: 41c078cae365 - stable/15 - pam_ssh: Fix build - chase OpenSSH function signature change
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 41c078cae365b4ec6f61d9fe40dcb772bff796ba
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 00:35:02 +0000
Message-Id: <6ac44236.39d15.2726885f@gitrepo.freebsd.org>

The branch stable/15 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=41c078cae365b4ec6f61d9fe40dcb772bff796ba

commit 41c078cae365b4ec6f61d9fe40dcb772bff796ba
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2026-05-12 22:49:29 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-06 00:34:42 +0000

    pam_ssh: Fix build - chase OpenSSH function signature change
    
    Reported by: dch
    Fixes: 644b4646c7ac ("OpenSSH: Update to 10.1p1")
    Sponsored by: The FreeBSD Foundation
    
    (cherry picked from commit b76b05c04cc9ed2cd053c7b367c92628447ede6f)
---
 lib/libpam/modules/pam_ssh/pam_ssh.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/libpam/modules/pam_ssh/pam_ssh.c b/lib/libpam/modules/pam_ssh/pam_ssh.c
index 157908b6b910..1fcee93efb69 100644
--- a/lib/libpam/modules/pam_ssh/pam_ssh.c
+++ b/lib/libpam/modules/pam_ssh/pam_ssh.c
@@ -62,7 +62,7 @@
 #include "sshkey.h"
 
 #define ssh_add_identity(auth, key, comment) \
-	ssh_add_identity_constrained(auth, key, comment, 0, 0, 0, NULL, NULL, 0)
+	ssh_add_identity_constrained(auth, key, comment, 0, 0, NULL, NULL, 0)
 
 extern char **environ;
 

From nobody Tue Oct  6 07:50:40 2026
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 4hzT2S3j30z6cW7F
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:40 +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 4hzT2S3RCTz4FrM
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:40 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273040;
	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=pGOxyRoXQZjMiwjoSfMUem9okxpvLjBnLKZ7x1PVCyU=;
	b=dQwAw5nPjpbelvDj4BE7ExqYreuXRwD63tAscZwfBduP9o1gSz5bMtcmNzwtv9f8QfF39u
	wiVuI3nSWVxZZj6rCrUGvPJ1NIgY9/h4vPOsdevTExgFjuOFXmyiYrrONKqk+EZeSVYFrg
	aRzL4UpYD4WS1LRH94cOrCUJYLzLBF0709ZEwkc4stvNRjjowW2kATu3WpAuwqQAz0lVA9
	CtXtOTsLjce4mg1a9NdI0mLhRhH8QO/aWMyJYhdesaI+V6R4UN/iPLo2ae6pxJotVVs71H
	6ft5ElMB8oNSl+VRtQqTS5PMNNejdwb7n0W1xgmnw223wYqDp05Og/d6TVGGiA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273040;
	b=fNJQOsYf1BvkLcFhTTxlGcgOpul2km7Nmub7ZYKKToHF1kOJka003maiDMQ3iJBz4xpa8x
	K+0tuoJvVD+ZjYDbwVWWY5gPArSEMUzd2KkBd4U4os7TLpBG38ZJfyGY6apyLH2qiRMOkk
	iXYdCK618kONEHJnUqhjQK2+grTMahEmDPXY8vEqohoaMT+vanKWWxCrYAl3JGzKcjdVmZ
	razXYF0H0oRxvSA4VGu4aZfjPy1gxr/JFYMfbHMsuMELemYX/NgOlIeBzGMi4KBatIj7Cg
	ujSgu/NJxkrz7oNh85ELXWjh3cclVHAU97ya+UlM+Bs7tkRMhSzDjPG6gp0n0w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273040;
	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=pGOxyRoXQZjMiwjoSfMUem9okxpvLjBnLKZ7x1PVCyU=;
	b=Qg0ZNbEHuI4LcpjnDGt0ZE7vfrJS+hW4+c3kFAgL3NmE1ZX13Z9B+tnhy+/CPMi/dbe2p8
	icUrfNsYwM6rSL0j0Dj2O0MeS9KX22XUjfrCdP4i6tWhpsgTEKxd6WyplrLGCJmlNsrrN4
	M+TVGhiLaTx0JZwOE/KUqdFjrTwyx7LtV0s7tmRQK2csbwTTVYgNcyL2Wrmjt7dTpKFbDK
	Dc1aSg3tMJHxSusUusqagx1VeYmYyC/cQXoOsshpXnyWBXNyvCToAKyuJn8v8RK+ronC6G
	Y8BslV8FD5829ZVgYRrWUjigERJPZQV/YJA4d3NZvlnH9U3LSjgb/RQxBGLg9A==
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 4hzT2S1mDpzxK8
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:40 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 185ac
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:40 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: b75d670fe755 - stable/15 - ufshci: revisit controller reset path and add I/O timeout handling
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: b75d670fe7559ad5fc23c51d805e1786bbddfd22
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:40 +0000
Message-Id: <6ac4a850.185ac.48aff3d4@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=b75d670fe7559ad5fc23c51d805e1786bbddfd22

commit b75d670fe7559ad5fc23c51d805e1786bbddfd22
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2025-09-18 14:37:08 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:45 +0000

    ufshci: revisit controller reset path and add I/O timeout handling
    
    This patch revisits the controller reset path and introduces timeout
    handling for I/O commands.
    
    To support controller reset during driver operation, the controller’s
    construct, destruct, enable, and disable functions are clearly
    separated in ufshci_ctrlr.c. ufshci_ctrlr_hw_reset() function is
    added to leverage enable/disable.
    
    After initialization, ufshci_ctrlr_reset_task() is also introduced to
    ensure controller resets are performed via the task queue.
    
    Timeout handling is designed in five steps. This patch implements
    Step 1 and Step 5, while the remaining steps will be added later.
    The timeout mechanism follows the same shared timeout model used in
    the NVMe driver.
    
    Test: Intentionally delayed UPIU I/O in QEMU to trigger a timeout and
    verify timeout handling.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D52440
    
    (cherry picked from commit 6b841d70960a3a0ec4e43392683053878c403f9c)
---
 sys/dev/ufshci/ufshci_ctrlr.c     | 399 +++++++++++++++++++++++---------------
 sys/dev/ufshci/ufshci_ctrlr_cmd.c |   2 +-
 sys/dev/ufshci/ufshci_dev.c       |   1 -
 sys/dev/ufshci/ufshci_pci.c       |   3 +-
 sys/dev/ufshci/ufshci_private.h   |  41 +++-
 sys/dev/ufshci/ufshci_req_queue.c | 292 ++++++++++++++++++++++++++--
 sys/dev/ufshci/ufshci_req_sdb.c   |  77 +++++++-
 sys/dev/ufshci/ufshci_sim.c       |   1 -
 8 files changed, 633 insertions(+), 183 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index 21639fc8a53f..fd61451f8a9e 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -12,8 +12,108 @@
 #include "ufshci_private.h"
 #include "ufshci_reg.h"
 
+static void
+ufshci_ctrlr_fail(struct ufshci_controller *ctrlr)
+{
+	ctrlr->is_failed = true;
+
+	ufshci_req_queue_fail(ctrlr,
+	    ctrlr->task_mgmt_req_queue.qops.get_hw_queue(
+		&ctrlr->task_mgmt_req_queue));
+	ufshci_req_queue_fail(ctrlr,
+	    ctrlr->transfer_req_queue.qops.get_hw_queue(
+		&ctrlr->transfer_req_queue));
+}
+
+static void
+ufshci_ctrlr_start(struct ufshci_controller *ctrlr, bool resetting)
+{
+	TSENTER();
+
+	/*
+	 * If `resetting` is true, we are on the reset path.
+	 * Re-enable request queues here because ufshci_ctrlr_reset_task()
+	 * disables them during reset.
+	 */
+	if (resetting) {
+		if (ufshci_utmr_req_queue_enable(ctrlr) != 0) {
+			ufshci_ctrlr_fail(ctrlr);
+			return;
+		}
+		if (ufshci_utr_req_queue_enable(ctrlr) != 0) {
+			ufshci_ctrlr_fail(ctrlr);
+			return;
+		}
+	}
+
+	if (ufshci_ctrlr_send_nop(ctrlr) != 0) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
+	/* Initialize UFS target drvice */
+	if (ufshci_dev_init(ctrlr) != 0) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
+	/* Initialize Reference Clock */
+	if (ufshci_dev_init_reference_clock(ctrlr) != 0) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
+	/* Initialize unipro */
+	if (ufshci_dev_init_unipro(ctrlr) != 0) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
+	/*
+	 * Initialize UIC Power Mode
+	 * QEMU UFS devices do not support unipro and power mode.
+	 */
+	if (!(ctrlr->quirks & UFSHCI_QUIRK_IGNORE_UIC_POWER_MODE) &&
+	    ufshci_dev_init_uic_power_mode(ctrlr) != 0) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
+	/* Initialize UFS Power Mode */
+	if (ufshci_dev_init_ufs_power_mode(ctrlr) != 0) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
+	/* Read Controller Descriptor (Device, Geometry) */
+	if (ufshci_dev_get_descriptor(ctrlr) != 0) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
+	if (ufshci_dev_config_write_booster(ctrlr)) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
+	/* TODO: Configure Write Protect */
+
+	/* TODO: Configure Background Operations */
+
+	/*
+	 * If the reset is due to a timeout, it is already attached to the SIM
+	 * and does not need to be attached again.
+	 */
+	if (!resetting && ufshci_sim_attach(ctrlr) != 0) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
+	TSEXIT();
+}
+
 static int
-ufshci_ctrlr_enable_host_ctrlr(struct ufshci_controller *ctrlr)
+ufshci_ctrlr_disable_host_ctrlr(struct ufshci_controller *ctrlr)
 {
 	int timeout = ticks + MSEC_2_TICKS(ctrlr->device_init_timeout_in_ms);
 	sbintime_t delta_t = SBT_1US;
@@ -27,6 +127,35 @@ ufshci_ctrlr_enable_host_ctrlr(struct ufshci_controller *ctrlr)
 		ufshci_mmio_write_4(ctrlr, hce, hce);
 	}
 
+	/* Wait for the HCE flag to change */
+	while (1) {
+		hce = ufshci_mmio_read_4(ctrlr, hce);
+		if (!UFSHCIV(UFSHCI_HCE_REG_HCE, hce))
+			break;
+		if (timeout - ticks < 0) {
+			ufshci_printf(ctrlr,
+			    "host controller failed to disable "
+			    "within %d ms\n",
+			    ctrlr->device_init_timeout_in_ms);
+			return (ENXIO);
+		}
+
+		pause_sbt("ufshci_disable_hce", delta_t, 0, C_PREL(1));
+		delta_t = min(SBT_1MS, delta_t * 3 / 2);
+	}
+
+	return (0);
+}
+
+static int
+ufshci_ctrlr_enable_host_ctrlr(struct ufshci_controller *ctrlr)
+{
+	int timeout = ticks + MSEC_2_TICKS(ctrlr->device_init_timeout_in_ms);
+	sbintime_t delta_t = SBT_1US;
+	uint32_t hce;
+
+	hce = ufshci_mmio_read_4(ctrlr, hce);
+
 	/* Enable UFS host controller */
 	hce |= UFSHCIM(UFSHCI_HCE_REG_HCE);
 	ufshci_mmio_write_4(ctrlr, hce, hce);
@@ -36,7 +165,7 @@ ufshci_ctrlr_enable_host_ctrlr(struct ufshci_controller *ctrlr)
 	 * unstable, so we need to read the HCE value after some time after
 	 * initialization is complete.
 	 */
-	pause_sbt("ufshci_hce", ustosbt(100), 0, C_PREL(1));
+	pause_sbt("ufshci_enable_hce", ustosbt(100), 0, C_PREL(1));
 
 	/* Wait for the HCE flag to change */
 	while (1) {
@@ -51,17 +180,103 @@ ufshci_ctrlr_enable_host_ctrlr(struct ufshci_controller *ctrlr)
 			return (ENXIO);
 		}
 
-		pause_sbt("ufshci_hce", delta_t, 0, C_PREL(1));
+		pause_sbt("ufshci_enable_hce", delta_t, 0, C_PREL(1));
 		delta_t = min(SBT_1MS, delta_t * 3 / 2);
 	}
 
 	return (0);
 }
 
+static int
+ufshci_ctrlr_disable(struct ufshci_controller *ctrlr)
+{
+	int error;
+
+	/* Disable all interrupts */
+	ufshci_mmio_write_4(ctrlr, ie, 0);
+
+	error = ufshci_ctrlr_disable_host_ctrlr(ctrlr);
+	return (error);
+}
+
+static int
+ufshci_ctrlr_enable(struct ufshci_controller *ctrlr)
+{
+	uint32_t ie, hcs;
+	int error;
+
+	error = ufshci_ctrlr_enable_host_ctrlr(ctrlr);
+	if (error)
+		return (error);
+
+	/* Send DME_LINKSTARTUP command to start the link startup procedure */
+	error = ufshci_uic_send_dme_link_startup(ctrlr);
+	if (error)
+		return (error);
+
+	/*
+	 * The device_present(UFSHCI_HCS_REG_DP) bit becomes true if the host
+	 * controller has successfully received a Link Startup UIC command
+	 * response and the UFS device has found a physical link to the
+	 * controller.
+	 */
+	hcs = ufshci_mmio_read_4(ctrlr, hcs);
+	if (!UFSHCIV(UFSHCI_HCS_REG_DP, hcs)) {
+		ufshci_printf(ctrlr, "UFS device not found\n");
+		return (ENXIO);
+	}
+
+	/* Enable additional interrupts by programming the IE register. */
+	ie = ufshci_mmio_read_4(ctrlr, ie);
+	ie |= UFSHCIM(UFSHCI_IE_REG_UTRCE);  /* UTR Completion */
+	ie |= UFSHCIM(UFSHCI_IE_REG_UEE);    /* UIC Error */
+	ie |= UFSHCIM(UFSHCI_IE_REG_UTMRCE); /* UTMR Completion */
+	ie |= UFSHCIM(UFSHCI_IE_REG_DFEE);   /* Device Fatal Error */
+	ie |= UFSHCIM(UFSHCI_IE_REG_UTPEE);  /* UTP Error */
+	ie |= UFSHCIM(UFSHCI_IE_REG_HCFEE);  /* Host Ctrlr Fatal Error */
+	ie |= UFSHCIM(UFSHCI_IE_REG_SBFEE);  /* System Bus Fatal Error */
+	ie |= UFSHCIM(UFSHCI_IE_REG_CEFEE);  /* Crypto Engine Fatal Error */
+	ufshci_mmio_write_4(ctrlr, ie, ie);
+
+	/* TODO: Initialize interrupt Aggregation Control Register (UTRIACR) */
+
+	return (0);
+}
+
+static int
+ufshci_ctrlr_hw_reset(struct ufshci_controller *ctrlr)
+{
+	int error;
+
+	error = ufshci_ctrlr_disable(ctrlr);
+	if (error)
+		return (error);
+
+	error = ufshci_ctrlr_enable(ctrlr);
+	return (error);
+}
+
+static void
+ufshci_ctrlr_reset_task(void *arg, int pending)
+{
+	struct ufshci_controller *ctrlr = arg;
+	int error;
+
+	/* Release resources */
+	ufshci_utmr_req_queue_disable(ctrlr);
+	ufshci_utr_req_queue_disable(ctrlr);
+
+	error = ufshci_ctrlr_hw_reset(ctrlr);
+	if (error)
+		return (ufshci_ctrlr_fail(ctrlr));
+
+	ufshci_ctrlr_start(ctrlr, true);
+}
+
 int
 ufshci_ctrlr_construct(struct ufshci_controller *ctrlr, device_t dev)
 {
-	uint32_t ver, cap, hcs, ie, ahit;
+	uint32_t ver, cap, ahit;
 	uint32_t timeout_period, retry_count;
 	int error;
 
@@ -114,16 +329,15 @@ ufshci_ctrlr_construct(struct ufshci_controller *ctrlr, device_t dev)
 	TUNABLE_INT_FETCH("hw.ufshci.retry_count", &retry_count);
 	ctrlr->retry_count = retry_count;
 
-	/* Disable all interrupts */
-	ufshci_mmio_write_4(ctrlr, ie, 0);
-
-	/* Enable Host Controller */
-	error = ufshci_ctrlr_enable_host_ctrlr(ctrlr);
-	if (error)
-		return (error);
+	ctrlr->enable_aborts = 1;
+	if (ctrlr->quirks & UFSHCI_QUIRK_NOT_SUPPORT_ABORT_TASK)
+		ctrlr->enable_aborts = 0;
+	else
+		TUNABLE_INT_FETCH("hw.ufshci.enable_aborts",
+		    &ctrlr->enable_aborts);
 
-	/* Send DME_LINKSTARTUP command to start the link startup procedure */
-	error = ufshci_uic_send_dme_link_startup(ctrlr);
+	/* Reset the UFSHCI controller */
+	error = ufshci_ctrlr_hw_reset(ctrlr);
 	if (error)
 		return (error);
 
@@ -134,18 +348,6 @@ ufshci_ctrlr_construct(struct ufshci_controller *ctrlr, device_t dev)
 	ahit = 0;
 	ufshci_mmio_write_4(ctrlr, ahit, ahit);
 
-	/*
-	 * The device_present(UFSHCI_HCS_REG_DP) bit becomes true if the host
-	 * controller has successfully received a Link Startup UIC command
-	 * response and the UFS device has found a physical link to the
-	 * controller.
-	 */
-	hcs = ufshci_mmio_read_4(ctrlr, hcs);
-	if (!UFSHCIV(UFSHCI_HCS_REG_DP, hcs)) {
-		ufshci_printf(ctrlr, "UFS device not found\n");
-		return (ENXIO);
-	}
-
 	/* Allocate and initialize UTP Task Management Request List. */
 	error = ufshci_utmr_req_queue_construct(ctrlr);
 	if (error)
@@ -156,27 +358,21 @@ ufshci_ctrlr_construct(struct ufshci_controller *ctrlr, device_t dev)
 	if (error)
 		return (error);
 
-	/* Enable additional interrupts by programming the IE register. */
-	ie = ufshci_mmio_read_4(ctrlr, ie);
-	ie |= UFSHCIM(UFSHCI_IE_REG_UTRCE);  /* UTR Completion */
-	ie |= UFSHCIM(UFSHCI_IE_REG_UEE);    /* UIC Error */
-	ie |= UFSHCIM(UFSHCI_IE_REG_UTMRCE); /* UTMR Completion */
-	ie |= UFSHCIM(UFSHCI_IE_REG_DFEE);   /* Device Fatal Error */
-	ie |= UFSHCIM(UFSHCI_IE_REG_UTPEE);  /* UTP Error */
-	ie |= UFSHCIM(UFSHCI_IE_REG_HCFEE);  /* Host Ctrlr Fatal Error */
-	ie |= UFSHCIM(UFSHCI_IE_REG_SBFEE);  /* System Bus Fatal Error */
-	ie |= UFSHCIM(UFSHCI_IE_REG_CEFEE);  /* Crypto Engine Fatal Error */
-	ufshci_mmio_write_4(ctrlr, ie, ie);
-
-	/* TODO: Initialize interrupt Aggregation Control Register (UTRIACR) */
-
 	/* TODO: Separate IO and Admin slot */
+
 	/*
 	 * max_hw_pend_io is the number of slots in the transfer_req_queue.
 	 * Reduce num_entries by one to reserve an admin slot.
 	 */
 	ctrlr->max_hw_pend_io = ctrlr->transfer_req_queue.num_entries - 1;
 
+	/* Create a thread for the taskqueue. */
+	ctrlr->taskqueue = taskqueue_create("ufshci_taskq", M_WAITOK,
+	    taskqueue_thread_enqueue, &ctrlr->taskqueue);
+	taskqueue_start_threads(&ctrlr->taskqueue, 1, PI_DISK, "ufshci taskq");
+
+	TASK_INIT(&ctrlr->reset_task, 0, ufshci_ctrlr_reset_task, ctrlr);
+
 	return (0);
 }
 
@@ -208,50 +404,21 @@ ufshci_ctrlr_destruct(struct ufshci_controller *ctrlr, device_t dev)
 	bus_release_resource(dev, SYS_RES_MEMORY, ctrlr->resource_id,
 	    ctrlr->resource);
 nores:
+	KASSERT(!mtx_owned(&ctrlr->uic_cmd_lock),
+	    ("destroying uic_cmd_lock while still owned"));
 	mtx_destroy(&ctrlr->uic_cmd_lock);
+
+	KASSERT(!mtx_owned(&ctrlr->sc_mtx),
+	    ("destroying sc_mtx while still owned"));
 	mtx_destroy(&ctrlr->sc_mtx);
 
 	return;
 }
 
-int
+void
 ufshci_ctrlr_reset(struct ufshci_controller *ctrlr)
 {
-	uint32_t ie;
-	int error;
-
-	/* Backup and disable all interrupts */
-	ie = ufshci_mmio_read_4(ctrlr, ie);
-	ufshci_mmio_write_4(ctrlr, ie, 0);
-
-	/* Release resources */
-	ufshci_utmr_req_queue_destroy(ctrlr);
-	ufshci_utr_req_queue_destroy(ctrlr);
-
-	/* Reset Host Controller */
-	error = ufshci_ctrlr_enable_host_ctrlr(ctrlr);
-	if (error)
-		return (error);
-
-	/* Send DME_LINKSTARTUP command to start the link startup procedure */
-	error = ufshci_uic_send_dme_link_startup(ctrlr);
-	if (error)
-		return (error);
-
-	/* Enable interrupts */
-	ufshci_mmio_write_4(ctrlr, ie, ie);
-
-	/* Allocate and initialize UTP Task Management Request List. */
-	error = ufshci_utmr_req_queue_construct(ctrlr);
-	if (error)
-		return (error);
-
-	/* Allocate and initialize UTP Transfer Request List or SQ/CQ. */
-	error = ufshci_utr_req_queue_construct(ctrlr);
-	if (error)
-		return (error);
-
-	return (0);
+	taskqueue_enqueue(ctrlr->taskqueue, &ctrlr->reset_task);
 }
 
 int
@@ -295,84 +462,6 @@ ufshci_ctrlr_send_nop(struct ufshci_controller *ctrlr)
 	return (0);
 }
 
-static void
-ufshci_ctrlr_fail(struct ufshci_controller *ctrlr, bool admin_also)
-{
-	printf("ufshci(4): ufshci_ctrlr_fail\n");
-
-	ctrlr->is_failed = true;
-
-	/* TODO: task_mgmt_req_queue should be handled as fail */
-
-	ufshci_req_queue_fail(ctrlr,
-	    &ctrlr->transfer_req_queue.hwq[UFSHCI_SDB_Q]);
-}
-
-static void
-ufshci_ctrlr_start(struct ufshci_controller *ctrlr)
-{
-	TSENTER();
-
-	if (ufshci_ctrlr_send_nop(ctrlr) != 0) {
-		ufshci_ctrlr_fail(ctrlr, false);
-		return;
-	}
-
-	/* Initialize UFS target drvice */
-	if (ufshci_dev_init(ctrlr) != 0) {
-		ufshci_ctrlr_fail(ctrlr, false);
-		return;
-	}
-
-	/* Initialize Reference Clock */
-	if (ufshci_dev_init_reference_clock(ctrlr) != 0) {
-		ufshci_ctrlr_fail(ctrlr, false);
-		return;
-	}
-
-	/* Initialize unipro */
-	if (ufshci_dev_init_unipro(ctrlr) != 0) {
-		ufshci_ctrlr_fail(ctrlr, false);
-		return;
-	}
-
-	/*
-	 * Initialize UIC Power Mode
-	 * QEMU UFS devices do not support unipro and power mode.
-	 */
-	if (!(ctrlr->quirks & UFSHCI_QUIRK_IGNORE_UIC_POWER_MODE) &&
-	    ufshci_dev_init_uic_power_mode(ctrlr) != 0) {
-		ufshci_ctrlr_fail(ctrlr, false);
-		return;
-	}
-
-	/* Initialize UFS Power Mode */
-	if (ufshci_dev_init_ufs_power_mode(ctrlr) != 0) {
-		ufshci_ctrlr_fail(ctrlr, false);
-		return;
-	}
-
-	/* Read Controller Descriptor (Device, Geometry) */
-	if (ufshci_dev_get_descriptor(ctrlr) != 0) {
-		ufshci_ctrlr_fail(ctrlr, false);
-		return;
-	}
-
-	if (ufshci_dev_config_write_booster(ctrlr)) {
-		ufshci_ctrlr_fail(ctrlr, false);
-		return;
-	}
-
-	/* TODO: Configure Background Operations */
-
-	if (ufshci_sim_attach(ctrlr) != 0) {
-		ufshci_ctrlr_fail(ctrlr, false);
-		return;
-	}
-
-	TSEXIT();
-}
-
 void
 ufshci_ctrlr_start_config_hook(void *arg)
 {
@@ -382,9 +471,9 @@ ufshci_ctrlr_start_config_hook(void *arg)
 
 	if (ufshci_utmr_req_queue_enable(ctrlr) == 0 &&
 	    ufshci_utr_req_queue_enable(ctrlr) == 0)
-		ufshci_ctrlr_start(ctrlr);
+		ufshci_ctrlr_start(ctrlr, false);
 	else
-		ufshci_ctrlr_fail(ctrlr, false);
+		ufshci_ctrlr_fail(ctrlr);
 
 	ufshci_sysctl_initialize_ctrlr(ctrlr);
 	config_intrhook_disestablish(&ctrlr->config_hook);
diff --git a/sys/dev/ufshci/ufshci_ctrlr_cmd.c b/sys/dev/ufshci/ufshci_ctrlr_cmd.c
index 71d163d998af..253f31a93c2e 100644
--- a/sys/dev/ufshci/ufshci_ctrlr_cmd.c
+++ b/sys/dev/ufshci/ufshci_ctrlr_cmd.c
@@ -15,7 +15,7 @@ ufshci_ctrlr_cmd_send_task_mgmt_request(struct ufshci_controller *ctrlr,
 	struct ufshci_request *req;
 	struct ufshci_task_mgmt_request_upiu *upiu;
 
-	req = ufshci_allocate_request_vaddr(NULL, 0, M_WAITOK, cb_fn, cb_arg);
+	req = ufshci_allocate_request_vaddr(NULL, 0, M_NOWAIT, cb_fn, cb_arg);
 
 	req->request_size = sizeof(struct ufshci_task_mgmt_request_upiu);
 	req->response_size = sizeof(struct ufshci_task_mgmt_response_upiu);
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index dd196b1d638b..975468e5156f 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -774,4 +774,3 @@ out:
 	ufshci_dev_disable_write_booster(ctrlr);
 	return (error);
 }
-
diff --git a/sys/dev/ufshci/ufshci_pci.c b/sys/dev/ufshci/ufshci_pci.c
index 8da1c2d342a3..c518c6cf6aae 100644
--- a/sys/dev/ufshci/ufshci_pci.c
+++ b/sys/dev/ufshci/ufshci_pci.c
@@ -49,7 +49,8 @@ static struct _pcsid {
 	uint32_t ref_clk;
 	uint32_t quirks;
 } pci_ids[] = { { 0x131b36, "QEMU UFS Host Controller", UFSHCI_REF_CLK_19_2MHz,
-		    UFSHCI_QUIRK_IGNORE_UIC_POWER_MODE },
+		    UFSHCI_QUIRK_IGNORE_UIC_POWER_MODE |
+			UFSHCI_QUIRK_NOT_SUPPORT_ABORT_TASK },
 	{ 0x98fa8086, "Intel Lakefield UFS Host Controller",
 	    UFSHCI_REF_CLK_19_2MHz,
 	    UFSHCI_QUIRK_LONG_PEER_PA_TACTIVATE |
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index 2e033f84c373..ec388c06e248 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -68,7 +68,6 @@ struct ufshci_request {
 	bool is_admin;
 	int32_t retries;
 	bool payload_valid;
-	bool timeout;
 	bool spare[2]; /* Future use */
 	STAILQ_ENTRY(ufshci_request) stailq;
 };
@@ -82,6 +81,7 @@ enum ufshci_slot_state {
 };
 
 struct ufshci_tracker {
+	TAILQ_ENTRY(ufshci_tracker) tailq;
 	struct ufshci_request *req;
 	struct ufshci_req_queue *req_queue;
 	struct ufshci_hw_queue *hwq;
@@ -121,6 +121,8 @@ struct ufshci_qops {
 	    struct ufshci_req_queue *req_queue);
 	int (*enable)(struct ufshci_controller *ctrlr,
 	    struct ufshci_req_queue *req_queue);
+	void (*disable)(struct ufshci_controller *ctrlr,
+	    struct ufshci_req_queue *req_queue);
 	int (*reserve_slot)(struct ufshci_req_queue *req_queue,
 	    struct ufshci_tracker **tr);
 	int (*reserve_admin_slot)(struct ufshci_req_queue *req_queue,
@@ -137,16 +139,27 @@ struct ufshci_qops {
 
 #define UFSHCI_SDB_Q 0 /* Queue number for a single doorbell queue */
 
+enum ufshci_recovery {
+	RECOVERY_NONE = 0, /* Normal operations */
+	RECOVERY_WAITING,  /* waiting for the reset to complete */
+};
+
 /*
  * Generic queue container used by both SDB (fixed 32-slot bitmap) and MCQ
  * (ring buffer) modes. Fields are shared; some such as sq_head, sq_tail and
  * cq_head are not used in SDB but used in MCQ.
  */
 struct ufshci_hw_queue {
+	struct ufshci_controller *ctrlr;
+	struct ufshci_req_queue *req_queue;
 	uint32_t id;
 	int domain;
 	int cpu;
 
+	struct callout timer;		     /* recovery lock */
+	bool timer_armed;		     /* recovery lock */
+	enum ufshci_recovery recovery_state; /* recovery lock */
+
 	union {
 		struct ufshci_utp_xfer_req_desc *utrd;
 		struct ufshci_utp_task_mgmt_req_desc *utmrd;
@@ -161,6 +174,9 @@ struct ufshci_hw_queue {
 	uint32_t num_entries;
 	uint32_t num_trackers;
 
+	TAILQ_HEAD(, ufshci_tracker) free_tr;
+	TAILQ_HEAD(, ufshci_tracker) outstanding_tr;
+
 	/*
 	 * A Request List using the single doorbell method uses a dedicated
 	 * ufshci_tracker, one per slot.
@@ -177,7 +193,13 @@ struct ufshci_hw_queue {
 	int64_t num_retries;
 	int64_t num_failures;
 
+	/*
+	 * Each lock may be acquired independently.
+	 * When both are required, acquire them in this order to avoid
+	 * deadlocks. (recovery_lock -> qlock)
+	 */
 	struct mtx_padalign qlock;
+	struct mtx_padalign recovery_lock;
 };
 
 struct ufshci_req_queue {
@@ -242,6 +264,9 @@ struct ufshci_controller {
 	4 /* Need to wait 1250us after power mode change */
 #define UFSHCI_QUIRK_CHANGE_LANE_AND_GEAR_SEPARATELY \
 	8 /* Need to change the number of lanes before changing HS-GEAR. */
+#define UFSHCI_QUIRK_NOT_SUPPORT_ABORT_TASK \
+	16 /* QEMU does not support Task Management Request */
+
 	uint32_t ref_clk;
 
 	struct cam_sim *ufshci_sim;
@@ -264,6 +289,9 @@ struct ufshci_controller {
 	/* Fields for tracking progress during controller initialization. */
 	struct intr_config_hook config_hook;
 
+	struct task reset_task;
+	struct taskqueue *taskqueue;
+
 	/* For shared legacy interrupt. */
 	int rid;
 	struct resource *res;
@@ -272,6 +300,8 @@ struct ufshci_controller {
 	uint32_t major_version;
 	uint32_t minor_version;
 
+	uint32_t enable_aborts;
+
 	uint32_t num_io_queues;
 	uint32_t max_hw_pend_io;
 
@@ -345,7 +375,7 @@ void ufshci_sim_detach(struct ufshci_controller *ctrlr);
 /* Controller */
 int ufshci_ctrlr_construct(struct ufshci_controller *ctrlr, device_t dev);
 void ufshci_ctrlr_destruct(struct ufshci_controller *ctrlr, device_t dev);
-int ufshci_ctrlr_reset(struct ufshci_controller *ctrlr);
+void ufshci_ctrlr_reset(struct ufshci_controller *ctrlr);
 /* ctrlr defined as void * to allow use with config_intrhook. */
 void ufshci_ctrlr_start_config_hook(void *arg);
 void ufshci_ctrlr_poll(struct ufshci_controller *ctrlr);
@@ -388,7 +418,9 @@ int ufshci_utmr_req_queue_construct(struct ufshci_controller *ctrlr);
 int ufshci_utr_req_queue_construct(struct ufshci_controller *ctrlr);
 void ufshci_utmr_req_queue_destroy(struct ufshci_controller *ctrlr);
 void ufshci_utr_req_queue_destroy(struct ufshci_controller *ctrlr);
+void ufshci_utmr_req_queue_disable(struct ufshci_controller *ctrlr);
 int ufshci_utmr_req_queue_enable(struct ufshci_controller *ctrlr);
+void ufshci_utr_req_queue_disable(struct ufshci_controller *ctrlr);
 int ufshci_utr_req_queue_enable(struct ufshci_controller *ctrlr);
 void ufshci_req_queue_fail(struct ufshci_controller *ctrlr,
     struct ufshci_hw_queue *hwq);
@@ -404,6 +436,8 @@ void ufshci_req_sdb_destroy(struct ufshci_controller *ctrlr,
     struct ufshci_req_queue *req_queue);
 struct ufshci_hw_queue *ufshci_req_sdb_get_hw_queue(
     struct ufshci_req_queue *req_queue);
+void ufshci_req_sdb_disable(struct ufshci_controller *ctrlr,
+    struct ufshci_req_queue *req_queue);
 int ufshci_req_sdb_enable(struct ufshci_controller *ctrlr,
     struct ufshci_req_queue *req_queue);
 int ufshci_req_sdb_reserve_slot(struct ufshci_req_queue *req_queue,
@@ -489,13 +523,12 @@ _ufshci_allocate_request(const int how, ufshci_cb_fn_t cb_fn, void *cb_arg)
 	struct ufshci_request *req;
 
 	KASSERT(how == M_WAITOK || how == M_NOWAIT,
-	    ("nvme_allocate_request: invalid how %d", how));
+	    ("ufshci_allocate_request: invalid how %d", how));
 
 	req = malloc(sizeof(*req), M_UFSHCI, how | M_ZERO);
 	if (req != NULL) {
 		req->cb_fn = cb_fn;
 		req->cb_arg = cb_arg;
-		req->timeout = true;
 	}
 	return (req);
 }
diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index bb6efa6d2ccc..7aa164d00bec 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -24,6 +24,7 @@ static const struct ufshci_qops sdb_utmr_qops = {
 	.destroy = ufshci_req_sdb_destroy,
 	.get_hw_queue = ufshci_req_sdb_get_hw_queue,
 	.enable = ufshci_req_sdb_enable,
+	.disable = ufshci_req_sdb_disable,
 	.reserve_slot = ufshci_req_sdb_reserve_slot,
 	.reserve_admin_slot = ufshci_req_sdb_reserve_slot,
 	.ring_doorbell = ufshci_req_sdb_utmr_ring_doorbell,
@@ -38,6 +39,7 @@ static const struct ufshci_qops sdb_utr_qops = {
 	.destroy = ufshci_req_sdb_destroy,
 	.get_hw_queue = ufshci_req_sdb_get_hw_queue,
 	.enable = ufshci_req_sdb_enable,
+	.disable = ufshci_req_sdb_disable,
 	.reserve_slot = ufshci_req_sdb_reserve_slot,
 	.reserve_admin_slot = ufshci_req_sdb_reserve_slot,
 	.ring_doorbell = ufshci_req_sdb_utr_ring_doorbell,
@@ -74,6 +76,13 @@ ufshci_utmr_req_queue_destroy(struct ufshci_controller *ctrlr)
 	    &ctrlr->task_mgmt_req_queue);
 }
 
+void
+ufshci_utmr_req_queue_disable(struct ufshci_controller *ctrlr)
+{
+	ctrlr->task_mgmt_req_queue.qops.disable(ctrlr,
+	    &ctrlr->task_mgmt_req_queue);
+}
+
 int
 ufshci_utmr_req_queue_enable(struct ufshci_controller *ctrlr)
 {
@@ -109,6 +118,13 @@ ufshci_utr_req_queue_destroy(struct ufshci_controller *ctrlr)
 	    &ctrlr->transfer_req_queue);
 }
 
+void
+ufshci_utr_req_queue_disable(struct ufshci_controller *ctrlr)
+{
+	ctrlr->transfer_req_queue.qops.disable(ctrlr,
+	    &ctrlr->transfer_req_queue);
+}
+
 int
 ufshci_utr_req_queue_enable(struct ufshci_controller *ctrlr)
 {
@@ -226,31 +242,30 @@ void
 ufshci_req_queue_complete_tracker(struct ufshci_tracker *tr)
 {
 	struct ufshci_req_queue *req_queue = tr->req_queue;
+	struct ufshci_hw_queue *hwq = tr->hwq;
 	struct ufshci_request *req = tr->req;
 	struct ufshci_completion cpl;
 	uint8_t ocs;
 	bool retry, error, retriable;
 
-	mtx_assert(&tr->hwq->qlock, MA_NOTOWNED);
+	mtx_assert(&hwq->qlock, MA_NOTOWNED);
 
 	/* Copy the response from the Request Descriptor or UTP Command
 	 * Descriptor. */
+	cpl.size = tr->response_size;
 	if (req_queue->is_task_mgmt) {
-		cpl.size = tr->response_size;
 		memcpy(&cpl.response_upiu,
-		    (void *)tr->hwq->utmrd[tr->slot_num].response_upiu,
-		    cpl.size);
+		    (void *)hwq->utmrd[tr->slot_num].response_upiu, cpl.size);
 
-		ocs = tr->hwq->utmrd[tr->slot_num].overall_command_status;
+		ocs = hwq->utmrd[tr->slot_num].overall_command_status;
 	} else {
 		bus_dmamap_sync(req_queue->dma_tag_ucd, req_queue->ucdmem_map,
 		    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
 
-		cpl.size = tr->response_size;
 		memcpy(&cpl.response_upiu, (void *)tr->ucd->response_upiu,
 		    cpl.size);
 
-		ocs = tr->hwq->utrd[tr->slot_num].overall_command_status;
+		ocs = hwq->utrd[tr->slot_num].overall_command_status;
 	}
 
 	error = ufshci_req_queue_response_is_error(req_queue, ocs,
@@ -262,9 +277,9 @@ ufshci_req_queue_complete_tracker(struct ufshci_tracker *tr)
 	retry = error && retriable &&
 	    req->retries < req_queue->ctrlr->retry_count;
 	if (retry)
-		tr->hwq->num_retries++;
+		hwq->num_retries++;
 	if (error && req->retries >= req_queue->ctrlr->retry_count && retriable)
-		tr->hwq->num_failures++;
+		hwq->num_failures++;
 
 	KASSERT(tr->req, ("there is no request assigned to the tracker\n"));
 	KASSERT(cpl.response_upiu.header.task_tag ==
@@ -282,7 +297,7 @@ ufshci_req_queue_complete_tracker(struct ufshci_tracker *tr)
 			req->cb_fn(req->cb_arg, &cpl, error);
 	}
 
-	mtx_lock(&tr->hwq->qlock);
+	mtx_lock(&hwq->qlock);
 
 	/* Clear the UTRL Completion Notification register */
 	req_queue->qops.clear_cpl_ntf(req_queue->ctrlr, tr);
@@ -301,6 +316,9 @@ ufshci_req_queue_complete_tracker(struct ufshci_tracker *tr)
 		ufshci_free_request(req);
 		tr->req = NULL;
 		tr->slot_state = UFSHCI_SLOT_STATE_FREE;
+
+		TAILQ_REMOVE(&hwq->outstanding_tr, tr, tailq);
+		TAILQ_INSERT_HEAD(&hwq->free_tr, tr, tailq);
 	}
 
 	mtx_unlock(&tr->hwq->qlock);
@@ -309,7 +327,16 @@ ufshci_req_queue_complete_tracker(struct ufshci_tracker *tr)
 bool
 ufshci_req_queue_process_completions(struct ufshci_req_queue *req_queue)
 {
-	return (req_queue->qops.process_cpl(req_queue));
+	struct ufshci_hw_queue *hwq;
+	bool done;
+
+	hwq = req_queue->qops.get_hw_queue(req_queue);
+
+	mtx_lock(&hwq->recovery_lock);
+	done = req_queue->qops.process_cpl(req_queue);
+	mtx_unlock(&hwq->recovery_lock);
+
+	return (done);
 }
 
 static void
@@ -427,6 +454,225 @@ ufshci_req_queue_fill_utr_descriptor(struct ufshci_utp_xfer_req_desc *desc,
 	desc->prdt_length = prdt_entry_cnt;
 }
 
+static void
+ufshci_req_queue_timeout_recovery(struct ufshci_controller *ctrlr,
+    struct ufshci_hw_queue *hwq)
+{
+	/* TODO: Step 2. Logical unit reset */
+	/* TODO: Step 3. Target device reset */
+	/* TODO: Step 4. Bus reset */
+
+	/*
+	 * Step 5. All previous commands were timeout.
+	 * Recovery failed, reset the host controller.
+	 */
+	ufshci_printf(ctrlr,
+	    "Recovery step 5: Resetting controller due to a timeout.\n");
+	hwq->recovery_state = RECOVERY_WAITING;
+
+	ufshci_ctrlr_reset(ctrlr);
+}
+
+static void
+ufshci_abort_complete(void *arg, const struct ufshci_completion *status,
+    bool error)
+{
+	struct ufshci_tracker *tr = arg;
+
+	/*
+	 * We still need to check the active tracker array, to cover race where
+	 * I/O timed out at same time controller was completing the I/O. An
+	 * abort request always is on the Task Management Request queue, but
+	 * affects either an Task Management Request or an I/O (UTRL) queue, so
+	 * take the appropriate queue lock for the original command's queue,
+	 * since we'll need it to avoid races with the completion code and to
+	 * complete the command manually.
+	 */
+	mtx_lock(&tr->hwq->qlock);
+	if (tr->slot_state != UFSHCI_SLOT_STATE_FREE) {
+		mtx_unlock(&tr->hwq->qlock);
+		/*
+		 * An I/O has timed out, and the controller was unable to abort
+		 * it for some reason.  And we've not processed a completion for
+		 * it yet. Construct a fake completion status, and then complete
+		 * the I/O's tracker manually.
+		 */
+		ufshci_printf(tr->hwq->ctrlr,
+		    "abort task request failed, aborting task manually\n");
+		ufshci_req_queue_manual_complete_tracker(tr,
+		    UFSHCI_DESC_ABORTED, UFSHCI_RESPONSE_CODE_GENERAL_FAILURE);
+
+		if ((status->response_upiu.task_mgmt_response_upiu
+			    .output_param1 ==
+			UFSHCI_TASK_MGMT_SERVICE_RESPONSE_FUNCTION_COMPLETE) ||
+		    (status->response_upiu.task_mgmt_response_upiu
+			    .output_param1 ==
+			UFSHCI_TASK_MGMT_SERVICE_RESPONSE_FUNCTION_SUCCEEDED)) {
+			ufshci_printf(tr->hwq->ctrlr,
+			    "Warning: the abort task request completed \
+			    successfully, but the original task is still incomplete.");
+			return;
+		}
+
+		/* Abort Task failed. Perform recovery steps 2-5 */
+		ufshci_req_queue_timeout_recovery(tr->hwq->ctrlr, tr->hwq);
+	} else {
+		mtx_unlock(&tr->hwq->qlock);
+	}
+}
+
+static void
+ufshci_req_queue_timeout(void *arg)
+{
+	struct ufshci_hw_queue *hwq = arg;
+	struct ufshci_controller *ctrlr = hwq->ctrlr;
+	struct ufshci_tracker *tr;
+	sbintime_t now;
+	bool idle = true;
+	bool fast;
+
+	mtx_assert(&hwq->recovery_lock, MA_OWNED);
+
+	/*
+	 * If the controller is failed, then stop polling. This ensures that any
+	 * failure processing that races with the hwq timeout will fail safely.
+	 */
+	if (ctrlr->is_failed) {
+		ufshci_printf(ctrlr,
+		    "Failed controller, stopping watchdog timeout.\n");
+		hwq->timer_armed = false;
+		return;
+	}
+
+	/*
+	 * Shutdown condition: We set hwq->timer_armed to false in
+	 * ufshci_req_sdb_destroy before calling callout_drain. When we call
+	 * that, this routine might get called one last time. Exit w/o setting a
+	 * timeout. None of the watchdog stuff needs to be done since we're
+	 * destroying the hwq.
+	 */
+	if (!hwq->timer_armed) {
+		ufshci_printf(ctrlr,
+		    "Timeout fired during ufshci_utr_req_queue_destroy\n");
+		return;
+	}
+
+	switch (hwq->recovery_state) {
+	case RECOVERY_NONE:
+		/*
+		 * See if there's any recovery needed. First, do a fast check to
+		 * see if anything could have timed out. If not, then skip
+		 * everything else.
+		 */
+		fast = false;
+		mtx_lock(&hwq->qlock);
*** 338 LINES SKIPPED ***

From nobody Tue Oct  6 07:50:41 2026
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 4hzT2T5DKCz6cW7H
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:41 +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 4hzT2T3XDTz4Fh4
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:41 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273041;
	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=BRCrXqm0mITpVJC6GuP8PIL89WbHqs4OeHzCRPQ4nzE=;
	b=WXB49mppcVnUMst9vuRTklarp768amG+d/WYeoScyQQA4jQ+cg1aOy2aGqYyEmra5XDY3Q
	xpqLGI32Tii8Jst4qCxg+QqWlVOMw2OUmC29AWneCLAAer6MGHfh8FbjYC8L/+M1N3TJRT
	Q9wmzXnh57Hw3BxUEVt6Zi95lbngVHRZhQowE2RI8gn3tl3EKiZZhYlVaYmQLD+TU/lhhh
	c+ZCYGs6FkuB0E+pTdQgcBIV/eqSAgHko8MIRjlVrtCB9/HqfS+oCxpRAX5tu2W3J3CD6d
	pY6IL+2D8fptoEXXyGZWa1paW5O61adVao5mZAL0Zp0ks9YaFw7zJIwGSPpPQw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273041;
	b=iX/EUxCmGgJffZvGaf9ew9uiN0EHL8XCRxyOePkn600AUEG0FZY8RfLK58oCIuUIjU80xA
	q5Y4r//lRlQho3JUhTqu52QhLdzvTj6fBYSq/xocyPeZnZqH6Gsj2d/rl6orYMGsGTgrJv
	zPEnUcfiW/l4eeZXrMCRUOEcTk4IsjNIlcYlFugUZJoI1g7N+AvPupQgOVZUGW+a9mZw1i
	G8hPGGBYo56yqLmf3vlX2qNnm+NdYpUSf+DOYVOGBwYdJbThYocf6CCPaUdcg/i6kFMrjY
	h9yIAmTJMUVtcB247EALFdPndkyJegNVj/Nrm3x8nIKQvK0T/IdCfFaeqRPF/g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273041;
	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=BRCrXqm0mITpVJC6GuP8PIL89WbHqs4OeHzCRPQ4nzE=;
	b=H0EDfDyW6BNl4Kj8X87iHWaWv7FdNvKeWqmXx3sQBItOUsYXTLiMiH4pCC7KXlglsXWZAy
	XaaShy6rZxjdiksJIrVcjMNk99JszWVacKlOlxraP87WaTy2LYAc35jeFIktmVYXbcppe7
	+IJEBX0JnFaVynuI/8780hLUWERYZpsmg350h3WFitr2V01OnSXuO4L91NYuvTJRW51bF6
	adfNt0wTs69XGP2Ihw8ZiRUAiB4k9fAM2wGVCFLE21IDbFKnbYI6z3MUoMGz6QxbEbL5iH
	Ekuq5UVI6aCYJDDf5Fjk1znqh8Z4i/QGE8jp9D/FU4n/SEd78oUBtSpMlTGraQ==
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 4hzT2T2Z5fzxK9
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:41 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 185b0
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:41 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 6dfd9f0a81e0 - stable/15 - ufshci: add helper to convert SCSI LUN to UPIU LUN formats
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 6dfd9f0a81e083dd3fd219789668b3eb7e3e6aeb
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:41 +0000
Message-Id: <6ac4a851.185b0.7932ffe4@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=6dfd9f0a81e083dd3fd219789668b3eb7e3e6aeb

commit 6dfd9f0a81e083dd3fd219789668b3eb7e3e6aeb
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2025-12-01 04:38:24 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:45 +0000

    ufshci: add helper to convert SCSI LUN to UPIU LUN formats
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D53919
    
    (cherry picked from commit 3e3d7e590566c7e1a55bfb0f084c9f64c6c46898)
---
 sys/dev/ufshci/ufshci.h     |  2 ++
 sys/dev/ufshci/ufshci_sim.c | 25 ++++++++++++++++++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/sys/dev/ufshci/ufshci.h b/sys/dev/ufshci/ufshci.h
index b055d2d2d769..188f8c41def1 100644
--- a/sys/dev/ufshci/ufshci.h
+++ b/sys/dev/ufshci/ufshci.h
@@ -335,6 +335,8 @@ struct ufshci_upiu_header {
 		uint8_t flags;
 	};
 	uint8_t lun;
+#define UFSHCI_UPIU_UNIT_NUMBER_ID_MASK 0x7f
+#define UFSHCI_UPIU_WLUN_ID_MASK	0x80
 	uint8_t task_tag;
 
 	/* dword 1 */
diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 828b520614a5..1b80df089a46 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -72,6 +72,28 @@ ufshci_sim_illegal_request(union ccb *ccb)
 	xpt_done(ccb);
 }
 
+/*
+ * The SCSI LUN format and the UFS UPIU LUN format are different.
+ * This function converts the SCSI LUN format to the UFS UPIU LUN format.
+ */
+static uint8_t
+ufshci_sim_translate_scsi_to_ufs_lun(lun_id_t scsi_lun)
+{
+	const int address_format_offset = 8;
+	uint8_t address_format = scsi_lun >> address_format_offset;
+
+	/* Well known logical unit */
+	if (((address_format & RPL_LUNDATA_ATYP_MASK) ==
+		RPL_LUNDATA_ATYP_EXTLUN) &&
+	    ((address_format & RPL_LUNDATA_EXT_EAM_MASK) ==
+		RPL_LUNDATA_EXT_EAM_WK))
+		return ((scsi_lun & UFSHCI_UPIU_UNIT_NUMBER_ID_MASK) |
+		    UFSHCI_UPIU_WLUN_ID_MASK);
+
+	/* Logical unit */
+	return (scsi_lun & UFSHCI_UPIU_UNIT_NUMBER_ID_MASK);
+}
+
 static void
 ufshchi_sim_scsiio(struct cam_sim *sim, union ccb *ccb)
 {
@@ -129,7 +151,8 @@ ufshchi_sim_scsiio(struct cam_sim *sim, union ccb *ccb)
 	upiu->header.trans_type = UFSHCI_UPIU_TRANSACTION_CODE_COMMAND;
 	upiu->header.operational_flags = is_write ? UFSHCI_OPERATIONAL_FLAG_W :
 						    UFSHCI_OPERATIONAL_FLAG_R;
-	upiu->header.lun = csio->ccb_h.target_lun;
+	upiu->header.lun = ufshci_sim_translate_scsi_to_ufs_lun(
+	    csio->ccb_h.target_lun);
 	upiu->header.cmd_set_type = UFSHCI_COMMAND_SET_TYPE_SCSI;
 
 	upiu->expected_data_transfer_length = htobe32(payload_len);

From nobody Tue Oct  6 07:50:42 2026
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 4hzT2V5l1Vz6cW1L
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:42 +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 4hzT2V4JK6z4FhF
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:42 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273042;
	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=vGP1K08ead59kqQ6biFjPTAAeW1HsXwsVhspPsAD6kA=;
	b=iKn/3HCseiyTLw1z5EGrJ2ELug+IPzvuYE5KNuNoAS5rCSzd6FNcM8ABNo1mmQQEpXFDtE
	A1/0Y7uo3olxCFVAB90QDlkR0tv9oc5yzTCCKYHpJJZvhYAunbmt612Wut34Lh/k+xfbWz
	zlxm0a0+BO0W4/qK/iiC5MC1J7DveSSWZBZg14g5ICRS3rCNKU1A6jbZ6OHXVBOsKMxtW0
	FV88TeArv/FNkw+JXeGx1u+S5Emz8d3B+CFwgCw5eLWXdnaMakvmqtcWC7X4shVrdeRpMK
	m+9QqXcjYvrXbAakxy+durg5vhsILTk0Ev/517E51kuFpaUFLk3CLdncwUxirQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273042;
	b=O8FyMFLnAWR3BXOKUa3zxyNJLOUjvS7juVTT9afPwi3Nat2qvSWpDI442zRDOl6XJR3iqs
	usL1G8CZMrOd1K2aoaSaMhbn5iwlu5hHGs8HtPfCw4E4+gH6AMtK4ueB4q4grrU4sQnQL6
	liX8BNm5517ADkkz7wOXVinOUMuJOvygVhkBNWYL/jM7Cq+PUY7jiQb5AHU0y0e0UIFCDc
	DzW6FYmIpmyBb7ntVHk/jP5NdVMDr1FCx/S3Y7TR9Mbkc1fRASyQXvYz1muEj5oDrQpu6/
	v3RXpneZiX1AOkYwsX/O19O54xVsVj6mCx55M28L0/tLpwDvMzib9MM5Q5RXuw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273042;
	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=vGP1K08ead59kqQ6biFjPTAAeW1HsXwsVhspPsAD6kA=;
	b=iOMVVsncIuvPQC+4e+4tR+jyBfJxyiJN7UIj61Ixq/as+RkjmhUrwmCcBztFcMbl/pMBjM
	ekXA3z6eCsoDDKnXw2HK+uTF3Qzd1JWPKwGMTfjOOYsRuDZr7peEBSj8c4gS3miOzZenAF
	vkyZE6TcQ1yzHXq1Myk6DHebflNoRslRWR0pKxNWyCDkpHzf2jgpAxCnahWM7/dFV2JJ4K
	koUDtFfSCKcK3gAI+QfYUeaAq4taGjCr/hDiqtZwKjfBgwu7RukTlf5XrzNoudgux2pa5U
	jmqdfE+Rl/qC+9dnKEZTmUAPyxrhxRY3kUBzPzqcEQlzVmdhqwxP4G2ENXKZ3A==
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 4hzT2V3Mj4zxX9
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:42 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18ffa
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:42 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 17534ff9c2dd - stable/15 - cam/scsi: Support well known logical unit
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 17534ff9c2dd608b7fa6ba212dac810fad91ce02
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:42 +0000
Message-Id: <6ac4a852.18ffa.958db1b@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=17534ff9c2dd608b7fa6ba212dac810fad91ce02

commit 17534ff9c2dd608b7fa6ba212dac810fad91ce02
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2025-12-01 04:38:52 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:46 +0000

    cam/scsi: Support well known logical unit
    
    This patch adds an additional state to probe well-known logical units
    before probing normal logical units.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D53920
    
    (cherry picked from commit ba963776199f84775388a03d072121bf93707020)
---
 sys/cam/cam_ccb.h          |   1 +
 sys/cam/cam_xpt.c          |   1 +
 sys/cam/cam_xpt_internal.h |   1 +
 sys/cam/scsi/scsi_all.h    |   2 +-
 sys/cam/scsi/scsi_xpt.c    | 239 +++++++++++++++++++++++++++++----------------
 5 files changed, 161 insertions(+), 83 deletions(-)

diff --git a/sys/cam/cam_ccb.h b/sys/cam/cam_ccb.h
index 1f110686a658..19f18f36b8c9 100644
--- a/sys/cam/cam_ccb.h
+++ b/sys/cam/cam_ccb.h
@@ -614,6 +614,7 @@ typedef enum {
 } pi_tmflag;
 
 typedef enum {
+	PIM_WLUNS	= 0x400,/* Well known LUNs supported */
 	PIM_ATA_EXT	= 0x200,/* ATA requests can understand ata_ext requests */
 	PIM_EXTLUNS	= 0x100,/* 64bit extended LUNs supported */
 	PIM_SCANHILO	= 0x80,	/* Bus scans from high ID to low ID */
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index cae29226d13c..a97b69fd0d84 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -4680,6 +4680,7 @@ xpt_alloc_target(struct cam_eb *bus, target_id_t target_id)
 	target->refcount = 1;
 	target->generation = 0;
 	target->luns = NULL;
+	target->wluns = NULL;
 	mtx_init(&target->luns_mtx, "CAM LUNs lock", NULL, MTX_DEF);
 	timevalclear(&target->last_reset);
 	/*
diff --git a/sys/cam/cam_xpt_internal.h b/sys/cam/cam_xpt_internal.h
index 5a812e6e7d20..73f50895ee74 100644
--- a/sys/cam/cam_xpt_internal.h
+++ b/sys/cam/cam_xpt_internal.h
@@ -169,6 +169,7 @@ struct cam_et {
 	struct		timeval last_reset;
 	u_int		rpl_size;
 	struct scsi_report_luns_data *luns;
+	struct scsi_report_luns_data *wluns;
 	struct mtx	luns_mtx;	/* Protection for luns field. */
 };
 
diff --git a/sys/cam/scsi/scsi_all.h b/sys/cam/scsi/scsi_all.h
index b6fb66beefcd..e50974edac86 100644
--- a/sys/cam/scsi/scsi_all.h
+++ b/sys/cam/scsi/scsi_all.h
@@ -3057,7 +3057,7 @@ struct scsi_report_luns_data {
 	uint8_t length[4];	/* length of LUN inventory, in bytes */
 	uint8_t reserved[4];	/* unused */
 	/*
-	 * LUN inventory- we only support the type zero form for now.
+	 * LUN inventory- we only support type zero and extended (well-known) formats.
 	 */
 	struct scsi_report_luns_lundata luns[0];
 };
diff --git a/sys/cam/scsi/scsi_xpt.c b/sys/cam/scsi/scsi_xpt.c
index bef35243af98..d0c170867b97 100644
--- a/sys/cam/scsi/scsi_xpt.c
+++ b/sys/cam/scsi/scsi_xpt.c
@@ -130,6 +130,7 @@ typedef enum {
 	PROBE_TUR,
 	PROBE_INQUIRY,	/* this counts as DV0 for Basic Domain Validation */
 	PROBE_FULL_INQUIRY,
+	PROBE_REPORT_WLUNS,
 	PROBE_REPORT_LUNS,
 	PROBE_MODE_SENSE,
 	PROBE_SUPPORTED_VPD_LIST,
@@ -148,6 +149,7 @@ static char *probe_action_text[] = {
 	"PROBE_TUR",
 	"PROBE_INQUIRY",
 	"PROBE_FULL_INQUIRY",
+	"PROBE_REPORT_WLUNS",
 	"PROBE_REPORT_LUNS",
 	"PROBE_MODE_SENSE",
 	"PROBE_SUPPORTED_VPD_LIST",
@@ -567,7 +569,7 @@ static int       proberequestbackoff(struct cam_periph *periph,
 static void	 probedone(struct cam_periph *periph, union ccb *done_ccb);
 static void	 probe_purge_old(struct cam_path *path,
 				 struct scsi_report_luns_data *new,
-				 probe_flags flags);
+				 probe_flags flags, bool is_wlun);
 static void	 probecleanup(struct cam_periph *periph);
 static void	 scsi_find_quirk(struct cam_ed *device);
 static void	 scsi_scan_bus(struct cam_periph *periph, union ccb *ccb);
@@ -817,6 +819,23 @@ again:
 			     /*timeout*/60 * 1000);
 		break;
 	}
+	case PROBE_REPORT_WLUNS:
+	{
+		void *rp;
+
+		rp = malloc(periph->path->target->rpl_size,
+		    M_CAMXPT, M_NOWAIT | M_ZERO);
+		if (rp == NULL) {
+			xpt_print(periph->path,
+			    "Unable to alloc report wluns storage\n");
+			PROBE_SET_ACTION(softc, PROBE_REPORT_LUNS);
+			goto again;
+		}
+		scsi_report_luns(csio, 5, probedone, MSG_SIMPLE_Q_TAG,
+		    RPL_REPORT_WELLKNOWN, rp, periph->path->target->rpl_size,
+		    SSD_FULL_SIZE, 60000);
+		break;
+	}
 	case PROBE_REPORT_LUNS:
 	{
 		void *rp;
@@ -1162,6 +1181,7 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
 	struct cam_path *path;
 	struct scsi_inquiry_data *inq_buf;
 	uint32_t  priority;
+	struct ccb_pathinq cpi;
 
 	CAM_DEBUG(done_ccb->ccb_h.path, CAM_DEBUG_TRACE, ("probedone\n"));
 
@@ -1169,6 +1189,7 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
 	path = done_ccb->ccb_h.path;
 	priority = done_ccb->ccb_h.pinfo.priority;
 	cam_periph_assert(periph, MA_OWNED);
+	xpt_path_inq(&cpi, path);
 
 	switch (softc->action) {
 	case PROBE_TUR:
@@ -1235,8 +1256,10 @@ out:
 				    SID_ANSI_REV(inq_buf) > SCSI_REV_SPC2 &&
 				    (SCSI_QUIRK(path->device)->quirks &
 				     CAM_QUIRK_NORPTLUNS) == 0) {
-					PROBE_SET_ACTION(softc,
-					    PROBE_REPORT_LUNS);
+					if (cpi.hba_misc & PIM_WLUNS)
+						PROBE_SET_ACTION(softc, PROBE_REPORT_WLUNS);
+					else
+						PROBE_SET_ACTION(softc, PROBE_REPORT_LUNS);
 					/*
 					 * Start with room for *one* lun.
 					 */
@@ -1259,7 +1282,10 @@ out:
 			    SID_ANSI_REV(inq_buf) >= SCSI_REV_SPC2 &&
 			    (SCSI_QUIRK(path->device)->quirks &
 			     CAM_QUIRK_NORPTLUNS) == 0) {
-				PROBE_SET_ACTION(softc, PROBE_REPORT_LUNS);
+				if (cpi.hba_misc & PIM_WLUNS)
+					PROBE_SET_ACTION(softc,	PROBE_REPORT_WLUNS);
+				else
+					PROBE_SET_ACTION(softc, PROBE_REPORT_LUNS);
 				periph->path->target->rpl_size = 16;
 				xpt_release_ccb(done_ccb);
 				xpt_schedule(periph, priority);
@@ -1296,11 +1322,13 @@ out:
 		xpt_release_ccb(done_ccb);
 		break;
 	}
+	case PROBE_REPORT_WLUNS:
 	case PROBE_REPORT_LUNS:
 	{
 		struct ccb_scsiio *csio;
 		struct scsi_report_luns_data *lp;
 		u_int nlun, maxlun;
+		bool is_wlun = softc->action == PROBE_REPORT_WLUNS;
 
 		csio = &done_ccb->csio;
 
@@ -1377,7 +1405,7 @@ out:
 			 * This function will also install the new list
 			 * in the target structure.
 			 */
-			probe_purge_old(path, lp, softc->flags);
+			probe_purge_old(path, lp, softc->flags, is_wlun);
 			lp = NULL;
 		}
 		/* The processing above should either exit via a `goto
@@ -1390,7 +1418,9 @@ out:
 		if (path->device->flags & CAM_DEV_INQUIRY_DATA_VALID &&
 		    (SID_QUAL(inq_buf) == SID_QUAL_LU_CONNECTED ||
 		    SID_QUAL(inq_buf) == SID_QUAL_LU_OFFLINE)) {
-			if (INQ_DATA_TQ_ENABLED(inq_buf))
+			if (is_wlun)
+				PROBE_SET_ACTION(softc, PROBE_REPORT_LUNS);
+			else if (INQ_DATA_TQ_ENABLED(inq_buf))
 				PROBE_SET_ACTION(softc, PROBE_MODE_SENSE);
 			else
 				PROBE_SET_ACTION(softc,
@@ -1815,20 +1845,22 @@ probe_device_check:
 
 static void
 probe_purge_old(struct cam_path *path, struct scsi_report_luns_data *new,
-    probe_flags flags)
+    probe_flags flags, bool is_wlun)
 {
 	struct cam_path *tp;
-	struct scsi_report_luns_data *old;
+	struct scsi_report_luns_data **luns_data, *old;
 	u_int idx1, idx2, nlun_old, nlun_new;
 	lun_id_t this_lun;
 	uint8_t *ol, *nl;
 
+	luns_data = is_wlun ? &path->target->wluns : &path->target->luns;
+
 	if (path->target == NULL) {
 		return;
 	}
 	mtx_lock(&path->target->luns_mtx);
-	old = path->target->luns;
-	path->target->luns = new;
+	old = *luns_data;
+	*luns_data = new;
 	mtx_unlock(&path->target->luns_mtx);
 	if (old == NULL)
 		return;
@@ -1908,11 +1940,16 @@ scsi_find_quirk(struct cam_ed *device)
 	device->maxtags = quirk->maxtags;
 }
 
+typedef struct {
+	int lun;
+	int wlun;
+} lun_pair;
+
 typedef struct {
 	union	ccb *request_ccb;
 	struct 	ccb_pathinq *cpi;
 	int	counter;
-	int	lunindex[0];
+	lun_pair lunindex[0];
 } scsi_scan_bus_info;
 
 static void
@@ -1995,7 +2032,8 @@ scsi_scan_bus(struct cam_periph *periph, union ccb *request_ccb)
 
 		/* Save some state for use while we probe for devices */
 		scan_info = (scsi_scan_bus_info *) malloc(sizeof(scsi_scan_bus_info) +
-		    (work_ccb->cpi.max_target * sizeof (u_int)), M_CAMXPT, M_ZERO|M_NOWAIT);
+		    (work_ccb->cpi.max_target * sizeof(lun_pair)),
+				M_CAMXPT, M_ZERO|M_NOWAIT);
 		if (scan_info == NULL) {
 			request_ccb->ccb_h.status = CAM_RESRC_UNAVAIL;
 			xpt_free_ccb(work_ccb);
@@ -2080,6 +2118,8 @@ scsi_scan_bus(struct cam_periph *periph, union ccb *request_ccb)
 		path_id_t path_id;
 		target_id_t target_id;
 		lun_id_t lun_id;
+		u_int nwluns;
+		bool need_wlun_scan = false;
 
 		oldpath = request_ccb->ccb_h.path;
 
@@ -2093,89 +2133,124 @@ scsi_scan_bus(struct cam_periph *periph, union ccb *request_ccb)
 
 		mtx = xpt_path_mtx(scan_info->request_ccb->ccb_h.path);
 		mtx_lock(mtx);
-		mtx_lock(&target->luns_mtx);
-		if (target->luns) {
-			lun_id_t first;
-			u_int nluns = scsi_4btoul(target->luns->length) / 8;
 
-			/*
-			 * Make sure we skip over lun 0 if it's the first member
-			 * of the list as we've actually just finished probing
-			 * it.
-			 */
-			CAM_GET_LUN(target->luns, 0, first);
-			if (first == 0 && scan_info->lunindex[target_id] == 0) {
-				scan_info->lunindex[target_id]++;
-			}
-
-			/*
-			 * Skip any LUNs that the HBA can't deal with.
-			 */
-			while (scan_info->lunindex[target_id] < nluns) {
-				if (scan_info->cpi->hba_misc & PIM_EXTLUNS) {
-					CAM_GET_LUN(target->luns,
-					    scan_info->lunindex[target_id],
-					    lun_id);
-					break;
-				}
+		if (scan_info->cpi->hba_misc & PIM_WLUNS) {
+			/* Scan Well known logical units */
+			mtx_lock(&target->luns_mtx);
 
-				if (CAM_CAN_GET_SIMPLE_LUN(target->luns,
-				    scan_info->lunindex[target_id])) {
-					CAM_GET_SIMPLE_LUN(target->luns,
-					    scan_info->lunindex[target_id],
-					    lun_id);
-					break;
-				}
-					
-				scan_info->lunindex[target_id]++;
+			if (target->wluns) {
+				nwluns = scsi_4btoul(target->wluns->length) / 8;
+				if (scan_info->lunindex[target_id].wlun < nwluns)
+					need_wlun_scan = true;
 			}
 
-			if (scan_info->lunindex[target_id] < nluns) {
+			if (need_wlun_scan) {
+				/*
+				 * WLUN uses the Extended WLUN address format, so we can handle all of
+				 * them.
+				 */
+				CAM_GET_LUN(target->wluns, scan_info->lunindex[target_id].wlun, lun_id);
+
 				mtx_unlock(&target->luns_mtx);
 				next_target = 0;
 				CAM_DEBUG(request_ccb->ccb_h.path,
-				    CAM_DEBUG_PROBE,
-				   ("next lun to try at index %u is %jx\n",
-				   scan_info->lunindex[target_id],
-				   (uintmax_t)lun_id));
-				scan_info->lunindex[target_id]++;
+						CAM_DEBUG_PROBE,
+					("next wlun to try at index %u is %jx\n",
+					scan_info->lunindex[target_id].wlun,
+					(uintmax_t)lun_id));
+				scan_info->lunindex[target_id].wlun++;
 			} else {
 				mtx_unlock(&target->luns_mtx);
-				/* We're done with scanning all luns. */
+				/* We're done with scanning all wluns. */
 			}
-		} else {
-			mtx_unlock(&target->luns_mtx);
-			device = request_ccb->ccb_h.path->device;
-			/* Continue sequential LUN scan if: */
-			/*  -- we have more LUNs that need recheck */
-			mtx_lock(&target->bus->eb_mtx);
-			nextdev = device;
-			while ((nextdev = TAILQ_NEXT(nextdev, links)) != NULL)
-				if ((nextdev->flags & CAM_DEV_UNCONFIGURED) == 0)
-					break;
-			mtx_unlock(&target->bus->eb_mtx);
-			if (nextdev != NULL) {
-				next_target = 0;
-			/*  -- stop if CAM_QUIRK_NOLUNS is set. */
-			} else if (SCSI_QUIRK(device)->quirks & CAM_QUIRK_NOLUNS) {
-				next_target = 1;
-			/*  -- this LUN is connected and its SCSI version
-			 *     allows more LUNs. */
-			} else if ((device->flags & CAM_DEV_UNCONFIGURED) == 0) {
-				if (lun_id < (CAM_SCSI2_MAXLUN-1) ||
-				    CAN_SRCH_HI_DENSE(device))
+		}
+
+		if (!need_wlun_scan) {
+			/* Scan logical units */
+			mtx_lock(&target->luns_mtx);
+			if (target->luns) {
+				lun_id_t first;
+				u_int nluns = scsi_4btoul(target->luns->length) / 8;
+
+				/*
+				* Make sure we skip over lun 0 if it's the first member
+				* of the list as we've actually just finished probing
+				* it.
+				*/
+				CAM_GET_LUN(target->luns, 0, first);
+				if (first == 0 && scan_info->lunindex[target_id].lun == 0) {
+					scan_info->lunindex[target_id].lun++;
+				}
+
+				/*
+				* Skip any LUNs that the HBA can't deal with.
+				*/
+				while (scan_info->lunindex[target_id].lun < nluns) {
+					if (scan_info->cpi->hba_misc & PIM_EXTLUNS) {
+						CAM_GET_LUN(target->luns,
+								scan_info->lunindex[target_id].lun,
+								lun_id);
+						break;
+					}
+
+					if (CAM_CAN_GET_SIMPLE_LUN(target->luns,
+							scan_info->lunindex[target_id].lun)) {
+						CAM_GET_SIMPLE_LUN(target->luns,
+								scan_info->lunindex[target_id].lun,
+								lun_id);
+						break;
+					}
+
+					scan_info->lunindex[target_id].lun++;
+				}
+
+				if (scan_info->lunindex[target_id].lun < nluns) {
+					mtx_unlock(&target->luns_mtx);
 					next_target = 0;
-			/*  -- this LUN is disconnected, its SCSI version
-			 *     allows more LUNs and we guess they may be. */
-			} else if ((device->flags & CAM_DEV_INQUIRY_DATA_VALID) != 0) {
-				if (lun_id < (CAM_SCSI2_MAXLUN-1) ||
-				    CAN_SRCH_HI_SPARSE(device))
+					CAM_DEBUG(request_ccb->ccb_h.path,
+							CAM_DEBUG_PROBE,
+						("next lun to try at index %u is %jx\n",
+						scan_info->lunindex[target_id].lun,
+						(uintmax_t)lun_id));
+					scan_info->lunindex[target_id].lun++;
+				} else {
+					mtx_unlock(&target->luns_mtx);
+					/* We're done with scanning all luns. */
+				}
+			} else {
+				mtx_unlock(&target->luns_mtx);
+				device = request_ccb->ccb_h.path->device;
+				/* Continue sequential LUN scan if: */
+				/*  -- we have more LUNs that need recheck */
+				mtx_lock(&target->bus->eb_mtx);
+				nextdev = device;
+				while ((nextdev = TAILQ_NEXT(nextdev, links)) != NULL)
+					if ((nextdev->flags & CAM_DEV_UNCONFIGURED) == 0)
+						break;
+				mtx_unlock(&target->bus->eb_mtx);
+				if (nextdev != NULL) {
 					next_target = 0;
-			}
-			if (next_target == 0) {
-				lun_id++;
-				if (lun_id > scan_info->cpi->max_lun)
+				/*  -- stop if CAM_QUIRK_NOLUNS is set. */
+				} else if (SCSI_QUIRK(device)->quirks & CAM_QUIRK_NOLUNS) {
 					next_target = 1;
+				/*  -- this LUN is connected and its SCSI version
+				 *     allows more LUNs. */
+				} else if ((device->flags & CAM_DEV_UNCONFIGURED) == 0) {
+					if (lun_id < (CAM_SCSI2_MAXLUN-1) ||
+					    CAN_SRCH_HI_DENSE(device))
+						next_target = 0;
+				/*  -- this LUN is disconnected, its SCSI version
+				 *     allows more LUNs and we guess they may be. */
+				} else if ((device->flags & CAM_DEV_INQUIRY_DATA_VALID) != 0) {
+					if (lun_id < (CAM_SCSI2_MAXLUN-1) ||
+					    CAN_SRCH_HI_SPARSE(device))
+						next_target = 0;
+				}
+				if (next_target == 0) {
+					lun_id++;
+					if (lun_id > scan_info->cpi->max_lun)
+						next_target = 1;
+				}
 			}
 		}
 

From nobody Tue Oct  6 07:50:43 2026
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 4hzT2X1Yz4z6cW65
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50: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
	 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 4hzT2W52JLz4G0y
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:43 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273043;
	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=r3R7uD9TQCXxjMj2FSC4KM5Ocky7rMP+SOnLtKM0zKQ=;
	b=nRWywKthjah/IlYWX/smCPLtU7InKs6DxEGb7fvZkSULa4mzJDsrOwq0jVya7tlGl7+I/p
	Sq2DfGP/orDDVWw6OFY6ExNGYSRBwxFvbYeSkO7KwzBmeJXQg279gLG+/uTyuBaKExm+pH
	rNpV3xDQk/QHI4F2aTc999yWaOBRpxmvtnv+ugc1+NecKL+cTXWDbW3+guy4sMQutObvYd
	Xb0QULXEaU+NR3kP6pWyqPF4YjUVfQHIV1fIYY2b+enaqZ/nFor/eBGMm6IUW20k5ct3a1
	jjhszsU+Ecz8v4SnHdQW5oZaIubFotz5ChPidV1EBJ9Eldhqw+uebqW8/sVS6Q==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273043;
	b=Rdb+emQkNCkemqXwm+5Bi6BS1CW5jA1VWI2eaRqCZNIRxfn1dMm90ndfjb+u7+2deA388U
	0nGYsYvpQPUse3USAh7VCsGhTiyGBIJEq8uC0f4RDhADHKdZNx4/lA7VeA2U/EPRpyGz55
	WNpDayrLeKvDLeF6FXg2UtZOJZce0gPHS4VBjCcyokW79WrSp1z43X2SSOpeOe/dc8Xq+V
	JcKY2nylXRAYl7XsGiLb9ZiRJQdR2pYGEmZtI9pq4CcvLEppDRxOrP41KUsnOt2Llgg8h4
	6GpKOZ2Uq2Syw7cUC0YLvl45HHQhOFeojI5S4Kf6er8dhXbTwoWJde/GdoP0Sw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273043;
	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=r3R7uD9TQCXxjMj2FSC4KM5Ocky7rMP+SOnLtKM0zKQ=;
	b=BJf/h+GpmxxUWPiwe1KwN9HpwaJv8B0B2AE72nvqpMtPIP0Hia4uCG89LS5pBPZv50ohW2
	jIre17cORx1jo8z1pSGbed/kFMIj+V+++MB7VbF3aifrsnkpiK9HUaLE0UY0JCjDqCBibu
	8HeQOFEVjz5oI1r+HuDdvtLf2H1mjnDDXdu3IVQk7GGBDjvuMOlosIXTrB07El35U/j52r
	CbOytuTFyFKTp1v2Uic6UEtLQ/Ci2Y956YwhnuX/77BkhTyUfqX9hTmT1hf78yfZkf6FC4
	MxVQjD9QWu7JYBEjfFvvASifqsZTJyFfp3fS2A53RIdG+23lTSJMfYnW4e2hTw==
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 4hzT2W46Zszxbx
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:43 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 4782e
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:43 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: ab96d69e5c77 - stable/15 - ufshci: Enable WLUN scan
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: ab96d69e5c77783c31cdc71c5ba72c19e3580802
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:43 +0000
Message-Id: <6ac4a853.4782e.58fad76c@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=ab96d69e5c77783c31cdc71c5ba72c19e3580802

commit ab96d69e5c77783c31cdc71c5ba72c19e3580802
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2025-12-01 04:39:14 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:46 +0000

    ufshci: Enable WLUN scan
    
    QEMU ufs device does not implement WLUN, so QUIRK is added.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D53921
    
    (cherry picked from commit 5e0d065b5b90d4f4264d8248f39f199f1a2576dc)
---
 sys/dev/ufshci/ufshci.h         | 8 ++++++++
 sys/dev/ufshci/ufshci_pci.c     | 3 ++-
 sys/dev/ufshci/ufshci_private.h | 2 ++
 sys/dev/ufshci/ufshci_sim.c     | 6 +++++-
 4 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/sys/dev/ufshci/ufshci.h b/sys/dev/ufshci/ufshci.h
index 188f8c41def1..766d8de0535b 100644
--- a/sys/dev/ufshci/ufshci.h
+++ b/sys/dev/ufshci/ufshci.h
@@ -644,6 +644,14 @@ struct ufshci_completion {
 
 typedef void (*ufshci_cb_fn_t)(void *, const struct ufshci_completion *, bool);
 
+/* UFS 4.1, section 10.8.5 "Well Known Logical Unit Defined in UFS" */
+enum ufshci_well_known_luns {
+	UFSHCI_WLUN_REPORT_LUNS = 0x81,
+	UFSHCI_WLUN_BOOT = 0xb0,
+	UFSHCI_WLUN_RPMB = 0xc4,
+	UFSHCI_WLUN_UFS_DEVICE = 0xd0,
+};
+
 /*
  * UFS Spec 4.1, section 14.1 "UFS Descriptors"
  * All descriptors use big-endian byte ordering.
diff --git a/sys/dev/ufshci/ufshci_pci.c b/sys/dev/ufshci/ufshci_pci.c
index c518c6cf6aae..756ac6540632 100644
--- a/sys/dev/ufshci/ufshci_pci.c
+++ b/sys/dev/ufshci/ufshci_pci.c
@@ -50,7 +50,8 @@ static struct _pcsid {
 	uint32_t quirks;
 } pci_ids[] = { { 0x131b36, "QEMU UFS Host Controller", UFSHCI_REF_CLK_19_2MHz,
 		    UFSHCI_QUIRK_IGNORE_UIC_POWER_MODE |
-			UFSHCI_QUIRK_NOT_SUPPORT_ABORT_TASK },
+			UFSHCI_QUIRK_NOT_SUPPORT_ABORT_TASK |
+			UFSHCI_QUIRK_SKIP_WELL_KNOWN_LUNS },
 	{ 0x98fa8086, "Intel Lakefield UFS Host Controller",
 	    UFSHCI_REF_CLK_19_2MHz,
 	    UFSHCI_QUIRK_LONG_PEER_PA_TACTIVATE |
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index ec388c06e248..3cee021880a8 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -266,6 +266,8 @@ struct ufshci_controller {
 	8 /* Need to change the number of lanes before changing HS-GEAR. */
 #define UFSHCI_QUIRK_NOT_SUPPORT_ABORT_TASK \
 	16 /* QEMU does not support Task Management Request */
+#define UFSHCI_QUIRK_SKIP_WELL_KNOWN_LUNS \
+	32 /* QEMU does not support Well known logical units*/
 
 	uint32_t ref_clk;
 
diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 1b80df089a46..db2e194b699b 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -231,11 +231,15 @@ ufshci_cam_action(struct cam_sim *sim, union ccb *ccb)
 		return;
 	case XPT_PATH_INQ: {
 		struct ccb_pathinq *cpi = &ccb->cpi;
+		uint32_t need_scan_wluns = 0;
+
+		if (!(ctrlr->quirks & UFSHCI_QUIRK_SKIP_WELL_KNOWN_LUNS))
+			need_scan_wluns = PIM_WLUNS;
 
 		cpi->version_num = 1;
 		cpi->hba_inquiry = PI_SDTR_ABLE | PI_TAG_ABLE;
 		cpi->target_sprt = 0;
-		cpi->hba_misc = PIM_UNMAPPED | PIM_NO_6_BYTE;
+		cpi->hba_misc = need_scan_wluns | PIM_UNMAPPED | PIM_NO_6_BYTE;
 		cpi->hba_eng_cnt = 0;
 		cpi->max_target = 0;
 		cpi->max_lun = ctrlr->max_lun_count;

From nobody Tue Oct  6 07:50:44 2026
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 4hzT2Y1rs8z6cVs5
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:45 +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 4hzT2X6R7Wz4G5n
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:44 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273045;
	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=wCoGt8Gud5rNGV2rllGy9i9SIaIe9lwoRKvvsqF/A3s=;
	b=E6uDooAMXoLJiFYSVOY+F3EUTfwRlgpo99bgWD5hUIxoZLNuV47wLSpTjWOMhuBY03VrPp
	Z0H/tsy03HbsNE4rWNtgcNRoAzZp+VHbQowyM+cD6NZgSh9WkYjO5cTbdLKeDS4mrjpcdg
	AOjSYc80qSZgAwlvoPW1k7FLw9TSXAIZlsIpVWMSTvgahvWYamXP3cJqHfzCfNFSLbsnyw
	7JhvsmTVQZfICqCCWjJTAkiYuG8R8oVvzc3LSB0sweBnl2Fde3Loj6LweAlPPJlGsd1yZv
	I00bNPwQYxkfTVKujH4PtfKpYBd7eX05BWotr8Oo+bUP9it/s6ItVCICuPxSfQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273045;
	b=c/BsYxnRxLzLpGIKJ7eJeE9Qwlk3i/fKLNuGwc3cXdj0Vc/W2XTkE+R2/Af6qP/nB1Fxzm
	M35QO1mkqtNsEGX6gpyb3+ZzXyTlL3f5lqfj1ODbcKsZKyD6LNtVDInlWPp/B/nsknV5Vy
	zyK85O5uOw7NbGxqmmmX+B3GyO8w6WtbWA7gVDXEr3VobXLoo/wkncOpAcQZ4f6LKoS9ip
	2qLH76KQIrcu9AGD6eJokGhH+RmIORzTqDCrlOOtMKdp6Wd8bpju8KIFbzh8cMdWg3uCce
	yBna3j83BVPL3PFLqCbP+OtZkxYCAIJL97Ab1dudCl0pcK3THEB2tLCUTAtVRg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273045;
	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=wCoGt8Gud5rNGV2rllGy9i9SIaIe9lwoRKvvsqF/A3s=;
	b=DJGc2QdYnnTZd3iHXZVlQL4gFjmGWpRQl7E81TcY1Lgqx7SUo1wT6UEzRlbnqfhhyoyi1j
	zR0S+Z/eh/qNHCFILLeTEFT+YnweeKLlme5GFINtTmwe4YNzP8DlYNGyWhQN/XK31Yty/f
	tsAwrY0lmhRrV8GXnV1h/17+pqmN/RrrlViw3j2p+oNpOOsj8yMbMVZ8kR01ibciLhU+9K
	ZUsVW8WHMXlsz7CeK9rVI4wbdZzN8HilB2RkQlWcoFGcaJw4W9dPJiFWO6WRj8uoPbw2jc
	TUl+jcUjvS/UdHxEYcQSLzehebsb6GAONyu5hRUi/HizRhodunJIwd03DHkU3A==
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 4hzT2X52L1zxKD
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:44 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18931
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:44 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: c60b3057f7d1 - stable/15 - cam/scsi: Add power condition support to START STOP UNIT
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: c60b3057f7d10868d8ed0218ba2dd76deaa313ce
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:44 +0000
Message-Id: <6ac4a854.18931.7bea772c@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=c60b3057f7d10868d8ed0218ba2dd76deaa313ce

commit c60b3057f7d10868d8ed0218ba2dd76deaa313ce
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2025-12-01 04:39:35 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:47 +0000

    cam/scsi: Add power condition support to START STOP UNIT
    
    This patch adds a power_condition parameter to the
    scsi_start_stop() function and sets the power condition via SSU.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronic
    Differential Revision:  https://reviews.freebsd.org/D53922
    
    (cherry picked from commit 8c35de4982d855950a900483513f341643f6158f)
---
 sbin/camcontrol/camcontrol.c | 1 +
 sys/cam/cam_periph.c         | 1 +
 sys/cam/scsi/scsi_all.c      | 4 +++-
 sys/cam/scsi/scsi_all.h      | 3 ++-
 sys/cam/scsi/scsi_cd.c       | 2 ++
 sys/dev/mpr/mpr_sas_lsi.c    | 1 +
 sys/dev/mps/mps_sas_lsi.c    | 1 +
 7 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/sbin/camcontrol/camcontrol.c b/sbin/camcontrol/camcontrol.c
index 7ad177c3e4b6..73e5a523bd47 100644
--- a/sbin/camcontrol/camcontrol.c
+++ b/sbin/camcontrol/camcontrol.c
@@ -1026,6 +1026,7 @@ scsistart(struct cam_device *device, int startstop, int loadeject,
 			/* start/stop */ startstop,
 			/* load_eject */ loadeject,
 			/* immediate */ 0,
+			/* power_condition */ SSS_PC_START_VALID,
 			/* sense_len */ SSD_FULL_SIZE,
 			/* timeout */ timeout ? timeout : 120000);
 
diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c
index 730656684e2a..e485ecff8736 100644
--- a/sys/cam/cam_periph.c
+++ b/sys/cam/cam_periph.c
@@ -1791,6 +1791,7 @@ camperiphscsisenseerror(union ccb *ccb, union ccb **orig,
 					/*start*/TRUE,
 					/*load/eject*/le,
 					/*immediate*/FALSE,
+					/*power_condition*/SSS_PC_START_VALID,
 					SSD_FULL_SIZE,
 					/*timeout*/50000);
 			break;
diff --git a/sys/cam/scsi/scsi_all.c b/sys/cam/scsi/scsi_all.c
index b28ec2671d4a..3b991fc248de 100644
--- a/sys/cam/scsi/scsi_all.c
+++ b/sys/cam/scsi/scsi_all.c
@@ -8984,7 +8984,8 @@ void
 scsi_start_stop(struct ccb_scsiio *csio, uint32_t retries,
 		void (*cbfcnp)(struct cam_periph *, union ccb *),
 		uint8_t tag_action, int start, int load_eject,
-		int immediate, uint8_t sense_len, uint32_t timeout)
+		int immediate, uint8_t power_condition, uint8_t sense_len,
+		uint32_t timeout)
 {
 	struct scsi_start_stop_unit *scsi_cmd;
 	int extra_flags = 0;
@@ -8999,6 +9000,7 @@ scsi_start_stop(struct ccb_scsiio *csio, uint32_t retries,
 	}
 	if (load_eject != 0)
 		scsi_cmd->how |= SSS_LOEJ;
+	scsi_cmd->how |= power_condition;
 	if (immediate != 0)
 		scsi_cmd->byte2 |= SSS_IMMED;
 
diff --git a/sys/cam/scsi/scsi_all.h b/sys/cam/scsi/scsi_all.h
index e50974edac86..fb3ed8ee4458 100644
--- a/sys/cam/scsi/scsi_all.h
+++ b/sys/cam/scsi/scsi_all.h
@@ -4326,7 +4326,8 @@ void scsi_unmap(struct ccb_scsiio *csio, uint32_t retries,
 void scsi_start_stop(struct ccb_scsiio *csio, uint32_t retries,
 		     void (*cbfcnp)(struct cam_periph *, union ccb *),
 		     uint8_t tag_action, int start, int load_eject,
-		     int immediate, uint8_t sense_len, uint32_t timeout);
+		     int immediate, uint8_t power_condition, uint8_t sense_len,
+		     uint32_t timeout);
 void scsi_read_attribute(struct ccb_scsiio *csio, uint32_t retries, 
 			 void (*cbfcnp)(struct cam_periph *, union ccb *),
 			 uint8_t tag_action, uint8_t service_action,
diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c
index 1e8dc98d53f4..be6f1c47512a 100644
--- a/sys/cam/scsi/scsi_cd.c
+++ b/sys/cam/scsi/scsi_cd.c
@@ -3416,6 +3416,7 @@ cdstartunit(struct cam_periph *periph, int load)
 			/* start */ TRUE,
 			/* load_eject */ load,
 			/* immediate */ FALSE,
+			/* power_condition */ SSS_PC_START_VALID,
 			/* sense_len */ SSD_FULL_SIZE,
 			/* timeout */ 50000);
 
@@ -3444,6 +3445,7 @@ cdstopunit(struct cam_periph *periph, uint32_t eject)
 			/* start */ FALSE,
 			/* load_eject */ eject,
 			/* immediate */ FALSE,
+			/* power_condition */ SSS_PC_START_VALID,
 			/* sense_len */ SSD_FULL_SIZE,
 			/* timeout */ 50000);
 
diff --git a/sys/dev/mpr/mpr_sas_lsi.c b/sys/dev/mpr/mpr_sas_lsi.c
index d9744b1054c2..9ba776e49e7a 100644
--- a/sys/dev/mpr/mpr_sas_lsi.c
+++ b/sys/dev/mpr/mpr_sas_lsi.c
@@ -1517,6 +1517,7 @@ mprsas_SSU_to_SATA_devices(struct mpr_softc *sc, int howto)
 			    /*start*/FALSE,
 			    /*load/eject*/0,
 			    /*immediate*/FALSE,
+			    /*power_condition*/SSS_PC_START_VALID,
 			    MPR_SENSE_LEN,
 			    /*timeout*/10000);
 			xpt_action(ccb);
diff --git a/sys/dev/mps/mps_sas_lsi.c b/sys/dev/mps/mps_sas_lsi.c
index e2d1ef2b013a..42119b5c0a43 100644
--- a/sys/dev/mps/mps_sas_lsi.c
+++ b/sys/dev/mps/mps_sas_lsi.c
@@ -1153,6 +1153,7 @@ mpssas_SSU_to_SATA_devices(struct mps_softc *sc, int howto)
 			    /*start*/FALSE,
 			    /*load/eject*/0,
 			    /*immediate*/FALSE,
+			    /*power_condition*/SSS_PC_START_VALID,
 			    MPS_SENSE_LEN,
 			    /*timeout*/10000);
 			xpt_action(ccb);

From nobody Tue Oct  6 07:50:45 2026
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 4hzT2Z3TkWz6cW1T
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50: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 4hzT2Y6sP8z4Fry
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:45 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273046;
	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=lTOBSg7WwRivqQSV5+kbFFewu2g1zz/R/rZepcttd00=;
	b=kr62WPqBcWEplBieV5GgL3KHOmwL8Dg0FFqT9DwSFKm9EN4yUFKgIaEh67pKEfOvWn+c/S
	3rEI7qsWCeQxj9lW7+pziHsUxub8Oqa0ZNBc+1cuXTLuGlDqOhM/noepvOxhoPPhX5bTqs
	vpLupvVjE1TmUc9G3LVhCePtqoCaRL4UuZU/EvEaTMG9eBk4fHK23cFiKvNvMbvKPBeq5z
	iMLItRSxXEaaZAOHrO8EZImQNy3Az1YNGLkNYHhQiegZY5HUA+yDbymhUIVYICsb6iX9SG
	9C/1h/4O7a4dbLgTpudZT8oXcQsr5jx5MJ5QwwWMu/CrLgdyCVOTTp1DzIrlSA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273046;
	b=UfqQYhlXu2PHSFPLGAbZixwob5ncbycAcEb1jnQhmI7CKAVaCueHp6094jYIXutHs0Lksn
	bKuwq5JwsQjoj6YgZ9DCqTP8lZYzpHyzphTFtopcRi7ENkPdlsGq87SdlXrmUGflpPJO52
	f3PufwFYRMDFn6P/qg4ZzeMiFA6Xzm04khNBn11CHr5e7PWGg730Ty3Mo5vWNEwP5XU8aX
	pxm259eJu7hrNAL7lYNMkZ3ocJpxdak157oG1BMyL+EW5OngtprZdHyafspYc7mAwJxrWZ
	fRp9UAVs3+1Mjav13OkpRs3ASP44zeNK+l6yuUQs+N5IYf5otRvsYS1HBQqFyA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273046;
	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=lTOBSg7WwRivqQSV5+kbFFewu2g1zz/R/rZepcttd00=;
	b=n/klYFfo7kdMBTB/dN4Tudc5A8ZMQk7iu+6SlxZz3f82fgp4CkAWW6uAokq9hD7XH0plOm
	x8ExX6yaTaxsC+frKLlUpkhwxKfUYfgHEetxpiVTXCjAzWaU5VRA6bW5aSu38Gid5csKqR
	0LnkDDgAHPr1sexrpS7hA2fekyhPZzh/GTpVcnHqeusnaPWJQzBD9fY7cWctID8vyDQ76L
	fpMweDkGWA7cC/1pQjBFAFWntSj1wQXMAYlhB+rpoIjywTvXIyOVMwfF+jASkCDAlSMf+C
	JRrjwBUJEv0LLVugWa4AzAuii4naSjFFUx9yDA4SYxxDPmK8LFKmURA4+cDQiQ==
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 4hzT2Y5sTXzxXC
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:45 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 47b5a
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:45 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 968c352536ff - stable/15 - ufshci: Add a check for WLUN during driver initialization
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 968c352536ff17f5536ebd408c975d1d59b231d0
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:45 +0000
Message-Id: <6ac4a855.47b5a.3aceab8d@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=968c352536ff17f5536ebd408c975d1d59b231d0

commit 968c352536ff17f5536ebd408c975d1d59b231d0
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2025-12-01 04:39:49 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:47 +0000

    ufshci: Add a check for WLUN during driver initialization
    
    This patch checks whether wlun is registered as a periph device.
    It also implements a function to issue an SSU.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D53923
    
    (cherry picked from commit 31407551c3d4d29905f77abddac3fd9b649e166b)
---
 sys/dev/ufshci/ufshci_ctrlr.c   |  12 ++---
 sys/dev/ufshci/ufshci_dev.c     |  14 ++++-
 sys/dev/ufshci/ufshci_private.h |  14 +++++
 sys/dev/ufshci/ufshci_sim.c     | 114 +++++++++++++++++++++++++++++++++++++++-
 sys/dev/ufshci/ufshci_sysctl.c  |   4 ++
 5 files changed, 150 insertions(+), 8 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index fd61451f8a9e..7c225423c266 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -79,12 +79,6 @@ ufshci_ctrlr_start(struct ufshci_controller *ctrlr, bool resetting)
 		return;
 	}
 
-	/* Initialize UFS Power Mode */
-	if (ufshci_dev_init_ufs_power_mode(ctrlr) != 0) {
-		ufshci_ctrlr_fail(ctrlr);
-		return;
-	}
-
 	/* Read Controller Descriptor (Device, Geometry) */
 	if (ufshci_dev_get_descriptor(ctrlr) != 0) {
 		ufshci_ctrlr_fail(ctrlr);
@@ -109,6 +103,12 @@ ufshci_ctrlr_start(struct ufshci_controller *ctrlr, bool resetting)
 		return;
 	}
 
+	/* Initialize UFS Power Mode */
+	if (ufshci_dev_init_ufs_power_mode(ctrlr) != 0) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
 	TSEXIT();
 }
 
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 975468e5156f..9696e8ea8091 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -455,8 +455,20 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr)
 int
 ufshci_dev_init_ufs_power_mode(struct ufshci_controller *ctrlr)
 {
-	/* TODO: Need to implement */
+	ctrlr->ufs_dev.power_mode_supported = false;
 
+	if (ctrlr->quirks & UFSHCI_QUIRK_SKIP_WELL_KNOWN_LUNS)
+		return (0);
+
+	ctrlr->ufs_device_wlun_periph = ufshci_sim_find_periph(ctrlr,
+	    UFSHCI_WLUN_UFS_DEVICE);
+	if (ctrlr->ufs_device_wlun_periph == NULL) {
+		ufshci_printf(ctrlr,
+		    "Well-known LUN `UFS Device (0x50)` not found\n");
+		return (0);
+	}
+
+	ctrlr->ufs_dev.power_mode_supported = true;
 	return (0);
 }
 
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index 3cee021880a8..22e77c9b9326 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -31,6 +31,8 @@
 
 #include <machine/bus.h>
 
+#include <cam/cam.h>
+
 #include "ufshci.h"
 
 MALLOC_DECLARE(M_UFSHCI);
@@ -247,6 +249,9 @@ struct ufshci_device {
 	uint32_t wb_user_space_config_option;
 	uint8_t wb_dedicated_lu;
 	uint32_t write_booster_flush_threshold;
+
+	/* Power mode */
+	bool power_mode_supported;
 };
 
 /*
@@ -274,6 +279,9 @@ struct ufshci_controller {
 	struct cam_sim *ufshci_sim;
 	struct cam_path *ufshci_path;
 
+	struct cam_periph *ufs_device_wlun_periph;
+	struct mtx ufs_device_wlun_mtx;
+
 	struct mtx sc_mtx;
 	uint32_t sc_unit;
 	uint8_t sc_name[16];
@@ -371,8 +379,14 @@ void ufshci_completion_poll_cb(void *arg, const struct ufshci_completion *cpl,
     bool error);
 
 /* SIM */
+uint8_t ufshci_sim_translate_scsi_to_ufs_lun(lun_id_t scsi_lun);
+uint64_t ufshci_sim_translate_ufs_to_scsi_lun(uint8_t ufs_lun);
 int ufshci_sim_attach(struct ufshci_controller *ctrlr);
 void ufshci_sim_detach(struct ufshci_controller *ctrlr);
+struct cam_periph *ufshci_sim_find_periph(struct ufshci_controller *ctrlr,
+    uint8_t wlun);
+int ufshci_sim_send_ssu(struct ufshci_controller *ctrlr, bool start,
+    int pwr_cond, bool immed);
 
 /* Controller */
 int ufshci_ctrlr_construct(struct ufshci_controller *ctrlr, device_t dev);
diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index db2e194b699b..0cd691de47e2 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -10,9 +10,11 @@
 #include <cam/cam.h>
 #include <cam/cam_ccb.h>
 #include <cam/cam_debug.h>
+#include <cam/cam_periph.h>
 #include <cam/cam_sim.h>
 #include <cam/cam_xpt_sim.h>
 #include <cam/scsi/scsi_all.h>
+#include <cam/scsi/scsi_message.h>
 
 #include "ufshci_private.h"
 
@@ -76,7 +78,7 @@ ufshci_sim_illegal_request(union ccb *ccb)
  * The SCSI LUN format and the UFS UPIU LUN format are different.
  * This function converts the SCSI LUN format to the UFS UPIU LUN format.
  */
-static uint8_t
+uint8_t
 ufshci_sim_translate_scsi_to_ufs_lun(lun_id_t scsi_lun)
 {
 	const int address_format_offset = 8;
@@ -94,6 +96,19 @@ ufshci_sim_translate_scsi_to_ufs_lun(lun_id_t scsi_lun)
 	return (scsi_lun & UFSHCI_UPIU_UNIT_NUMBER_ID_MASK);
 }
 
+uint64_t
+ufshci_sim_translate_ufs_to_scsi_lun(uint8_t ufs_lun)
+{
+	/* Logical unit */
+	if (!(ufs_lun & UFSHCI_UPIU_WLUN_ID_MASK)) {
+		return ufs_lun;
+	}
+
+	/* Well known logical unit */
+	return (((uint64_t)ufs_lun & ~UFSHCI_UPIU_WLUN_ID_MASK) |
+	    (RPL_LUNDATA_ATYP_EXTLUN | RPL_LUNDATA_EXT_EAM_WK) << 8);
+}
+
 static void
 ufshchi_sim_scsiio(struct cam_sim *sim, union ccb *ccb)
 {
@@ -396,3 +411,100 @@ ufshci_sim_detach(struct ufshci_controller *ctrlr)
 		ctrlr->ufshci_sim = NULL;
 	}
 }
+
+struct cam_periph *
+ufshci_sim_find_periph(struct ufshci_controller *ctrlr, uint8_t wlun)
+{
+	struct cam_path *path;
+	struct cam_periph *periph = NULL;
+	uint64_t scsi_lun;
+	uint64_t timeout;
+
+	scsi_lun = ufshci_sim_translate_ufs_to_scsi_lun(wlun);
+
+	if (xpt_create_path(&path, /*periph*/ NULL,
+		cam_sim_path(ctrlr->ufshci_sim), 0, scsi_lun) != CAM_REQ_CMP) {
+		return NULL;
+	}
+
+	/* Wait for the perip device to be found */
+	timeout = ticks + MSEC_2_TICKS(ctrlr->device_init_timeout_in_ms);
+
+	while (1) {
+		xpt_path_lock(path);
+		periph = cam_periph_find(path, "pass");
+		xpt_path_unlock(path);
+
+		if (periph) {
+			xpt_free_path(path);
+			break;
+		}
+
+		if (timeout - ticks < 0) {
+			ufshci_printf(ctrlr,
+			    "Failed to find the Well known LUN(0x%x)\n", wlun);
+			break;
+		}
+
+		pause_sbt("ufshci_find_periph", ustosbt(100), 0, C_PREL(1));
+	}
+
+	return periph;
+}
+
+/* This function is called during suspend/resume. */
+int
+ufshci_sim_send_ssu(struct ufshci_controller *ctrlr, bool start,
+    int power_condition, bool immed)
+{
+	struct cam_periph *periph = ctrlr->ufs_device_wlun_periph;
+	union ccb *ccb;
+	int err;
+
+	/* Acquire periph reference */
+	if (periph && cam_periph_acquire(periph) != 0) {
+		periph = NULL;
+	}
+
+	if (periph == NULL) {
+		/* If the periph device does not exist, it will try to find it
+		 * again */
+		periph = ufshci_sim_find_periph(ctrlr,
+		    (uint8_t)UFSHCI_WLUN_UFS_DEVICE);
+		if (periph)
+			ctrlr->ufs_device_wlun_periph = periph;
+	}
+
+	if (periph == NULL) {
+		ufshci_printf(ctrlr,
+		    "Well-known LUN `UFS Device (0x50)` not found\n");
+		return ENODEV;
+	}
+	cam_periph_lock(periph);
+	ccb = cam_periph_getccb(periph, CAM_PRIORITY_NORMAL);
+	if (!ccb) {
+		cam_periph_unlock(periph);
+		cam_periph_release(periph);
+		return ENOMEM;
+	}
+
+	scsi_start_stop(&ccb->csio,
+	    /*retries*/ 4,
+	    /*cbfcnp*/ NULL,
+	    /*tag_action*/ MSG_SIMPLE_Q_TAG,
+	    /*start*/ start ? 1 : 0,
+	    /*load_eject*/ 0,
+	    /*immediate*/ immed ? 1 : 0,
+	    /*power_condition*/ power_condition, SSD_MIN_SIZE,
+	    ctrlr->device_init_timeout_in_ms);
+
+	ccb->ccb_h.flags |= CAM_DIR_NONE | CAM_DEV_QFRZDIS;
+
+	err = cam_periph_runccb(ccb, NULL, 0, SF_RETRY_UA, NULL);
+
+	cam_periph_unlock(periph);
+	/* Release periph reference */
+	cam_periph_release(periph);
+
+	return (err == 0) ? 0 : EIO;
+}
diff --git a/sys/dev/ufshci/ufshci_sysctl.c b/sys/dev/ufshci/ufshci_sysctl.c
index 56bc06b13f3c..3ec4ea935464 100644
--- a/sys/dev/ufshci/ufshci_sysctl.c
+++ b/sys/dev/ufshci/ufshci_sysctl.c
@@ -197,6 +197,10 @@ ufshci_sysctl_initialize_ctrlr(struct ufshci_controller *ctrlr)
 	    &dev->wb_user_space_config_option, 0,
 	    "WriteBooster preserve user space mode");
 
+	SYSCTL_ADD_BOOL(ctrlr_ctx, ctrlr_list, OID_AUTO, "power_mode_supported",
+	    CTLFLAG_RD, &dev->power_mode_supported, 0,
+	    "Device power mode support");
+
 	SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, "timeout_period",
 	    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, &ctrlr->timeout_period,
 	    0, ufshci_sysctl_timeout_period, "IU",

From nobody Tue Oct  6 07:50:46 2026
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 4hzT2b27dbz6cW9X
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:47 +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 4hzT2b0PzPz4G6G
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:47 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273047;
	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=DFTmH57dxtyB9MwqfJ8hmr9LYyt+OOyxSaSS+RxNTAc=;
	b=ZHj+6/HHbd/Pp+5HsbehM3YaXS9GnAl95Nv6NjZY1iFBJ/OjhNDTlOkVr61S+7Z81VDNv2
	HOx4L1g7G2fzuRUT5VrD5euHfSKKFAMA+Iiy52/vbgosiSaRk1H0GY8IL4g6+/Quj05T43
	cTYd4eANnIpAIlK+Tfo9xf2geEMN36mX9aconfu3MIWySJWH3NCgdBrzTxPQx0S0paW0iz
	f2dGGxPTfmIPWvnpu0yux+utkLkAIFhpyzSaYfminEfpJz3cU9q9jH3DpIZQBR0TsWlirB
	SrcwpaoGpq3P55tcMhx1yPbhEHT5MpINflYAU1Kon824Ro0dXkTGE3eTUo7EMQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273047;
	b=mO5uIvhzxLi8lByO7xKjiV2Itvi0IUJo1ZNJ69Ng5cItU1tjHxR6xnsBkyoXVto6Q+UleY
	pPdgGd50qVL+E5T0z9d4HWhR9OHfRMQccRIBIbRPD4SUurjfOq15J4kS77hVjPpd5d2Vhb
	lTOPdPRqiLLx2Ck391XkoR2jYFJ7PIKJ5m1VhTjAHdrlii1nh0a7WCdXFGcjQKkRMCQUI/
	Fye7rNxc14V8kdInsa0FkkoL/pfXxzryJwNbtPzrX6rkrIQpIsN4vr1lFGa80f2cJ4Sf+k
	3qCVmdCgs8XSxEFhtcGv8v6cRIJaGNRyDstnvKe9wFv2tBfgN+XqM8YG/9iNag==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273047;
	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=DFTmH57dxtyB9MwqfJ8hmr9LYyt+OOyxSaSS+RxNTAc=;
	b=KzS2t3iU9Aqkxs8zY5yI43dhBesGup45cimtVbttuT7zKa3uGi67F1YIkznPLOfkVF3I4M
	+RQWbBQH04OfTr70bnEFo/Hf2SnsPSn4O8gg9/t6YMRWpZHmDrMAnv+eF/V6pBSGCFdMfn
	qAySwePYqDtqsNLgDot/Csn5Fp6VnhwSL1LP0RttcQJeOnpzhAW8tUU3LwSfylQBXWUz7a
	tuz3jgTMGXAxE/r4ITVwfigRdY8ZSAGV70G4FWNRNUPw/h5nHyZSRx1MOK4bqBbmxvCa/h
	xaEkk/cTTBrXBv7LaxfdY2pPdQjIQIackIPJivUvFg9pai43/xhi55HTVFCzAg==
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 4hzT2Z6d7Kzwys
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:46 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 474d0
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:46 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: ae109f0cba29 - stable/15 - ufshci: define the sleep types locally for stable/15
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: ae109f0cba290849a75f4be9eb0c52c853dc6cbe
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:46 +0000
Message-Id: <6ac4a856.474d0.770fad99@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=ae109f0cba290849a75f4be9eb0c52c853dc6cbe

commit ae109f0cba290849a75f4be9eb0c52c853dc6cbe
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-09-28 23:51:39 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:47 +0000

    ufshci: define the sleep types locally for stable/15
    
    The suspend/resume support merged next uses enum power_stype from
    <sys/power.h>. That enum comes from the generic sleep types work
    (c43473dc9b83), which is not in stable/15 and depends on ACPI changes
    that are not here either.
    
    Define the enum in ufshci_private.h with the names the driver uses, so
    the following merges from main apply without changes.
    
    This is a direct commit to stable/15.
    
    Sponsored by:   Samsung Electronics
---
 sys/dev/ufshci/ufshci_private.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index 22e77c9b9326..5ded8777753d 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -50,6 +50,20 @@ MALLOC_DECLARE(M_UFSHCI);
 
 #define UFSHCI_SECTOR_SIZE	      (512)
 
+/*
+ * stable/15 has no generic sleep types in <sys/power.h>, so define the
+ * ones this driver uses here.
+ */
+enum power_stype {
+	POWER_STYPE_AWAKE,
+	POWER_STYPE_STANDBY,
+	POWER_STYPE_SUSPEND_TO_MEM,
+	POWER_STYPE_SUSPEND_TO_IDLE,
+	POWER_STYPE_HIBERNATE,
+	POWER_STYPE_POWEROFF,
+	POWER_STYPE_COUNT,
+};
+
 struct ufshci_controller;
 
 struct ufshci_completion_poll_status {

From nobody Tue Oct  6 07:50:48 2026
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 4hzT2c338Xz6cVsB
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:48 +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 4hzT2c1S0pz4G1S
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:48 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273048;
	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=L2cLFl1/wfZDaRCNpm/tZ+MIncnxtewHm35oI2/K41k=;
	b=Z2h05I6ykPDp9e5QxZftBgi4DrlEM94ey2K0ExcD/zY/8vDC1RWZOreYi9l9GrPA+mmdK5
	13Ta12ytcWuvrKhP67RzLids6OglFBMxuIKPCZoVnTqFPFkWVqmoiYutEyFv473TYQVg6y
	MrxvKGELK3x8lty+uzo0phmp+Ev0SjKH2vTlh76GzUVBmfRNgOlBoKzelccki2S0uAZqwa
	Ds+N/+7wBuufAjmLyWK8R82EYrWw21V4vr3sxYngNgNl6VoFQ34GuecaMY1vEvI2d/sWKi
	UqS26nB7CN77FiqMPkcKagv5+ySz1qb6fL7gsoJi3UNivVVITBuRTxBtCQKZtw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273048;
	b=vrTuNdHqRaWuUvOtq0PylWdTk/+nkL/tSExuUkVeR99tEuKUYMNZWI/hmXY4b4fzFIdCQc
	E5UYrqszjb5fWlWdNoFbXi0u/maOnlLeKRRN3DyNWkeYimxHMhF3MilTVCKF+/3n2Zbp9q
	65tRl+aladnE/I4GSHhl7bEbU4+nzbdkHMgX9ydoafcyHgGPuqU7vibFAP4hzF6bvVsroc
	egvp+eF7yd2Y4FfK+TS59nrkJieI0eTs69tqeYgvkKW4k2k2z4mou2ODgEpCxc0hbtT1+s
	vp46UX8GNbhwcvdP2jSvQ6rtH8ZKQppRSvYa+1iev43UmAE4JEwbZXv9YGVEYg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273048;
	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=L2cLFl1/wfZDaRCNpm/tZ+MIncnxtewHm35oI2/K41k=;
	b=Wze0HtqchYOb+axTmMtgAhGb5uIY53vV6z7UCLqFjR+e1jmrg+37i7B6VRXA2aOSSMefc8
	E1DHgyyQVvFYg241ULDnUzjJVcSv3vW+yuRa/bEoggfpyVCKZTkcNdbYFqKLUF4jamUU7y
	my072GOHsy8hi+mdSnPcuQ/8GMupbWOKvG7DgphzvIKddZzAPl3bJVxPgX8J24s/VIpxQ8
	/a7m2wyMoIjguA4vwK569jfobHENA/7dxgmuAzo8AEs7pIK/JxO/fqthOEKhLZYNGIK3aJ
	vbTeIqzqBiiPO1f5Artio6COQnYK85NiyOXoUPgo5xTqZZ1YuhiwBqRe5Z+vzw==
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 4hzT2c0GR0zwyt
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:48 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18721
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:48 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 1b063270950c - stable/15 - ufshci: Support suspend/resume
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 1b063270950c4b444f156d54619c6740271f96ef
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:48 +0000
Message-Id: <6ac4a858.18721.dbf2b12@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=1b063270950c4b444f156d54619c6740271f96ef

commit 1b063270950c4b444f156d54619c6740271f96ef
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2025-12-03 04:05:36 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:48 +0000

    ufshci: Support suspend/resume
    
    Handle system power events and issue START STOP UNIT (SSU) to the
    UFS Device WLUN (0x50).
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D54002
    
    (cherry picked from commit 3a99f31fdb6c66434f77d83ca5166aae4ad2d22c)
---
 sys/dev/ufshci/ufshci_ctrlr.c     | 50 +++++++++++++++++++++++++++++++++++++++
 sys/dev/ufshci/ufshci_dev.c       | 19 +++++++++++++++
 sys/dev/ufshci/ufshci_pci.c       | 22 ++++++++++++++++-
 sys/dev/ufshci/ufshci_private.h   | 35 ++++++++++++++++++++++++++-
 sys/dev/ufshci/ufshci_req_queue.c |  3 ++-
 sys/dev/ufshci/ufshci_sim.c       |  7 +++++-
 sys/dev/ufshci/ufshci_sysctl.c    |  3 +++
 7 files changed, 135 insertions(+), 4 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index 7c225423c266..6bdee85142a0 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -610,3 +610,53 @@ ufshci_reg_dump(struct ufshci_controller *ctrlr)
 
 	ufshci_printf(ctrlr, "========================================\n");
 }
+
+int
+ufshci_ctrlr_suspend(struct ufshci_controller *ctrlr, enum power_stype stype)
+{
+	int error;
+
+	if (!ctrlr->ufs_dev.power_mode_supported)
+		return (0);
+
+	/* TODO: Need to flush the request queue */
+
+	if (ctrlr->ufs_device_wlun_periph) {
+		ctrlr->ufs_dev.power_mode = power_map[stype].dev_pwr;
+		error = ufshci_sim_send_ssu(ctrlr, /*start*/ false,
+		    power_map[stype].ssu_pc, /*immed*/ false);
+		if (error) {
+			ufshci_printf(ctrlr,
+			    "Failed to send SSU in suspend handler\n");
+			return (error);
+		}
+	}
+
+	/* TODO: Change the link state to Hibernate if necessary. */
+
+	return (0);
+}
+
+int
+ufshci_ctrlr_resume(struct ufshci_controller *ctrlr, enum power_stype stype)
+{
+	int error;
+
+	if (!ctrlr->ufs_dev.power_mode_supported)
+		return (0);
+
+	/* TODO: Change the link state to Active if necessary. */
+
+	if (ctrlr->ufs_device_wlun_periph) {
+		ctrlr->ufs_dev.power_mode = power_map[stype].dev_pwr;
+		error = ufshci_sim_send_ssu(ctrlr, /*start*/ false,
+		    power_map[stype].ssu_pc, /*immed*/ false);
+		if (error) {
+			ufshci_printf(ctrlr,
+			    "Failed to send SSU in resume handler\n");
+			return (error);
+		}
+	}
+
+	return (0);
+}
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 9696e8ea8091..136823523fd3 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -469,6 +469,8 @@ ufshci_dev_init_ufs_power_mode(struct ufshci_controller *ctrlr)
 	}
 
 	ctrlr->ufs_dev.power_mode_supported = true;
+	ctrlr->ufs_dev.power_mode = UFSHCI_DEV_PWR_ACTIVE;
+
 	return (0);
 }
 
@@ -786,3 +788,20 @@ out:
 	ufshci_dev_disable_write_booster(ctrlr);
 	return (error);
 }
+
+int
+ufshci_dev_get_current_power_mode(struct ufshci_controller *ctrlr,
+    uint8_t *power_mode)
+{
+	uint64_t value;
+	int err;
+
+	err = ufshci_dev_read_attribute(ctrlr, UFSHCI_ATTR_B_CURRENT_POWER_MODE,
+	    /*index*/ 0, /*selector*/ 0, &value);
+	if (err)
+		return (err);
+
+	*power_mode = (uint8_t)value;
+
+	return (0);
+}
diff --git a/sys/dev/ufshci/ufshci_pci.c b/sys/dev/ufshci/ufshci_pci.c
index 756ac6540632..d4ba05e1a37d 100644
--- a/sys/dev/ufshci/ufshci_pci.c
+++ b/sys/dev/ufshci/ufshci_pci.c
@@ -23,6 +23,8 @@
 static int ufshci_pci_probe(device_t);
 static int ufshci_pci_attach(device_t);
 static int ufshci_pci_detach(device_t);
+static int ufshci_pci_suspend(device_t);
+static int ufshci_pci_resume(device_t);
 
 static int ufshci_pci_setup_interrupts(struct ufshci_controller *ctrlr);
 
@@ -31,7 +33,8 @@ static device_method_t ufshci_pci_methods[] = {
 	DEVMETHOD(device_probe, ufshci_pci_probe),
 	DEVMETHOD(device_attach, ufshci_pci_attach),
 	DEVMETHOD(device_detach, ufshci_pci_detach),
-	/* TODO: Implement Suspend, Resume */
+	DEVMETHOD(device_suspend, ufshci_pci_suspend),
+	DEVMETHOD(device_resume, ufshci_pci_resume),
 	DEVMETHOD_END
 };
 
@@ -261,3 +264,20 @@ msi:
 intx:
 	return (ufshci_pci_setup_shared(ctrlr, ctrlr->msi_count > 0 ? 1 : 0));
 }
+
+static int
+ufshci_pci_suspend(device_t dev)
+{
+	struct ufshci_controller *ctrlr = device_get_softc(dev);
+
+	/* Currently, PCI-based ufshci only supports POWER_STYPE_STANDBY */
+	return (ufshci_ctrlr_suspend(ctrlr, POWER_STYPE_STANDBY));
+}
+
+static int
+ufshci_pci_resume(device_t dev)
+{
+	struct ufshci_controller *ctrlr = device_get_softc(dev);
+
+	return (ufshci_ctrlr_resume(ctrlr, POWER_STYPE_AWAKE));
+}
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index 5ded8777753d..07e29e8ea73e 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -26,12 +26,14 @@
 #include <sys/memdesc.h>
 #include <sys/module.h>
 #include <sys/mutex.h>
+#include <sys/power.h>
 #include <sys/rman.h>
 #include <sys/taskqueue.h>
 
 #include <machine/bus.h>
 
 #include <cam/cam.h>
+#include <cam/scsi/scsi_all.h>
 
 #include "ufshci.h"
 
@@ -247,6 +249,30 @@ struct ufshci_req_queue {
 	bus_dmamap_t ucdmem_map;
 };
 
+enum ufshci_dev_pwr {
+	UFSHCI_DEV_PWR_ACTIVE = 0,
+	UFSHCI_DEV_PWR_SLEEP,
+	UFSHCI_DEV_PWR_POWERDOWN,
+	UFSHCI_DEV_PWR_DEEPSLEEP,
+	UFSHCI_DEV_PWR_COUNT,
+};
+
+struct ufshci_power_entry {
+	enum ufshci_dev_pwr dev_pwr;
+	uint8_t ssu_pc; /* SSU Power Condition */
+};
+
+/* SSU Power Condition 0x40 is defined in the UFS specification */
+static const struct ufshci_power_entry power_map[POWER_STYPE_COUNT] = {
+	[POWER_STYPE_AWAKE] = { UFSHCI_DEV_PWR_ACTIVE, SSS_PC_ACTIVE },
+	[POWER_STYPE_STANDBY] = { UFSHCI_DEV_PWR_SLEEP, SSS_PC_IDLE },
+	[POWER_STYPE_SUSPEND_TO_MEM] = { UFSHCI_DEV_PWR_POWERDOWN,
+	    SSS_PC_STANDBY },
+	[POWER_STYPE_SUSPEND_TO_IDLE] = { UFSHCI_DEV_PWR_SLEEP, SSS_PC_IDLE },
+	[POWER_STYPE_HIBERNATE] = { UFSHCI_DEV_PWR_DEEPSLEEP, 0x40 },
+	[POWER_STYPE_POWEROFF] = { UFSHCI_DEV_PWR_POWERDOWN, SSS_PC_STANDBY },
+};
+
 struct ufshci_device {
 	uint32_t max_lun_count;
 
@@ -266,6 +292,7 @@ struct ufshci_device {
 
 	/* Power mode */
 	bool power_mode_supported;
+	enum ufshci_dev_pwr power_mode;
 };
 
 /*
@@ -400,12 +427,16 @@ void ufshci_sim_detach(struct ufshci_controller *ctrlr);
 struct cam_periph *ufshci_sim_find_periph(struct ufshci_controller *ctrlr,
     uint8_t wlun);
 int ufshci_sim_send_ssu(struct ufshci_controller *ctrlr, bool start,
-    int pwr_cond, bool immed);
+    uint8_t pwr_cond, bool immed);
 
 /* Controller */
 int ufshci_ctrlr_construct(struct ufshci_controller *ctrlr, device_t dev);
 void ufshci_ctrlr_destruct(struct ufshci_controller *ctrlr, device_t dev);
 void ufshci_ctrlr_reset(struct ufshci_controller *ctrlr);
+int ufshci_ctrlr_suspend(struct ufshci_controller *ctrlr,
+    enum power_stype stype);
+int ufshci_ctrlr_resume(struct ufshci_controller *ctrlr,
+    enum power_stype stype);
 /* ctrlr defined as void * to allow use with config_intrhook. */
 void ufshci_ctrlr_start_config_hook(void *arg);
 void ufshci_ctrlr_poll(struct ufshci_controller *ctrlr);
@@ -429,6 +460,8 @@ int ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr);
 int ufshci_dev_init_ufs_power_mode(struct ufshci_controller *ctrlr);
 int ufshci_dev_get_descriptor(struct ufshci_controller *ctrlr);
 int ufshci_dev_config_write_booster(struct ufshci_controller *ctrlr);
+int ufshci_dev_get_current_power_mode(struct ufshci_controller *ctrlr,
+    uint8_t *power_mode);
 
 /* Controller Command */
 void ufshci_ctrlr_cmd_send_task_mgmt_request(struct ufshci_controller *ctrlr,
diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index 7aa164d00bec..df7e4b159278 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -147,7 +147,8 @@ ufshci_req_queue_response_is_error(struct ufshci_req_queue *req_queue,
 	/* Check response UPIU header */
 	if (response->header.response != UFSHCI_RESPONSE_CODE_TARGET_SUCCESS) {
 		ufshci_printf(req_queue->ctrlr,
-		    "Invalid response code = 0x%x\n",
+		    "Function(0x%x) Invalid response code = 0x%x\n",
+		    response->header.ext_iid_or_function,
 		    response->header.response);
 		is_error = true;
 	}
diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 0cd691de47e2..1589e7475ad4 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -46,6 +46,11 @@ ufshci_sim_scsiio_done(void *ccb_arg, const struct ufshci_completion *cpl,
 
 	ccb->ccb_h.status &= ~CAM_SIM_QUEUED;
 	if (error) {
+		printf("ufshci: SCSI command completion error, Status(0x%x)"
+		       " Key(0x%x), ASC(0x%x), ASCQ(0x%x)\n",
+		    cpl->response_upiu.cmd_response_upiu.header
+			.ext_iid_or_status,
+		    sense_data[2], sense_data[12], sense_data[13]);
 		ccb->ccb_h.status = CAM_REQ_CMP_ERR;
 		xpt_done(ccb);
 	} else {
@@ -455,7 +460,7 @@ ufshci_sim_find_periph(struct ufshci_controller *ctrlr, uint8_t wlun)
 /* This function is called during suspend/resume. */
 int
 ufshci_sim_send_ssu(struct ufshci_controller *ctrlr, bool start,
-    int power_condition, bool immed)
+    uint8_t power_condition, bool immed)
 {
 	struct cam_periph *periph = ctrlr->ufs_device_wlun_periph;
 	union ccb *ccb;
diff --git a/sys/dev/ufshci/ufshci_sysctl.c b/sys/dev/ufshci/ufshci_sysctl.c
index 3ec4ea935464..30b0ccaeed13 100644
--- a/sys/dev/ufshci/ufshci_sysctl.c
+++ b/sys/dev/ufshci/ufshci_sysctl.c
@@ -201,6 +201,9 @@ ufshci_sysctl_initialize_ctrlr(struct ufshci_controller *ctrlr)
 	    CTLFLAG_RD, &dev->power_mode_supported, 0,
 	    "Device power mode support");
 
+	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "power_mode",
+	    CTLFLAG_RD, &dev->power_mode, 0, "Current device power mode");
+
 	SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, "timeout_period",
 	    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, &ctrlr->timeout_period,
 	    0, ufshci_sysctl_timeout_period, "IU",

From nobody Tue Oct  6 07:50:49 2026
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 4hzT2g029jz6cW7k
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:51 +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 4hzT2d5tV7z4G1c
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:49 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273050;
	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=IQqaz89RA9+OxQtxGCu8Qen60fN1tGY3dORAUP0sGWY=;
	b=os36/q0QWZWsvAFXkoe+UK+V+5PaueMSMgFsNzwk64zrqYQhFFtjPScqfWp/9SIJUJYmIt
	zpQXxkjHL9i6N6vQVuaxrCiSzafoK7S73X/NtpGUmR5nukmzm9snweVibZ1PyGY+NSwu0o
	cvlB/pUEnpjGXKcgS4vD8xfgc0EnYZ9KEtLNGhPfn9Ag3awVIoLA+w/M0Md7bs9glKhVIk
	tP9/xpoPr3r1UpkKx5nuQspU5TI8QEAdSbYzV84gFIkn/eywMln9MjPMtcnH691nMZri2J
	NqHZNyFTfvTfC7XNjfQtJWG675d3hhXqfNSsaYAezfslpDUmoyyDvVOv9PFuZQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273050;
	b=WRPkp68ISqS3Yz7AF4Jv0jLtofUaYaV92ESNyPIHJYQSANHqe+Bd0tqMCTcKNf4fvYAliM
	p8g8k+K0aSLSWCLffV0d5ctAHXkXpIp5BfyYT2PMYQJkRj/wbs6SCbuvrKQ8BdSTHHt2fM
	ZpAKPyGm8SdIiWFNA+nUYuwbsigfVe8Iam7NpUMmNhNbGti7/0AJJQCf1kXzNO3QTni273
	2q++QwoywaLzdjasWQv5BAaZxDMeLej0JCDK39JWNatl3pOBsaqHwL0Bvw+NGgU0x8J/hu
	becF+wiX+j3mpl+aGf/cBpZE08dAPT01VgyjxbTb+221t2wrCf25bCeA7Yen2Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273050;
	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=IQqaz89RA9+OxQtxGCu8Qen60fN1tGY3dORAUP0sGWY=;
	b=vtBv8VUDc+TFFi0IC/MY842NTjogCHiRYK00cNX/0g5indoCZhibfscaytBkaFk9Me6Dwh
	3R0LtqiPq+253INvqaC9cxvgQsEBHmYOy06VhVWVGJxceoNjTxc0xRdT562uENIzyIRXjx
	pKJj9DLKmJCTNCpYRIi38PnvRxUvo6QJa/C+lfFFU12Us1Ezewcnpmm4rHJAdu7vsTqL/H
	ya0bq5TjNf5eJ2fbPppowfusUasutjvXhRvpow7Thj0W5Aytz0HyJPo6sukz++kB/bxNld
	AuMiURjr0PoNVOraFUo19xWZPfKMjsgurqdf3SiSL8tImOKFSByvLXhYsAg0Mw==
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 4hzT2d1FH1zxKG
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:49 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 4772d
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:49 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: ff341c1149f9 - stable/15 - ufshci: Support UIC hibernation enter/exit
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: ff341c1149f958f0038c76ddeaf3bd7abd43e40e
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:49 +0000
Message-Id: <6ac4a859.4772d.5d0a2824@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=ff341c1149f958f0038c76ddeaf3bd7abd43e40e

commit ff341c1149f958f0038c76ddeaf3bd7abd43e40e
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2025-12-03 04:05:51 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:48 +0000

    ufshci: Support UIC hibernation enter/exit
    
    Add helpers to issue DME_HIBERNATE_ENTER/DME_HIBERNATE_EXIT and
    call them during suspend/resume.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D54003
    
    (cherry picked from commit bec77e3a160dba10cbc30416f53a506ca2b9301f)
---
 sys/dev/ufshci/ufshci_ctrlr.c   | 22 ++++++++++--
 sys/dev/ufshci/ufshci_dev.c     | 77 +++++++++++++++++++++++++++++++++++++++--
 sys/dev/ufshci/ufshci_private.h | 33 ++++++++++++++----
 sys/dev/ufshci/ufshci_uic_cmd.c | 77 ++++++++++++++++++++++++++++++++++++++++-
 4 files changed, 196 insertions(+), 13 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index 6bdee85142a0..8c4b88e23587 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -79,6 +79,8 @@ ufshci_ctrlr_start(struct ufshci_controller *ctrlr, bool resetting)
 		return;
 	}
 
+	ufshci_dev_init_uic_link_state(ctrlr);
+
 	/* Read Controller Descriptor (Device, Geometry) */
 	if (ufshci_dev_get_descriptor(ctrlr) != 0) {
 		ufshci_ctrlr_fail(ctrlr);
@@ -187,7 +189,7 @@ ufshci_ctrlr_enable_host_ctrlr(struct ufshci_controller *ctrlr)
 	return (0);
 }
 
-static int
+int
 ufshci_ctrlr_disable(struct ufshci_controller *ctrlr)
 {
 	int error;
@@ -632,7 +634,14 @@ ufshci_ctrlr_suspend(struct ufshci_controller *ctrlr, enum power_stype stype)
 		}
 	}
 
-	/* TODO: Change the link state to Hibernate if necessary. */
+	/* Change the link state */
+	error = ufshci_dev_link_state_transition(ctrlr,
+	    power_map[stype].link_state);
+	if (error) {
+		ufshci_printf(ctrlr,
+		    "Failed to transition link state in suspend handler\n");
+		return (error);
+	}
 
 	return (0);
 }
@@ -645,7 +654,14 @@ ufshci_ctrlr_resume(struct ufshci_controller *ctrlr, enum power_stype stype)
 	if (!ctrlr->ufs_dev.power_mode_supported)
 		return (0);
 
-	/* TODO: Change the link state to Active if necessary. */
+	/* Change the link state */
+	error = ufshci_dev_link_state_transition(ctrlr,
+	    power_map[stype].link_state);
+	if (error) {
+		ufshci_printf(ctrlr,
+		    "Failed to transition link state in resume handler\n");
+		return (error);
+	}
 
 	if (ctrlr->ufs_device_wlun_periph) {
 		ctrlr->ufs_dev.power_mode = power_map[stype].dev_pwr;
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 136823523fd3..c4a5bda9c79a 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -433,9 +433,6 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr)
 		return (ENXIO);
 	}
 
-	/* Clear 'Power Mode completion status' */
-	ufshci_mmio_write_4(ctrlr, is, UFSHCIM(UFSHCI_IS_REG_UPMS));
-
 	if (ctrlr->quirks & UFSHCI_QUIRK_WAIT_AFTER_POWER_MODE_CHANGE) {
 		/*
 		 * Intel Lake-field UFSHCI has a quirk.
@@ -452,6 +449,12 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr)
 	return (0);
 }
 
+void
+ufshci_dev_init_uic_link_state(struct ufshci_controller *ctrlr)
+{
+	ctrlr->ufs_dev.link_state = UFSHCI_UIC_LINK_STATE_ACTIVE;
+}
+
 int
 ufshci_dev_init_ufs_power_mode(struct ufshci_controller *ctrlr)
 {
@@ -805,3 +808,71 @@ ufshci_dev_get_current_power_mode(struct ufshci_controller *ctrlr,
 
 	return (0);
 }
+
+static int
+ufshci_dev_hibernate_enter(struct ufshci_controller *ctrlr)
+{
+	int error;
+
+	error = ufshci_uic_send_dme_hibernate_enter(ctrlr);
+	if (error)
+		return (error);
+
+	return (ufshci_uic_hibernation_ready(ctrlr));
+}
+
+static int
+ufshci_dev_hibernate_exit(struct ufshci_controller *ctrlr)
+{
+	int error;
+
+	error = ufshci_uic_send_dme_hibernate_exit(ctrlr);
+	if (error)
+		return (error);
+
+	return (ufshci_uic_hibernation_ready(ctrlr));
+}
+
+int
+ufshci_dev_link_state_transition(struct ufshci_controller *ctrlr,
+    enum ufshci_uic_link_state target_state)
+{
+	struct ufshci_device *dev = &ctrlr->ufs_dev;
+	int error = 0;
+
+	if (dev->link_state == target_state)
+		return (0);
+
+	switch (target_state) {
+	case UFSHCI_UIC_LINK_STATE_OFF:
+		error = ufshci_dev_hibernate_enter(ctrlr);
+		if (error)
+			break;
+		error = ufshci_ctrlr_disable(ctrlr);
+		break;
+	case UFSHCI_UIC_LINK_STATE_ACTIVE:
+		if (dev->link_state == UFSHCI_UIC_LINK_STATE_HIBERNATE)
+			error = ufshci_dev_hibernate_exit(ctrlr);
+		else
+			error = EINVAL;
+		break;
+	case UFSHCI_UIC_LINK_STATE_HIBERNATE:
+		if (dev->link_state == UFSHCI_UIC_LINK_STATE_ACTIVE)
+			error = ufshci_dev_hibernate_enter(ctrlr);
+		else
+			error = EINVAL;
+		break;
+	case UFSHCI_UIC_LINK_STATE_BROKEN:
+		break;
+	default:
+		error = EINVAL;
+		break;
+	}
+
+	if (error)
+		return (error);
+
+	dev->link_state = target_state;
+
+	return (0);
+}
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index 07e29e8ea73e..14208abe398b 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -257,20 +257,33 @@ enum ufshci_dev_pwr {
 	UFSHCI_DEV_PWR_COUNT,
 };
 
+enum ufshci_uic_link_state {
+	UFSHCI_UIC_LINK_STATE_OFF = 0,
+	UFSHCI_UIC_LINK_STATE_ACTIVE,
+	UFSHCI_UIC_LINK_STATE_HIBERNATE,
+	UFSHCI_UIC_LINK_STATE_BROKEN,
+};
+
 struct ufshci_power_entry {
 	enum ufshci_dev_pwr dev_pwr;
 	uint8_t ssu_pc; /* SSU Power Condition */
+	enum ufshci_uic_link_state link_state;
 };
 
 /* SSU Power Condition 0x40 is defined in the UFS specification */
 static const struct ufshci_power_entry power_map[POWER_STYPE_COUNT] = {
-	[POWER_STYPE_AWAKE] = { UFSHCI_DEV_PWR_ACTIVE, SSS_PC_ACTIVE },
-	[POWER_STYPE_STANDBY] = { UFSHCI_DEV_PWR_SLEEP, SSS_PC_IDLE },
+	[POWER_STYPE_AWAKE] = { UFSHCI_DEV_PWR_ACTIVE, SSS_PC_ACTIVE,
+	    UFSHCI_UIC_LINK_STATE_ACTIVE },
+	[POWER_STYPE_STANDBY] = { UFSHCI_DEV_PWR_SLEEP, SSS_PC_IDLE,
+	    UFSHCI_UIC_LINK_STATE_HIBERNATE },
 	[POWER_STYPE_SUSPEND_TO_MEM] = { UFSHCI_DEV_PWR_POWERDOWN,
-	    SSS_PC_STANDBY },
-	[POWER_STYPE_SUSPEND_TO_IDLE] = { UFSHCI_DEV_PWR_SLEEP, SSS_PC_IDLE },
-	[POWER_STYPE_HIBERNATE] = { UFSHCI_DEV_PWR_DEEPSLEEP, 0x40 },
-	[POWER_STYPE_POWEROFF] = { UFSHCI_DEV_PWR_POWERDOWN, SSS_PC_STANDBY },
+	    SSS_PC_STANDBY, UFSHCI_UIC_LINK_STATE_HIBERNATE },
+	[POWER_STYPE_SUSPEND_TO_IDLE] = { UFSHCI_DEV_PWR_SLEEP, SSS_PC_IDLE,
+	    UFSHCI_UIC_LINK_STATE_HIBERNATE },
+	[POWER_STYPE_HIBERNATE] = { UFSHCI_DEV_PWR_DEEPSLEEP, 0x40,
+	    UFSHCI_UIC_LINK_STATE_OFF },
+	[POWER_STYPE_POWEROFF] = { UFSHCI_DEV_PWR_POWERDOWN, SSS_PC_STANDBY,
+	    UFSHCI_UIC_LINK_STATE_OFF },
 };
 
 struct ufshci_device {
@@ -293,6 +306,7 @@ struct ufshci_device {
 	/* Power mode */
 	bool power_mode_supported;
 	enum ufshci_dev_pwr power_mode;
+	enum ufshci_uic_link_state link_state;
 };
 
 /*
@@ -437,6 +451,7 @@ int ufshci_ctrlr_suspend(struct ufshci_controller *ctrlr,
     enum power_stype stype);
 int ufshci_ctrlr_resume(struct ufshci_controller *ctrlr,
     enum power_stype stype);
+int ufshci_ctrlr_disable(struct ufshci_controller *ctrlr);
 /* ctrlr defined as void * to allow use with config_intrhook. */
 void ufshci_ctrlr_start_config_hook(void *arg);
 void ufshci_ctrlr_poll(struct ufshci_controller *ctrlr);
@@ -457,11 +472,14 @@ int ufshci_dev_reset(struct ufshci_controller *ctrlr);
 int ufshci_dev_init_reference_clock(struct ufshci_controller *ctrlr);
 int ufshci_dev_init_unipro(struct ufshci_controller *ctrlr);
 int ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr);
+void ufshci_dev_init_uic_link_state(struct ufshci_controller *ctrlr);
 int ufshci_dev_init_ufs_power_mode(struct ufshci_controller *ctrlr);
 int ufshci_dev_get_descriptor(struct ufshci_controller *ctrlr);
 int ufshci_dev_config_write_booster(struct ufshci_controller *ctrlr);
 int ufshci_dev_get_current_power_mode(struct ufshci_controller *ctrlr,
     uint8_t *power_mode);
+int ufshci_dev_link_state_transition(struct ufshci_controller *ctrlr,
+    enum ufshci_uic_link_state target_state);
 
 /* Controller Command */
 void ufshci_ctrlr_cmd_send_task_mgmt_request(struct ufshci_controller *ctrlr,
@@ -522,6 +540,7 @@ int ufshci_req_sdb_get_inflight_io(struct ufshci_controller *ctrlr);
 
 /* UIC Command */
 int ufshci_uic_power_mode_ready(struct ufshci_controller *ctrlr);
+int ufshci_uic_hibernation_ready(struct ufshci_controller *ctrlr);
 int ufshci_uic_cmd_ready(struct ufshci_controller *ctrlr);
 int ufshci_uic_send_dme_link_startup(struct ufshci_controller *ctrlr);
 int ufshci_uic_send_dme_get(struct ufshci_controller *ctrlr, uint16_t attribute,
@@ -533,6 +552,8 @@ int ufshci_uic_send_dme_peer_get(struct ufshci_controller *ctrlr,
 int ufshci_uic_send_dme_peer_set(struct ufshci_controller *ctrlr,
     uint16_t attribute, uint32_t value);
 int ufshci_uic_send_dme_endpoint_reset(struct ufshci_controller *ctrlr);
+int ufshci_uic_send_dme_hibernate_enter(struct ufshci_controller *ctrlr);
+int ufshci_uic_send_dme_hibernate_exit(struct ufshci_controller *ctrlr);
 
 /* SYSCTL */
 void ufshci_sysctl_initialize_ctrlr(struct ufshci_controller *ctrlr);
diff --git a/sys/dev/ufshci/ufshci_uic_cmd.c b/sys/dev/ufshci/ufshci_uic_cmd.c
index b9c867ff7065..29c143cec52c 100644
--- a/sys/dev/ufshci/ufshci_uic_cmd.c
+++ b/sys/dev/ufshci/ufshci_uic_cmd.c
@@ -23,6 +23,7 @@ ufshci_uic_power_mode_ready(struct ufshci_controller *ctrlr)
 	while (1) {
 		is = ufshci_mmio_read_4(ctrlr, is);
 		if (UFSHCIV(UFSHCI_IS_REG_UPMS, is)) {
+			/* Clear 'Power Mode completion status' */
 			ufshci_mmio_write_4(ctrlr, is,
 			    UFSHCIM(UFSHCI_IS_REG_UPMS));
 			break;
@@ -32,7 +33,7 @@ ufshci_uic_power_mode_ready(struct ufshci_controller *ctrlr)
 			ufshci_printf(ctrlr,
 			    "Power mode is not changed "
 			    "within %d ms\n",
-			    ctrlr->uic_cmd_timeout_in_ms);
+			    ctrlr->device_init_timeout_in_ms);
 			return (ENXIO);
 		}
 
@@ -52,6 +53,54 @@ ufshci_uic_power_mode_ready(struct ufshci_controller *ctrlr)
 	return (0);
 }
 
+int
+ufshci_uic_hibernation_ready(struct ufshci_controller *ctrlr)
+{
+	uint32_t is, hcs;
+	int timeout;
+
+	/* Wait for the IS flag to change */
+	timeout = ticks + MSEC_2_TICKS(ctrlr->uic_cmd_timeout_in_ms);
+
+	while (1) {
+		is = ufshci_mmio_read_4(ctrlr, is);
+		if (UFSHCIV(UFSHCI_IS_REG_UHES, is)) {
+			/* Clear 'UIC Hibernate Enter Status' */
+			ufshci_mmio_write_4(ctrlr, is,
+			    UFSHCIM(UFSHCI_IS_REG_UHES));
+			break;
+		}
+		if (UFSHCIV(UFSHCI_IS_REG_UHXS, is)) {
+			/* Clear 'UIC Hibernate Exit Status' */
+			ufshci_mmio_write_4(ctrlr, is,
+			    UFSHCIM(UFSHCI_IS_REG_UHXS));
+			break;
+		}
+
+		if (timeout - ticks < 0) {
+			ufshci_printf(ctrlr,
+			    "Hibernation enter/exit are not completed "
+			    "within %d ms\n",
+			    ctrlr->uic_cmd_timeout_in_ms);
+			return (ENXIO);
+		}
+
+		/* TODO: Replace busy-wait with interrupt-based pause. */
+		DELAY(10);
+	}
+
+	/* Check HCS power mode change request status */
+	hcs = ufshci_mmio_read_4(ctrlr, hcs);
+	if (UFSHCIV(UFSHCI_HCS_REG_UPMCRS, hcs) != 0x01) {
+		ufshci_printf(ctrlr,
+		    "Hibernation enter/exit request status error: 0x%x\n",
+		    UFSHCIV(UFSHCI_HCS_REG_UPMCRS, hcs));
+		return (ENXIO);
+	}
+
+	return (0);
+}
+
 int
 ufshci_uic_cmd_ready(struct ufshci_controller *ctrlr)
 {
@@ -239,3 +288,29 @@ ufshci_uic_send_dme_endpoint_reset(struct ufshci_controller *ctrlr)
 
 	return (ufshci_uic_send_cmd(ctrlr, &uic_cmd, NULL));
 }
+
+int
+ufshci_uic_send_dme_hibernate_enter(struct ufshci_controller *ctrlr)
+{
+	struct ufshci_uic_cmd uic_cmd;
+
+	uic_cmd.opcode = UFSHCI_DME_HIBERNATE_ENTER;
+	uic_cmd.argument1 = 0;
+	uic_cmd.argument2 = 0;
+	uic_cmd.argument3 = 0;
+
+	return (ufshci_uic_send_cmd(ctrlr, &uic_cmd, NULL));
+}
+
+int
+ufshci_uic_send_dme_hibernate_exit(struct ufshci_controller *ctrlr)
+{
+	struct ufshci_uic_cmd uic_cmd;
+
+	uic_cmd.opcode = UFSHCI_DME_HIBERNATE_EXIT;
+	uic_cmd.argument1 = 0;
+	uic_cmd.argument2 = 0;
+	uic_cmd.argument3 = 0;
+
+	return (ufshci_uic_send_cmd(ctrlr, &uic_cmd, NULL));
+}

From nobody Tue Oct  6 07:50:50 2026
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 4hzT2h2KYpz6cW6H
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:52 +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 4hzT2g5mzMz4FsJ
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:51 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273051;
	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=GZcsqtwfM9yLN5WlObf7Y5pT+xwxAO646AHK3DNqAe8=;
	b=Dhy5w8fVZUjg0XO9gmyIY9MlYKgcZFBt+w2v6iHwN6JgZZKm1XlBTLED8NhvCmc4Gviac+
	ctvmNg1t3GN5iMo1ptJvVTSFjLWWbKYlfUn5SI3/9hUTmNUTIYnVr7WBTgv7sXav/466pY
	kEK1IHtNvCjkSc1EUcKl49kAJl8KkjRydU5NP6pewJuGinSjiWRmx/8NAPz2JzLR2fYTa2
	XLnwW+7JjtMTwDm9cHMgxZ6y5oPIxt4LzRkCKxZbz/wrkOJMbMSgmagZFHO+RH0tSajMM7
	/eDxG288MoCBlglla6+SXZ46eJYsDEAR9D+d/EZsrRbYGPFAKqmpA0Ys/eI7fQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273051;
	b=ImT4F4MLz7cIDi4mphHG9M92yKlAr1UyAWICiaLTNdGeZ1SdMg9sh3umlB1NtnZx7Jjs1I
	ufy2JsW/AIIwpr7238qDYQRLoLKOBJI3gnaDgJcaIcH8Sc31FGM3mI3GrvCY0jdECESNB8
	lkKmH9glbKC0lMZKRGj8KY1D0PISnsSVnmJwVZ5t0Z4VDQabOG8QVxl+KeEpZYZQnEZQ69
	hDY3oaG0cEFqnLI+WjAUfrig6UrrKeJJIZ5zGXVuIDkxIHjkP+df40xWrmKtAb7P/tlvnG
	fYk4AxUulXhoszFBqEeRxxam7fYkk0eunoCTTI2oDQLpYBIrBfP9F8iHgutAdg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273051;
	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=GZcsqtwfM9yLN5WlObf7Y5pT+xwxAO646AHK3DNqAe8=;
	b=H14PvP6f+1SvWbkY6ApkjBsMkE8ektGY72keWwsR4OYfA4P3pf0sLzVUl+IJm2Vxg/s30H
	Iq802bDYPEeksyvNFTBu6qoq0XtDKqE+RQgzOJNEZGUtApDJeeIq10n6Zy6KbvzJp2k+mG
	YCPFVvhHvimO5DzsyJwZff/GoHvfd9ckxZt4EF/Xn3KSMndGz31OFm5ioNPHIfS6Fnh3tv
	MIO4mdfLRTbUC+TZoj9x3E24jD6XrtvVQor+qa4Zoef37p7HTIO+S4ABj1tKnBHV2IwHBS
	EXrFpuKk/qiCQu2ijOCQ14E/CUuNko86KFeu3mNxq1+9YkP0zooP+o8ytNOgHQ==
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 4hzT2f2S5Pzxnt
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:50 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 47f11
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:50 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 810264f0e849 - stable/15 - ufshci: Support UIC Auto Hibernation
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 810264f0e849dd2ac2801eab2f50b2358f472721
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:50 +0000
Message-Id: <6ac4a85a.47f11.265ecbd1@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=810264f0e849dd2ac2801eab2f50b2358f472721

commit 810264f0e849dd2ac2801eab2f50b2358f472721
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2025-12-03 04:06:01 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:49 +0000

    ufshci: Support UIC Auto Hibernation
    
    Automatically transition the UniPro link to Hibernate when it is idle
    for the duration configured by the Auto-Hibernate Idle Timer (AHIT).
    This reduces link power while the device is inactive.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D54004
    
    (cherry picked from commit db8b06468baefb9d9b5db5f91084d85071bfb5cb)
---
 sys/dev/ufshci/ufshci_ctrlr.c   |  4 ++++
 sys/dev/ufshci/ufshci_dev.c     | 27 +++++++++++++++++++++++++++
 sys/dev/ufshci/ufshci_pci.c     |  3 ++-
 sys/dev/ufshci/ufshci_private.h |  9 +++++++++
 sys/dev/ufshci/ufshci_sysctl.c  | 28 ++++++++++++++++++++++++++++
 sys/dev/ufshci/ufshci_uic_cmd.c |  5 +++--
 6 files changed, 73 insertions(+), 3 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index 8c4b88e23587..b51cdbb74f9c 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -92,6 +92,8 @@ ufshci_ctrlr_start(struct ufshci_controller *ctrlr, bool resetting)
 		return;
 	}
 
+	ufshci_dev_init_auto_hibernate(ctrlr);
+
 	/* TODO: Configure Write Protect */
 
 	/* TODO: Configure Background Operations */
@@ -674,5 +676,7 @@ ufshci_ctrlr_resume(struct ufshci_controller *ctrlr, enum power_stype stype)
 		}
 	}
 
+	ufshci_dev_enable_auto_hibernate(ctrlr);
+
 	return (0);
 }
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index c4a5bda9c79a..38c6de9731a4 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -449,6 +449,33 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr)
 	return (0);
 }
 
+void
+ufshci_dev_enable_auto_hibernate(struct ufshci_controller *ctrlr)
+{
+	if (!ctrlr->ufs_dev.auto_hibernation_supported)
+		return;
+
+	ufshci_mmio_write_4(ctrlr, ahit, ctrlr->ufs_dev.ahit);
+}
+
+void
+ufshci_dev_init_auto_hibernate(struct ufshci_controller *ctrlr)
+{
+	ctrlr->ufs_dev.auto_hibernation_supported =
+	    UFSHCIV(UFSHCI_CAP_REG_AUTOH8, ctrlr->cap) &&
+	    !(ctrlr->quirks & UFSHCI_QUIRK_BROKEN_AUTO_HIBERNATE);
+
+	if (!ctrlr->ufs_dev.auto_hibernation_supported)
+		return;
+
+	/* The default value for auto hibernation is 150 ms */
+	ctrlr->ufs_dev.ahit = 0;
+	ctrlr->ufs_dev.ahit |= UFSHCIF(UFSHCI_AHIT_REG_AH8ITV, 150);
+	ctrlr->ufs_dev.ahit |= UFSHCIF(UFSHCI_AHIT_REG_TS, 3);
+
+	ufshci_dev_enable_auto_hibernate(ctrlr);
+}
+
 void
 ufshci_dev_init_uic_link_state(struct ufshci_controller *ctrlr)
 {
diff --git a/sys/dev/ufshci/ufshci_pci.c b/sys/dev/ufshci/ufshci_pci.c
index d4ba05e1a37d..b01d010685ba 100644
--- a/sys/dev/ufshci/ufshci_pci.c
+++ b/sys/dev/ufshci/ufshci_pci.c
@@ -59,7 +59,8 @@ static struct _pcsid {
 	    UFSHCI_REF_CLK_19_2MHz,
 	    UFSHCI_QUIRK_LONG_PEER_PA_TACTIVATE |
 		UFSHCI_QUIRK_WAIT_AFTER_POWER_MODE_CHANGE |
-		UFSHCI_QUIRK_CHANGE_LANE_AND_GEAR_SEPARATELY },
+		UFSHCI_QUIRK_CHANGE_LANE_AND_GEAR_SEPARATELY |
+		UFSHCI_QUIRK_BROKEN_AUTO_HIBERNATE },
 	{ 0x54ff8086, "Intel UFS Host Controller", UFSHCI_REF_CLK_19_2MHz },
 	{ 0x00000000, NULL } };
 
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index 14208abe398b..0d67b6ecdabe 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -307,6 +307,10 @@ struct ufshci_device {
 	bool power_mode_supported;
 	enum ufshci_dev_pwr power_mode;
 	enum ufshci_uic_link_state link_state;
+
+	/* Auto Hibernation */
+	bool auto_hibernation_supported;
+	uint32_t ahit;
 };
 
 /*
@@ -328,6 +332,9 @@ struct ufshci_controller {
 	16 /* QEMU does not support Task Management Request */
 #define UFSHCI_QUIRK_SKIP_WELL_KNOWN_LUNS \
 	32 /* QEMU does not support Well known logical units*/
+#define UFSHCI_QUIRK_BROKEN_AUTO_HIBERNATE                                    \
+	64 /* Some controllers have the Auto hibernate feature enabled but it \
+	      does not work. */
 
 	uint32_t ref_clk;
 
@@ -471,6 +478,8 @@ int ufshci_dev_init(struct ufshci_controller *ctrlr);
 int ufshci_dev_reset(struct ufshci_controller *ctrlr);
 int ufshci_dev_init_reference_clock(struct ufshci_controller *ctrlr);
 int ufshci_dev_init_unipro(struct ufshci_controller *ctrlr);
+void ufshci_dev_enable_auto_hibernate(struct ufshci_controller *ctrlr);
+void ufshci_dev_init_auto_hibernate(struct ufshci_controller *ctrlr);
 int ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr);
 void ufshci_dev_init_uic_link_state(struct ufshci_controller *ctrlr);
 int ufshci_dev_init_ufs_power_mode(struct ufshci_controller *ctrlr);
diff --git a/sys/dev/ufshci/ufshci_sysctl.c b/sys/dev/ufshci/ufshci_sysctl.c
index 30b0ccaeed13..495f087f3c50 100644
--- a/sys/dev/ufshci/ufshci_sysctl.c
+++ b/sys/dev/ufshci/ufshci_sysctl.c
@@ -11,6 +11,7 @@
 #include <sys/sysctl.h>
 
 #include "ufshci_private.h"
+#include "ufshci_reg.h"
 
 static int
 ufshci_sysctl_timeout_period(SYSCTL_HANDLER_ARGS)
@@ -106,6 +107,22 @@ ufshci_sysctl_num_failures(SYSCTL_HANDLER_ARGS)
 	return (sysctl_handle_64(oidp, &num_failures, 0, req));
 }
 
+static int
+ufshci_sysctl_ahit(SYSCTL_HANDLER_ARGS)
+{
+	struct ufshci_controller *ctrlr = arg1;
+	int64_t scale, timer;
+	const int64_t scale_factor = 10;
+
+	scale = UFSHCIV(UFSHCI_AHIT_REG_TS, ctrlr->ufs_dev.ahit);
+	timer = UFSHCIV(UFSHCI_AHIT_REG_AH8ITV, ctrlr->ufs_dev.ahit);
+
+	while (scale--)
+		timer *= scale_factor;
+
+	return (sysctl_handle_64(oidp, &timer, 0, req));
+}
+
 static void
 ufshci_sysctl_initialize_queue(struct ufshci_hw_queue *hwq,
     struct sysctl_ctx_list *ctrlr_ctx, struct sysctl_oid *que_tree)
@@ -201,6 +218,17 @@ ufshci_sysctl_initialize_ctrlr(struct ufshci_controller *ctrlr)
 	    CTLFLAG_RD, &dev->power_mode_supported, 0,
 	    "Device power mode support");
 
+	SYSCTL_ADD_BOOL(ctrlr_ctx, ctrlr_list, OID_AUTO,
+	    "auto_hibernation_supported", CTLFLAG_RD,
+	    &dev->auto_hibernation_supported, 0,
+	    "Device auto hibernation support");
+
+	SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
+	    "auto_hibernate_idle_timer_value",
+	    CTLTYPE_S64 | CTLFLAG_RD | CTLFLAG_MPSAFE, ctrlr, 0,
+	    ufshci_sysctl_ahit, "IU",
+	    "Auto-Hibernate Idle Timer Value (in microseconds)");
+
 	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "power_mode",
 	    CTLFLAG_RD, &dev->power_mode, 0, "Current device power mode");
 
diff --git a/sys/dev/ufshci/ufshci_uic_cmd.c b/sys/dev/ufshci/ufshci_uic_cmd.c
index 29c143cec52c..c6e6afe3f688 100644
--- a/sys/dev/ufshci/ufshci_uic_cmd.c
+++ b/sys/dev/ufshci/ufshci_uic_cmd.c
@@ -196,8 +196,9 @@ ufshci_uic_send_cmd(struct ufshci_controller *ctrlr,
 	config_result_code = ufshci_mmio_read_4(ctrlr, ucmdarg2);
 	if (config_result_code) {
 		ufshci_printf(ctrlr,
-		    "Failed to send UIC command. (config result code = 0x%x)\n",
-		    config_result_code);
+		    "Failed to send UIC command (Opcode: 0x%x"
+		    ", config result code = 0x%x)\n",
+		    uic_cmd->opcode, config_result_code);
 	}
 
 	if (return_value != NULL)

From nobody Tue Oct  6 07:50:51 2026
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 4hzT2h730vz6cW1n
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:52 +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 4hzT2h0xrhz4Fvj
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:52 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273052;
	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=/HrSuqJwxXeVnnT684UJJ2sTXnU+pGM4qReH9n46ze4=;
	b=Xog90yjGOyejwvNmqmqQIUQlO/cCwzYK2X6Ri56sXCMfL2QLxS3Q0wjpyw9SxYVdJgCD0p
	z0FIzSp42t4t8LLQkLIYNlIPJrFchBlt9Xg4ahdGN3PFn2QNTljtDINodtnYByL3kYRjjq
	4f/19jXJBYis0yLkGkwKI9OpOd5tCFeIAyb5Nos5WuhEtQh+vo8aDlTwW7+KQ7tb09ukLN
	y13KubdfBbjhiIDzLoArTNvwzR0xKz9BqzsPVaJ2WVpLssn05ycrZobdHiWwKp2EM29Gj7
	YtYuZQcV7W680fj6tgNEPB31jpXbgbDW1//Lt2T9wpTQqkE3RVSEH9RHCPsnCQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273052;
	b=af9YRlB8L74uiXynYC73zI4rQ++XjEySFaX0rjj6HkJNihZMqKrRbnUyDAKI9naVWmwZgD
	9I655ks/S4/4nS0qcaUfl6m9M0N0fBGdJBt8vPvk9Yl5ZHm5HEicohEyywwUMcFBvw/K1k
	pGG/Le8xJ5ytUrXvgax6JD3+1vUvF72yvc5OwagnX5etr2YubQk/qKQB4PhtxRtzeV4ZgQ
	sHom+VGjdmcjGAMjymBiCsliTywJ6qXy0UDBg0BLBfcs/bkNAR4/m2LoCpuKegG1q9tmzM
	eSuyyz4Jf5lC91Adif3elmn6AqqHwfVDsa4oEiUgrnkI1i+c5NadvnbnbdW97A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273052;
	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=/HrSuqJwxXeVnnT684UJJ2sTXnU+pGM4qReH9n46ze4=;
	b=aCqqTH0qkmx37pgzEmdUnr0noz8H9lonnBFzSLw0skJvffSp3aclV5vZ/dSRv5jvVRCz5g
	bAskbXm5eh7Og9An1aY1+JGts3rsSgHpTkR120uD3NkHYUguKdPerPrTc1F/OfDInobmYp
	U5wxbKIQuQfJBNuG0bmji0yeMfmAYzbSsesA2NqyGkhwKM9EjjlUFx+9EcfLCZCv4qVHed
	ur3/aVlAtydiR/CCq4yvPCbLWC8V3hy3suc8x4qMJTd6gN0A33hB8WWhADzxi5s7TMWBkU
	Tx6uI5zft5IgmQF/K09U7DMcZI2eS572s5Qr0vMO/fu+8DQMYZtQ8gND+8N+RQ==
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 4hzT2g2z3wzxKJ
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:51 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 47b5e
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:51 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 5480024f603d - stable/15 - ufshci: Add a Auto Hibernate quirk to Intel Alder Lake-N
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 5480024f603dab61768dec76fe40dd9fa27f7d2e
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:51 +0000
Message-Id: <6ac4a85b.47b5e.23458dca@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=5480024f603dab61768dec76fe40dd9fa27f7d2e

commit 5480024f603dab61768dec76fe40dd9fa27f7d2e
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2025-12-03 04:06:09 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:49 +0000

    ufshci: Add a Auto Hibernate quirk to Intel Alder Lake-N
    
    Alder Lake-N supports Auto Hibernate, but it does not work.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D54006
    
    (cherry picked from commit 0e60cb8c6a4e9cf943b7360cbd9e9a390f545a10)
---
 sys/dev/ufshci/ufshci_pci.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sys/dev/ufshci/ufshci_pci.c b/sys/dev/ufshci/ufshci_pci.c
index b01d010685ba..606f2a095576 100644
--- a/sys/dev/ufshci/ufshci_pci.c
+++ b/sys/dev/ufshci/ufshci_pci.c
@@ -61,7 +61,8 @@ static struct _pcsid {
 		UFSHCI_QUIRK_WAIT_AFTER_POWER_MODE_CHANGE |
 		UFSHCI_QUIRK_CHANGE_LANE_AND_GEAR_SEPARATELY |
 		UFSHCI_QUIRK_BROKEN_AUTO_HIBERNATE },
-	{ 0x54ff8086, "Intel UFS Host Controller", UFSHCI_REF_CLK_19_2MHz },
+	{ 0x54ff8086, "Intel Alder Lake-N UFS Host Controller",
+	    UFSHCI_REF_CLK_19_2MHz, UFSHCI_QUIRK_BROKEN_AUTO_HIBERNATE },
 	{ 0x00000000, NULL } };
 
 static int

From nobody Tue Oct  6 07:50:52 2026
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 4hzT2j17sxz6cW7t
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:53 +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 4hzT2h4vwJz4G8q
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:52 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273052;
	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=gm+WH6axDi1T5gOmZz9qCOvED0wfTFTq4naJptSiNto=;
	b=dEaYtnMHwg+2mQTiyXVojJgP7EnZyglfXKZn0OnYKd90H9dCeg6C+GwkSOzb6hqq9RKCj3
	dFQi7X+TFkRivxUWL5QV2r9PED6Sy70hMgu3NA9Utg6nijEiL3JyyGGjKvusoQGgPvzkqE
	Mt7eq6Ohl1w4esxxhHLPa8D7ZoY2lmgz2iq4CdZh4msoIbsqvB1Z6h/TRRVCCKbZ836FHV
	p1cVkT5npre+E6gmTHl0u9csd/hFH7cPKk5Vs9TJq5lGGkdZ/4vcvCAu1AesuztbJnQMGi
	VrVvPpT8EsvbLzMD4tsDB4Zho3QatNIBj/u/Uv65iwWVhcL87cXPypuaLfkS5g==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273052;
	b=mF8JSbwSt1Y3+eTRQLcn4sPcp3cgHOF6lK3sWXuyOAJWl6em12QMeqYfTnDlC5I2D+/rMe
	Pr82ZDzJbtBcGZHBUpEgyDkzdN8pjsz2y/VT0V2w4X1JvWZg3lSP+BQfHq1XxgiCd/sn0r
	v0heoAXT5zjavJXrPlUWLfGvusPqfEtFCu/eY4RpiLNjKP6qV+WEYEdECRMcWqWOKm8uJB
	Zf+O8aekJMGVYM9LfbraxlxLgeC/rka0QUf1lx1CAyTCETGmnYadAlyeXQ0+2OoM9zCPLj
	YzyJ6GUNuFeXjI7XieMuWrZMcM1nLHgfLoqLPxfpmCne9nAH6AUgf8XHfr11xQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273052;
	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=gm+WH6axDi1T5gOmZz9qCOvED0wfTFTq4naJptSiNto=;
	b=KifpmCxhnPmTPCsbvqYUKwTHkDX+cYBY2cDtfYPqGil4Q1jvE5osv39bLqk7nymZwwStuv
	3OOlHEMQPN86XoAX9BLQb1xhzpMXDu9N9bBJWvw7blbQ3xercZagXgPro3gR1XTJWsZEUS
	3hbdZdAkT+LAdhe61syfiBEr74iqElfwDPOfo2Mmhb8fjgemcwugxUXxZIhi9uDGhMjMj7
	U2wtHq6kMSfOwR3VH1sCUU9GrOGyy3dZZDUKt7VRRX8FAQMT+CB/rJoTtY+xW6eRGA786N
	kSr8K0vdH1S2QHvGJcZ8N4S6WmAXGBQZaDX4nhgfTx4fBbkDOkWFSIw6p8nFyA==
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 4hzT2h3D72zxXH
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:52 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 1869b
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:52 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 5e5d927ea373 - stable/15 - ufshci: Fix task management queue num_trackers on failure path
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 5e5d927ea3735c0bc73ef36e7abdc1acb26d8c9f
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:52 +0000
Message-Id: <6ac4a85c.1869b.43e23593@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=5e5d927ea3735c0bc73ef36e7abdc1acb26d8c9f

commit 5e5d927ea3735c0bc73ef36e7abdc1acb26d8c9f
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-01-05 02:35:52 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:50 +0000

    ufshci: Fix task management queue num_trackers on failure path
    
    Fix a kernel panic caused by the task management queue using
    the transfer request queue’s num_entries value.
    
    Sponsored by:           Samsung Electronic
    
    Reviewed by:    imp
    Differential Revision:  https://reviews.freebsd.org/D54243
    
    (cherry picked from commit ef2d7cc11d04728f2b97d2b0188d77be77d5c252)
---
 sys/dev/ufshci/ufshci_ctrlr.c     |  8 ++------
 sys/dev/ufshci/ufshci_private.h   |  2 +-
 sys/dev/ufshci/ufshci_req_queue.c | 14 +++++---------
 3 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index b51cdbb74f9c..253342fb0cca 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -17,12 +17,8 @@ ufshci_ctrlr_fail(struct ufshci_controller *ctrlr)
 {
 	ctrlr->is_failed = true;
 
-	ufshci_req_queue_fail(ctrlr,
-	    ctrlr->task_mgmt_req_queue.qops.get_hw_queue(
-		&ctrlr->task_mgmt_req_queue));
-	ufshci_req_queue_fail(ctrlr,
-	    ctrlr->transfer_req_queue.qops.get_hw_queue(
-		&ctrlr->transfer_req_queue));
+	ufshci_req_queue_fail(ctrlr, &ctrlr->task_mgmt_req_queue);
+	ufshci_req_queue_fail(ctrlr, &ctrlr->transfer_req_queue);
 }
 
 static void
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index 0d67b6ecdabe..3b33feecfefd 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -513,7 +513,7 @@ int ufshci_utmr_req_queue_enable(struct ufshci_controller *ctrlr);
 void ufshci_utr_req_queue_disable(struct ufshci_controller *ctrlr);
 int ufshci_utr_req_queue_enable(struct ufshci_controller *ctrlr);
 void ufshci_req_queue_fail(struct ufshci_controller *ctrlr,
-    struct ufshci_hw_queue *hwq);
+    struct ufshci_req_queue *req_queue);
 int ufshci_req_queue_submit_request(struct ufshci_req_queue *req_queue,
     struct ufshci_request *req, bool is_admin);
 void ufshci_req_queue_complete_tracker(struct ufshci_tracker *tr);
diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index df7e4b159278..33008c6b1230 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -199,11 +199,10 @@ ufshci_req_queue_manual_complete_request(struct ufshci_req_queue *req_queue,
 
 void
 ufshci_req_queue_fail(struct ufshci_controller *ctrlr,
-    struct ufshci_hw_queue *hwq)
+    struct ufshci_req_queue *req_queue)
 {
-	struct ufshci_req_queue *req_queue;
+	struct ufshci_hw_queue *hwq = req_queue->qops.get_hw_queue(req_queue);
 	struct ufshci_tracker *tr;
-	struct ufshci_request *req;
 	int i;
 
 	if (!mtx_initialized(&hwq->qlock))
@@ -211,16 +210,13 @@ ufshci_req_queue_fail(struct ufshci_controller *ctrlr,
 
 	mtx_lock(&hwq->qlock);
 
-	req_queue = &ctrlr->transfer_req_queue;
-
-	for (i = 0; i < req_queue->num_entries; i++) {
+	for (i = 0; i < req_queue->num_trackers; i++) {
 		tr = hwq->act_tr[i];
-		req = tr->req;
 
 		if (tr->slot_state == UFSHCI_SLOT_STATE_RESERVED) {
 			mtx_unlock(&hwq->qlock);
-			ufshci_req_queue_manual_complete_request(req_queue, req,
-			    UFSHCI_DESC_ABORTED,
+			ufshci_req_queue_manual_complete_request(req_queue,
+			    tr->req, UFSHCI_DESC_ABORTED,
 			    UFSHCI_RESPONSE_CODE_GENERAL_FAILURE);
 			mtx_lock(&hwq->qlock);
 		} else if (tr->slot_state == UFSHCI_SLOT_STATE_SCHEDULED) {

From nobody Tue Oct  6 07:50:53 2026
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 4hzT2k1xg6z6cW3X
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:54 +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 4hzT2j69xRz4G4d
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:53 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273054;
	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=BsXDn3CM9CPmcgtCHG9wrxTmELod0R+WzW00+hyY1I4=;
	b=jY6E7SGTt1WlX/9HrhthWMLOJxjyT8EXqm9RXvyS6bBbLXo9SOTOWMrFptF+VKBV4TNq0M
	MlI6ttwft0MD6i27pL7jxwVWaAwOKakNvNeBhQkZijFK0ziwD5G2J8ySRvxrVI6mqCUTKS
	wtxgSvff72/FzQsS8EOmyGeSW+oX3qejk/uXzNeHEvds8GFaplyqQqMYUlNJiD4qCpy5nI
	MMKZV7tlipunzjZvh8beKN6YSxwqs1UBUrMIqCkqtMCnSGitxJ0uqoYJ8JfqNl1vKH1qqz
	SEfed3FPuh/nygpA+mY8UaiN/LsfULnO0kMhcXCCuYeTw+CBb28dPk6BORoyyA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273054;
	b=l01ouCg/4HYN2EBkb4aUDl7CrvWti9GKCwgkkTIODWOqe+C7rk1aZ6uYdnB/CP1lw0QvRl
	aUqrC/unLcq7Yr5BjM8YlHkUxrC8OmM08zOTqUeSXb4aLGCrF8hyvjBDvrcC1hRkCzzFbq
	14siytbv8d9LVQLF/ETfl3i0pXmykhoa4z3QuqUYFLelHn6a48ak/vqKBmHZ0Nm/tEKMCr
	0s8+yLvRcl+wyWnEdWaKOkZVxdAyBXaWmUrojjPQ41O4DR4wiC42was2A0H6QbwYC1/lGp
	ZIWMQpXzwJwm5BeDvUirLnqeo0zHCPMjru6HuOuXDAQLgr0hPzZz2xaKIHQ/gQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273054;
	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=BsXDn3CM9CPmcgtCHG9wrxTmELod0R+WzW00+hyY1I4=;
	b=AS2lxSTUpvj9u1nXzuPvx3CZl/ndW1+0oHsmIvCRxYF/EA2trkVz0Wv3MkSqe6RvGVs6MT
	w+OVRlTqoh6JpQZRBTSQIQMWJsx68PyyzS9hAni7MGjlPkOTEbODUNUMuNXsTzyltu8iIC
	uC/LonNkbZgA61xeP/jh7QxY7brYVZ3dKOqehin5JwnLmu/xmRrVdWi0k0aWPuiWZUC2yP
	5ydQnsOkq0P6mbVEr6NRcE9jApwMu+sXjUaBHVitf9P48pXxIDpbWQ7auwzv2Hqv5teb1H
	NzFnY9dMSg5q+7nFzIqPCKkKFsHSda8NO7OPbmlmUIiypiNQg20pl5v+SI5fUA==
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 4hzT2j409wzxqg
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:53 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18725
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:53 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 873bafa44c0a - stable/15 - ufshci: Enable admin command retry
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 873bafa44c0a0d599bdb4ae0623dbffa20c097a8
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:53 +0000
Message-Id: <6ac4a85d.18725.701753a1@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=873bafa44c0a0d599bdb4ae0623dbffa20c097a8

commit 873bafa44c0a0d599bdb4ae0623dbffa20c097a8
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-01-05 02:36:10 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:50 +0000

    ufshci: Enable admin command retry
    
    Also, This patch fixes an issue where the admin command flag was not
    passed through.
    
    Sponsored by:           Samsung Electronic
    
    Reviewed by:    imp
    Differential Revision:  https://reviews.freebsd.org/D54244
    
    (cherry picked from commit ece6e062ae4b419736c8bb65874ece6be28c2100)
---
 sys/dev/ufshci/ufshci_ctrlr.c     | 17 ++++-------------
 sys/dev/ufshci/ufshci_ctrlr_cmd.c |  6 ++++--
 sys/dev/ufshci/ufshci_dev.c       |  3 ++-
 sys/dev/ufshci/ufshci_private.h   |  6 ++----
 sys/dev/ufshci/ufshci_req_queue.c |  7 +++----
 sys/dev/ufshci/ufshci_sim.c       |  3 ++-
 6 files changed, 17 insertions(+), 25 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index 253342fb0cca..501a1074fa58 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -426,24 +426,15 @@ ufshci_ctrlr_submit_task_mgmt_request(struct ufshci_controller *ctrlr,
     struct ufshci_request *req)
 {
 	return (
-	    ufshci_req_queue_submit_request(&ctrlr->task_mgmt_req_queue, req,
-		/*is_admin*/ false));
+	    ufshci_req_queue_submit_request(&ctrlr->task_mgmt_req_queue, req));
 }
 
 int
-ufshci_ctrlr_submit_admin_request(struct ufshci_controller *ctrlr,
+ufshci_ctrlr_submit_transfer_request(struct ufshci_controller *ctrlr,
     struct ufshci_request *req)
 {
-	return (ufshci_req_queue_submit_request(&ctrlr->transfer_req_queue, req,
-	    /*is_admin*/ true));
-}
-
-int
-ufshci_ctrlr_submit_io_request(struct ufshci_controller *ctrlr,
-    struct ufshci_request *req)
-{
-	return (ufshci_req_queue_submit_request(&ctrlr->transfer_req_queue, req,
-	    /*is_admin*/ false));
+	return (
+	    ufshci_req_queue_submit_request(&ctrlr->transfer_req_queue, req));
 }
 
 int
diff --git a/sys/dev/ufshci/ufshci_ctrlr_cmd.c b/sys/dev/ufshci/ufshci_ctrlr_cmd.c
index 253f31a93c2e..cac01894c062 100644
--- a/sys/dev/ufshci/ufshci_ctrlr_cmd.c
+++ b/sys/dev/ufshci/ufshci_ctrlr_cmd.c
@@ -44,12 +44,13 @@ ufshci_ctrlr_cmd_send_nop(struct ufshci_controller *ctrlr, ufshci_cb_fn_t cb_fn,
 
 	req->request_size = sizeof(struct ufshci_nop_out_upiu);
 	req->response_size = sizeof(struct ufshci_nop_in_upiu);
+	req->is_admin = true;
 
 	upiu = (struct ufshci_nop_out_upiu *)&req->request_upiu;
 	memset(upiu, 0, req->request_size);
 	upiu->header.trans_type = UFSHCI_UPIU_TRANSACTION_CODE_NOP_OUT;
 
-	ufshci_ctrlr_submit_admin_request(ctrlr, req);
+	ufshci_ctrlr_submit_transfer_request(ctrlr, req);
 }
 
 void
@@ -63,6 +64,7 @@ ufshci_ctrlr_cmd_send_query_request(struct ufshci_controller *ctrlr,
 
 	req->request_size = sizeof(struct ufshci_query_request_upiu);
 	req->response_size = sizeof(struct ufshci_query_response_upiu);
+	req->is_admin = true;
 
 	upiu = (struct ufshci_query_request_upiu *)&req->request_upiu;
 	memset(upiu, 0, req->request_size);
@@ -75,5 +77,5 @@ ufshci_ctrlr_cmd_send_query_request(struct ufshci_controller *ctrlr,
 	upiu->value_64 = param.value;
 	upiu->length = param.desc_size;
 
-	ufshci_ctrlr_submit_admin_request(ctrlr, req);
+	ufshci_ctrlr_submit_transfer_request(ctrlr, req);
 }
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 38c6de9731a4..406130c537a7 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -33,7 +33,8 @@ ufshci_dev_read_descriptor(struct ufshci_controller *ctrlr,
 	    &status, param);
 	ufshci_completion_poll(&status);
 	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_read_descriptor failed!\n");
+		ufshci_printf(ctrlr,
+		    "Failed to send Read Descriptor query request!\n");
 		return (ENXIO);
 	}
 
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index 3b33feecfefd..c76483ab60ed 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -465,9 +465,7 @@ void ufshci_ctrlr_poll(struct ufshci_controller *ctrlr);
 
 int ufshci_ctrlr_submit_task_mgmt_request(struct ufshci_controller *ctrlr,
     struct ufshci_request *req);
-int ufshci_ctrlr_submit_admin_request(struct ufshci_controller *ctrlr,
-    struct ufshci_request *req);
-int ufshci_ctrlr_submit_io_request(struct ufshci_controller *ctrlr,
+int ufshci_ctrlr_submit_transfer_request(struct ufshci_controller *ctrlr,
     struct ufshci_request *req);
 int ufshci_ctrlr_send_nop(struct ufshci_controller *ctrlr);
 
@@ -515,7 +513,7 @@ int ufshci_utr_req_queue_enable(struct ufshci_controller *ctrlr);
 void ufshci_req_queue_fail(struct ufshci_controller *ctrlr,
     struct ufshci_req_queue *req_queue);
 int ufshci_req_queue_submit_request(struct ufshci_req_queue *req_queue,
-    struct ufshci_request *req, bool is_admin);
+    struct ufshci_request *req);
 void ufshci_req_queue_complete_tracker(struct ufshci_tracker *tr);
 
 /* Request Single Doorbell Queue */
diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index 33008c6b1230..4c82b79d0e26 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -268,9 +268,8 @@ ufshci_req_queue_complete_tracker(struct ufshci_tracker *tr)
 	error = ufshci_req_queue_response_is_error(req_queue, ocs,
 	    &cpl.response_upiu);
 
-	/* TODO: Implement retry */
-	// retriable = ufshci_completion_is_retry(cpl);
-	retriable = false;
+	/* Retry for admin commands */
+	retriable = req->is_admin;
 	retry = error && retriable &&
 	    req->retries < req_queue->ctrlr->retry_count;
 	if (retry)
@@ -778,7 +777,7 @@ _ufshci_req_queue_submit_request(struct ufshci_req_queue *req_queue,
 
 int
 ufshci_req_queue_submit_request(struct ufshci_req_queue *req_queue,
-    struct ufshci_request *req, bool is_admin)
+    struct ufshci_request *req)
 {
 	struct ufshci_hw_queue *hwq;
 	uint32_t error;
diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 1589e7475ad4..bee1fff858ff 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -165,6 +165,7 @@ ufshchi_sim_scsiio(struct cam_sim *sim, union ccb *ccb)
 		data_direction = UFSHCI_DATA_DIRECTION_NO_DATA_TRANSFER;
 	}
 	req->data_direction = data_direction;
+	req->is_admin = false;
 
 	upiu = (struct ufshci_cmd_command_upiu *)&req->request_upiu;
 	memset(upiu, 0, req->request_size);
@@ -191,7 +192,7 @@ ufshchi_sim_scsiio(struct cam_sim *sim, union ccb *ccb)
 	}
 	memcpy(upiu->cdb, cdb, csio->cdb_len);
 
-	error = ufshci_ctrlr_submit_io_request(ctrlr, req);
+	error = ufshci_ctrlr_submit_transfer_request(ctrlr, req);
 	if (error == EBUSY) {
 		ccb->ccb_h.status = CAM_SCSI_BUSY;
 		xpt_done(ccb);

From nobody Tue Oct  6 07:50:54 2026
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 4hzT2l2DLGz6cVyD
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:55 +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 4hzT2k5YhNz4GBn
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:54 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273054;
	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=cLexe1UsXRWK8cHU/44gq7ZToNmvRHU4GJ07AptYk8s=;
	b=BtSEE2gs+ebPcBzLdcDCdsFlbqFsQq9rhfYw76GsIXwUOGUqmwE6kZJb1HzF/O7MLFfot1
	Uee7+ewpci3FmdaXGhCZnGlmLqduUFGpp24cPS9vTbvAVafXql1PyMysJHuyiKMUSm8omw
	JxdHFuR03Uhs7K9Fw5wOPK6rI+OAtUA467PfssarbRp2/3jCMauKjr8vvjZjw00GH3RCAC
	78LgyaSfRboUfyzDkj6vN8c9+SffxEGzB0hyuebhGWH7BxNCbL/88hNw77wTnlAi0lSJ4s
	Oqt3mC/VPQDJpcVrAL4lnkPU7V31+zBDcs0PegNUItKwfr1pdWfRi+uj/4Ov5Q==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273054;
	b=Fgp27AJCXC1y45mhFoI31ASiOX/XatLGCt3OMno1xGRZnn7ng0rKDW7JnBiRB1cAnuQYrP
	XWK+5aoTT5mizZMG19EiYnOpOxWlfzXFc7b/WkRBZfiAKE8RGyQy6QT+NWbC8i58w8YYOu
	53dEnj8sww4YJOhTS8pz++nO6aV7gkPvE9WQyzcpo19jFixqbWEjh9jETuFrrBZkeFckA8
	CraSJbxXB7xqG4FSWMTQgj82Cc8BPFf1n813loKxq0AJtH5sLR36b8R5qyp3S8jEppcJm7
	HnPnEcZxMqnbKH7P7rgIhvIP1Z1nTDgF2NBsSVRCPzqqSs3FsuKtFVgCi4mHPg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273054;
	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=cLexe1UsXRWK8cHU/44gq7ZToNmvRHU4GJ07AptYk8s=;
	b=Jg4LtLnp1xGcoIkYe9vfCm57SWo51QrM2ZHQtNKSqBjugP6mB14QlSQsVbydu2BFS31lin
	yCDqUYscjlciLzeAFXQTsCwNhWPbtbU+gJ3bUc4opw9WqdUvgkcnXGwa1dfazmNQ/kIJ9a
	/CTrcb/delHFzl1+JTAAv56WsFkdlUl/X6ub4mgd5kFe704M5fo49UzO3Ezji/jlVIzFaC
	SONz5uNBbRZ4268zMhb5sQEjW7WQSRp6vNFkANo7GOxwOpkc9BOF/KCMmOBqYyn2utLZAZ
	YPBC0GYuXPVSaUjnONlkWkXHO8uBQW6TRrwwlv1gc/C4xUKrLRhlQeDvzHYRLQ==
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 4hzT2k4ZkSzxqj
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:54 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 45579
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:54 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 5e2782d26567 - stable/15 - cam/scsi: Restore scsi_start_stop() and add scsi_start_stop_pc()
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 5e2782d26567a4d8d558ca05800855c7fc217e35
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:54 +0000
Message-Id: <6ac4a85e.45579.7f86d894@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=5e2782d26567a4d8d558ca05800855c7fc217e35

commit 5e2782d26567a4d8d558ca05800855c7fc217e35
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-01-26 06:29:28 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:51 +0000

    cam/scsi: Restore scsi_start_stop() and add scsi_start_stop_pc()
    
    Revert the argument change that broke libcam in 8c35de49 and move
    power_condition support to scsi_start_stop_pc().
    
    Reported by:            imp
    Reviewed By:            #cam, imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D54822
    
    (cherry picked from commit 8ef8c6abfadfc9eb0465ce57c6b09ca310415bdd)
---
 sbin/camcontrol/camcontrol.c |  1 -
 sys/cam/cam_periph.c         |  1 -
 sys/cam/scsi/scsi_all.c      | 34 ++++++++++++++++++++++++++++++++++
 sys/cam/scsi/scsi_all.h      |  4 ++++
 sys/cam/scsi/scsi_cd.c       |  2 --
 sys/dev/mpr/mpr_sas_lsi.c    |  1 -
 sys/dev/mps/mps_sas_lsi.c    |  1 -
 sys/dev/ufshci/ufshci_sim.c  |  2 +-
 8 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/sbin/camcontrol/camcontrol.c b/sbin/camcontrol/camcontrol.c
index 73e5a523bd47..7ad177c3e4b6 100644
--- a/sbin/camcontrol/camcontrol.c
+++ b/sbin/camcontrol/camcontrol.c
@@ -1026,7 +1026,6 @@ scsistart(struct cam_device *device, int startstop, int loadeject,
 			/* start/stop */ startstop,
 			/* load_eject */ loadeject,
 			/* immediate */ 0,
-			/* power_condition */ SSS_PC_START_VALID,
 			/* sense_len */ SSD_FULL_SIZE,
 			/* timeout */ timeout ? timeout : 120000);
 
diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c
index e485ecff8736..730656684e2a 100644
--- a/sys/cam/cam_periph.c
+++ b/sys/cam/cam_periph.c
@@ -1791,7 +1791,6 @@ camperiphscsisenseerror(union ccb *ccb, union ccb **orig,
 					/*start*/TRUE,
 					/*load/eject*/le,
 					/*immediate*/FALSE,
-					/*power_condition*/SSS_PC_START_VALID,
 					SSD_FULL_SIZE,
 					/*timeout*/50000);
 			break;
diff --git a/sys/cam/scsi/scsi_all.c b/sys/cam/scsi/scsi_all.c
index 3b991fc248de..2acf091270a6 100644
--- a/sys/cam/scsi/scsi_all.c
+++ b/sys/cam/scsi/scsi_all.c
@@ -8982,6 +8982,40 @@ scsi_write_buffer(struct ccb_scsiio *csio, uint32_t retries,
 
 void
 scsi_start_stop(struct ccb_scsiio *csio, uint32_t retries,
+		void (*cbfcnp)(struct cam_periph *, union ccb *),
+		uint8_t tag_action, int start, int load_eject,
+		int immediate, uint8_t sense_len, uint32_t timeout)
+{
+	struct scsi_start_stop_unit *scsi_cmd;
+	int extra_flags = 0;
+
+	scsi_cmd = (struct scsi_start_stop_unit *)&csio->cdb_io.cdb_bytes;
+	bzero(scsi_cmd, sizeof(*scsi_cmd));
+	scsi_cmd->opcode = START_STOP_UNIT;
+	if (start != 0) {
+		scsi_cmd->how |= SSS_START;
+		/* it takes a lot of power to start a drive */
+		extra_flags |= CAM_HIGH_POWER;
+	}
+	if (load_eject != 0)
+		scsi_cmd->how |= SSS_LOEJ;
+	if (immediate != 0)
+		scsi_cmd->byte2 |= SSS_IMMED;
+
+	cam_fill_csio(csio,
+		      retries,
+		      cbfcnp,
+		      /*flags*/CAM_DIR_NONE | extra_flags,
+		      tag_action,
+		      /*data_ptr*/NULL,
+		      /*dxfer_len*/0,
+		      sense_len,
+		      sizeof(*scsi_cmd),
+		      timeout);
+}
+
+void
+scsi_start_stop_pc(struct ccb_scsiio *csio, uint32_t retries,
 		void (*cbfcnp)(struct cam_periph *, union ccb *),
 		uint8_t tag_action, int start, int load_eject,
 		int immediate, uint8_t power_condition, uint8_t sense_len,
diff --git a/sys/cam/scsi/scsi_all.h b/sys/cam/scsi/scsi_all.h
index fb3ed8ee4458..0d4354538c2c 100644
--- a/sys/cam/scsi/scsi_all.h
+++ b/sys/cam/scsi/scsi_all.h
@@ -4324,6 +4324,10 @@ void scsi_unmap(struct ccb_scsiio *csio, uint32_t retries,
 		uint8_t sense_len, uint32_t timeout);
 
 void scsi_start_stop(struct ccb_scsiio *csio, uint32_t retries,
+		     void (*cbfcnp)(struct cam_periph *, union ccb *),
+		     uint8_t tag_action, int start, int load_eject,
+		     int immediate, uint8_t sense_len, uint32_t timeout);
+void scsi_start_stop_pc(struct ccb_scsiio *csio, uint32_t retries,
 		     void (*cbfcnp)(struct cam_periph *, union ccb *),
 		     uint8_t tag_action, int start, int load_eject,
 		     int immediate, uint8_t power_condition, uint8_t sense_len,
diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c
index be6f1c47512a..1e8dc98d53f4 100644
--- a/sys/cam/scsi/scsi_cd.c
+++ b/sys/cam/scsi/scsi_cd.c
@@ -3416,7 +3416,6 @@ cdstartunit(struct cam_periph *periph, int load)
 			/* start */ TRUE,
 			/* load_eject */ load,
 			/* immediate */ FALSE,
-			/* power_condition */ SSS_PC_START_VALID,
 			/* sense_len */ SSD_FULL_SIZE,
 			/* timeout */ 50000);
 
@@ -3445,7 +3444,6 @@ cdstopunit(struct cam_periph *periph, uint32_t eject)
 			/* start */ FALSE,
 			/* load_eject */ eject,
 			/* immediate */ FALSE,
-			/* power_condition */ SSS_PC_START_VALID,
 			/* sense_len */ SSD_FULL_SIZE,
 			/* timeout */ 50000);
 
diff --git a/sys/dev/mpr/mpr_sas_lsi.c b/sys/dev/mpr/mpr_sas_lsi.c
index 9ba776e49e7a..d9744b1054c2 100644
--- a/sys/dev/mpr/mpr_sas_lsi.c
+++ b/sys/dev/mpr/mpr_sas_lsi.c
@@ -1517,7 +1517,6 @@ mprsas_SSU_to_SATA_devices(struct mpr_softc *sc, int howto)
 			    /*start*/FALSE,
 			    /*load/eject*/0,
 			    /*immediate*/FALSE,
-			    /*power_condition*/SSS_PC_START_VALID,
 			    MPR_SENSE_LEN,
 			    /*timeout*/10000);
 			xpt_action(ccb);
diff --git a/sys/dev/mps/mps_sas_lsi.c b/sys/dev/mps/mps_sas_lsi.c
index 42119b5c0a43..e2d1ef2b013a 100644
--- a/sys/dev/mps/mps_sas_lsi.c
+++ b/sys/dev/mps/mps_sas_lsi.c
@@ -1153,7 +1153,6 @@ mpssas_SSU_to_SATA_devices(struct mps_softc *sc, int howto)
 			    /*start*/FALSE,
 			    /*load/eject*/0,
 			    /*immediate*/FALSE,
-			    /*power_condition*/SSS_PC_START_VALID,
 			    MPS_SENSE_LEN,
 			    /*timeout*/10000);
 			xpt_action(ccb);
diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index bee1fff858ff..404f3e99d1e2 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -494,7 +494,7 @@ ufshci_sim_send_ssu(struct ufshci_controller *ctrlr, bool start,
 		return ENOMEM;
 	}
 
-	scsi_start_stop(&ccb->csio,
+	scsi_start_stop_pc(&ccb->csio,
 	    /*retries*/ 4,
 	    /*cbfcnp*/ NULL,
 	    /*tag_action*/ MSG_SIMPLE_Q_TAG,

From nobody Tue Oct  6 07:50:55 2026
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 4hzT2m18f8z6cW85
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50: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 "YR2" (not verified))
	by mx1.freebsd.org (Postfix) with ESMTPS id 4hzT2l6vFjz4G52
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:55 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273056;
	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=QIB1QRcanwx0yXHijn7m/2NXEE55o4P8Md9DA0tOlZM=;
	b=TcxFohWlchAjqpSHmRlJjLHegXpfXhNzbALkElusBss4aEZ3ZXaNgqsc4VFIerdmxSaI8o
	XsnEw8fWrjauWBLsYlcc0PK0yjRQ8KT10kwGKZ3izit35Oi3gCfIvJV/hrwsnzziIodaXV
	MCGzSgCNI4ljhydca5Xq6FDMJrFzLzo1So8jx5Ky02TqJAc8biHJebVa/bQAg3e/RfhmTz
	2nKy+Mm0QN8rU+yGzmLsBz2MvtZK+/HAB38wQ4c5tp3kx2+btUaMgv2SUt8VkBGuIjwGDa
	LEo6oOuE1miEQXv8RZ8zYS5AcLUyKGYvd1dXVlp4vZv1g9VoH7u7y1k4QvqnVg==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273056;
	b=VoBqfNYHFah6nJiO/WcbUTwOOMPb+arm809anLIh34u84aSBrzEp1jEeKLDjqxyoepDXp3
	bSfBsJnBz3Qw+bxyRIjedEsCxuzUrP32dKfsfarQt1XuYyOV2k/07BWwCcJV/Cxe6ZEfqS
	tjeb8IUU47AlsameEHvjpV5YlM0fVsa1jaTT4/XkzHG5ABWJNrgKrsPtMSr3XCYhnWcv8+
	VISSjxa6GB2ZrRtM7MLjR9F5iVZqTtiAg7+KANzdcq22M1l3/Tt6lvG+Y/Avm9KVp6CM5S
	Aa8bX7Gq2RGHQN4c52Cg84MFmJxu1na2xmW5/iyGDrNu/5gJflsgocR9rkTkDg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273056;
	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=QIB1QRcanwx0yXHijn7m/2NXEE55o4P8Md9DA0tOlZM=;
	b=JsOnXLEm0eLaJxWLX/MjgZxlwA4Dqp0mh6e6+JBJueAF7W5+wDdK0FOv7/bs4oGo76lk2x
	rrXgRvpp385hWuPsVDdmVHS7nPkxTLq9eW74xdJYcjK0xAXt4NIRERX/Qzxl46RU52oPHc
	w9E4QGCV1FaCVy2y64fTPiTbGo/XtYrfCOMX6tOprFtkfqJKAMr4/Ay3t5qdYqf5Zz7d0P
	ju456MYgNXkpXVodywKQEbTpkVUu4GcFYEfyJ4uN6FP0ELvOyJBP87K1f2s84XXbt0K/Dj
	loivJZT/VGSixfkh5hEkHhI0ShnQa9Xbfq3uE/46ofonRHZbabsb7Fp3aASQ5w==
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 4hzT2l5LGDzxp0
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:55 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 185b4
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:55 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: c6c2c22ffe51 - stable/15 - ufshci: Remove UIC error during initialization
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: c6c2c22ffe51d456882e18e1a3c2d8bc0b6e018a
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:55 +0000
Message-Id: <6ac4a85f.185b4.5dcd468f@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=c6c2c22ffe51d456882e18e1a3c2d8bc0b6e018a

commit c6c2c22ffe51d456882e18e1a3c2d8bc0b6e018a
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-02-04 23:53:01 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:51 +0000

    ufshci: Remove UIC error during initialization
    
    This patch removes the UIC error caused by QEMU not supporting certain
    UIC command. Additionally, it removes the unused unipro_version.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D54513
    
    (cherry picked from commit 0f515c0a97489d8d35aca7f5e28c28b22f217dc9)
---
 sys/dev/ufshci/ufshci_dev.c     | 55 +++++++++++++++++------------------------
 sys/dev/ufshci/ufshci_private.h |  3 ---
 2 files changed, 23 insertions(+), 35 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 406130c537a7..3167945b53b6 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -273,40 +273,31 @@ ufshci_dev_init_unipro(struct ufshci_controller *ctrlr)
 	uint32_t pa_granularity, peer_pa_granularity;
 	uint32_t t_activate, pear_t_activate;
 
-	/*
-	 * Unipro Version:
-	 * - 7~15 = Above 2.0, 6 = 2.0, 5 = 1.8, 4 = 1.61, 3 = 1.6, 2 = 1.41,
-	 * 1 = 1.40, 0 = Reserved
-	 */
-	if (ufshci_uic_send_dme_get(ctrlr, PA_LocalVerInfo,
-		&ctrlr->unipro_version))
-		return (ENXIO);
-	if (ufshci_uic_send_dme_get(ctrlr, PA_RemoteVerInfo,
-		&ctrlr->ufs_dev.unipro_version))
-		return (ENXIO);
-
-	/*
-	 * PA_Granularity: Granularity for PA_TActivate and PA_Hibern8Time
-	 * - 1=1us, 2=4us, 3=8us, 4=16us, 5=32us, 6=100us
-	 */
-	if (ufshci_uic_send_dme_get(ctrlr, PA_Granularity, &pa_granularity))
-		return (ENXIO);
-	if (ufshci_uic_send_dme_peer_get(ctrlr, PA_Granularity,
-		&peer_pa_granularity))
-		return (ENXIO);
+	if (ctrlr->quirks & UFSHCI_QUIRK_LONG_PEER_PA_TACTIVATE) {
+		/*
+		 * PA_Granularity: Granularity for PA_TActivate and
+		 * PA_Hibern8Time
+		 * - 1=1us, 2=4us, 3=8us, 4=16us, 5=32us, 6=100us
+		 */
+		if (ufshci_uic_send_dme_get(ctrlr, PA_Granularity,
+			&pa_granularity))
+			return (ENXIO);
+		if (ufshci_uic_send_dme_peer_get(ctrlr, PA_Granularity,
+			&peer_pa_granularity))
+			return (ENXIO);
 
-	/*
-	 * PA_TActivate: Time to wait before activating a burst in order to
-	 * wake-up peer M-RX
-	 * UniPro automatically sets timing information such as PA_TActivate
-	 * through the PACP_CAP_EXT1_ind command during Link Startup operation.
-	 */
-	if (ufshci_uic_send_dme_get(ctrlr, PA_TActivate, &t_activate))
-		return (ENXIO);
-	if (ufshci_uic_send_dme_peer_get(ctrlr, PA_TActivate, &pear_t_activate))
-		return (ENXIO);
+		/*
+		 * PA_TActivate: Time to wait before activating a burst in order
+		 * to wake-up peer M-RX UniPro automatically sets timing
+		 * information such as PA_TActivate through the
+		 * PACP_CAP_EXT1_ind command during Link Startup operation.
+		 */
+		if (ufshci_uic_send_dme_get(ctrlr, PA_TActivate, &t_activate))
+			return (ENXIO);
+		if (ufshci_uic_send_dme_peer_get(ctrlr, PA_TActivate,
+			&pear_t_activate))
+			return (ENXIO);
 
-	if (ctrlr->quirks & UFSHCI_QUIRK_LONG_PEER_PA_TACTIVATE) {
 		/*
 		 * Intel Lake-field UFSHCI has a quirk. We need to add 200us to
 		 * the PEER's PA_TActivate.
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index c76483ab60ed..de311e659c53 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -292,8 +292,6 @@ struct ufshci_device {
 	struct ufshci_device_descriptor dev_desc;
 	struct ufshci_geometry_descriptor geo_desc;
 
-	uint32_t unipro_version;
-
 	/* WriteBooster */
 	bool is_wb_enabled;
 	bool is_wb_flush_enabled;
@@ -412,7 +410,6 @@ struct ufshci_controller {
 
 	/* UFS Interconnect Layer (UIC) */
 	struct mtx uic_cmd_lock;
-	uint32_t unipro_version;
 	uint8_t hs_gear;
 	uint32_t tx_lanes;
 	uint32_t rx_lanes;

From nobody Tue Oct  6 07:50:56 2026
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 4hzT2n16LFz6cW6N
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:57 +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 4hzT2m75bHz4GC6
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:56 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273057;
	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=FFPVmulhC66rP0f4zxor6u/YVi0cac2bFEnNcw6RTZ4=;
	b=VAcXfqRHVpUjY10thFmP2mFm/HjJlBy/DN0jEC/4hkGphtUrkf7wwnyIeJy7NJBHXdi68r
	5aJlvG/gSlWTS77pMIU6GjCO8g3y8dYL4p3xXjbZPmtds2OsIcH8Rax9/omdNRFya0kl48
	F0VOz77Xzp3jUsB1UzmKk8z0wYFKIcn5hjcmYeJ4te5u0EHm7km0EkkwrxIYp/qhF1yjJl
	DKvXJK6qRsrirypFC3XLIKwPHrJUP/dqXpyubeG6/uG0EzeSf1Z8aHaSDBbm7XEcWLwMW9
	jve5L7iqFX5t2svRWwkUExKEFUWlqG52bwnUmQNxBo2fWnZygy22EL3g3VlvZQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273057;
	b=HWm/t4v6i4m3HIpXF0N3vk706m5N6x2ZC3XsSz9WyI8YplvRb33Z6RaeXxJb/8JVd8q0P5
	8H1EY4gJwPH5wxsw58AGAEBrgBmOBpObuVou3Qw0Wq4ll1B/p/uKYI6Sqoa34exWdWDO41
	KeiqAfd4jyDQCSlIRZXUozgVgFa0WHPxWay6+Gug1LEs0NQvT14BAVLCS9z7L2DBFM7lEr
	e5iNWEidATOnU75yQhNWwXT3cnUELeIPx1Ldcdaw3l1aLR6t+KejR0KncCgMRAib7JISMp
	mFXo7FrbgLhq56AvOxOBdrvwa9qa0DpGyCUOZxzGpKkzTVYu33n1bJ+V32x52g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273057;
	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=FFPVmulhC66rP0f4zxor6u/YVi0cac2bFEnNcw6RTZ4=;
	b=WGnew8p2h2UfXXS2OebM2aKuWw2CITJPU4mzkspvSuYa+kdQdPdspqOlPE4CXZCd6xoZN1
	nvlzyurwgfGVIcpr7V/aRqXIXLdxK144MjwiIYLcuCmp/aQITKrn9pzsTNqz0lyOObAOVb
	Y+YH7uX6agVn/kHt/xL7PzJ9LOfDtXwnjCGoxogxXFJqikdhJwH9KwYN0SvwoMlWPsqrJi
	qkV88fKv236BX2z4LsUGdNdGXdDrUaLABarVX/W2MZgBW2OwpcDN2PGYhR1Gcqxa5uUtgp
	WMyY91Oo0WxzvfqcnbNvsfD615xNQAEHGYQzS7EPNpqiuYCCcW1yGRVngsaA4A==
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 4hzT2m66Knzxc6
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:56 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 473f4
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:56 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 5286fdbc8e97 - stable/15 - ufshci: fix bug in ufshci_req_sdb_enable
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 5286fdbc8e977f1b8cb8ed4153cf01b5648e0dde
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:56 +0000
Message-Id: <6ac4a860.473f4.6cd2648@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=5286fdbc8e977f1b8cb8ed4153cf01b5648e0dde

commit 5286fdbc8e977f1b8cb8ed4153cf01b5648e0dde
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-03-24 05:12:14 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:51 +0000

    ufshci: fix bug in ufshci_req_sdb_enable
    
    When enabling the request queue, safely reset the list base address.
    This was added due to a quirk in the Qualcomm UFS controller during
    the process of activating it.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D55984
    
    (cherry picked from commit c4386988baa2ecdcb482c8ccace183dc643d097c)
---
 sys/dev/ufshci/ufshci_req_sdb.c | 40 ++++++++++++++++++++++++++++++++++++----
 1 file changed, 36 insertions(+), 4 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_sdb.c b/sys/dev/ufshci/ufshci_req_sdb.c
index ca47aa159c5b..54542f48b32c 100644
--- a/sys/dev/ufshci/ufshci_req_sdb.c
+++ b/sys/dev/ufshci/ufshci_req_sdb.c
@@ -374,34 +374,63 @@ ufshci_req_sdb_enable(struct ufshci_controller *ctrlr,
     struct ufshci_req_queue *req_queue)
 {
 	struct ufshci_hw_queue *hwq = &req_queue->hwq[UFSHCI_SDB_Q];
+	int error = 0;
+
+	mtx_lock(&hwq->recovery_lock);
+	mtx_lock(&hwq->qlock);
 
 	if (req_queue->is_task_mgmt) {
 		uint32_t hcs, utmrldbr, utmrlrsr;
+		uint32_t utmrlba, utmrlbau;
+
+		/*
+		 * Some controllers require re-enabling. When a controller is
+		 * re-enabled, the utmrlba registers are initialized, and these
+		 * must be reconfigured upon re-enabling.
+		 */
+		utmrlba = hwq->req_queue_addr & 0xffffffff;
+		utmrlbau = hwq->req_queue_addr >> 32;
+		ufshci_mmio_write_4(ctrlr, utmrlba, utmrlba);
+		ufshci_mmio_write_4(ctrlr, utmrlbau, utmrlbau);
 
 		hcs = ufshci_mmio_read_4(ctrlr, hcs);
 		if (!(hcs & UFSHCIM(UFSHCI_HCS_REG_UTMRLRDY))) {
 			ufshci_printf(ctrlr,
 			    "UTP task management request list is not ready\n");
-			return (ENXIO);
+			error = ENXIO;
+			goto out;
 		}
 
 		utmrldbr = ufshci_mmio_read_4(ctrlr, utmrldbr);
 		if (utmrldbr != 0) {
 			ufshci_printf(ctrlr,
 			    "UTP task management request list door bell is not ready\n");
-			return (ENXIO);
+			error = ENXIO;
+			goto out;
 		}
 
 		utmrlrsr = UFSHCIM(UFSHCI_UTMRLRSR_REG_UTMRLRSR);
 		ufshci_mmio_write_4(ctrlr, utmrlrsr, utmrlrsr);
 	} else {
 		uint32_t hcs, utrldbr, utrlcnr, utrlrsr;
+		uint32_t utrlba, utrlbau;
+
+		/*
+		 * Some controllers require re-enabling. When a controller is
+		 * re-enabled, the utrlba registers are initialized, and these
+		 * must be reconfigured upon re-enabling.
+		 */
+		utrlba = hwq->req_queue_addr & 0xffffffff;
+		utrlbau = hwq->req_queue_addr >> 32;
+		ufshci_mmio_write_4(ctrlr, utrlba, utrlba);
+		ufshci_mmio_write_4(ctrlr, utrlbau, utrlbau);
 
 		hcs = ufshci_mmio_read_4(ctrlr, hcs);
 		if (!(hcs & UFSHCIM(UFSHCI_HCS_REG_UTRLRDY))) {
 			ufshci_printf(ctrlr,
 			    "UTP transfer request list is not ready\n");
-			return (ENXIO);
+			error = ENXIO;
+			goto out;
 		}
 
 		utrldbr = ufshci_mmio_read_4(ctrlr, utrldbr);
@@ -434,7 +463,10 @@ ufshci_req_sdb_enable(struct ufshci_controller *ctrlr,
 
 	hwq->recovery_state = RECOVERY_NONE;
 
-	return (0);
+out:
+	mtx_unlock(&hwq->qlock);
+	mtx_unlock(&hwq->recovery_lock);
+	return (error);
 }
 
 int

From nobody Tue Oct  6 07:50:57 2026
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 4hzT2p3VPvz6cWGj
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:58 +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 4hzT2p17pPz4GHW
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:58 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273058;
	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=S3Uws8OhZ7bPIElYg9sr1WrRrE6mupCem7ZEHt8y08I=;
	b=MLHH40pUl9zNCltGk0Fs7ynwYVATnEpI2fTROy4nGdb43J9R2OuRgKwfxlcwHynFJnTiml
	Ac+7f04O5diyrgEopxG2sctiRAgf5ccjdXa7RdD5a0viXZEwgoFytRRCJGqXhp9lIkuB1V
	s3DQWtYl6Ji3q0/ppiG0P3SLwfXlUeONd9oULbivoXJ9r9FsbUBTNX4P2VuIKh8KWqAuK7
	uSfRAx6nlrYHWoeMdlmCq6zyOJCFgNzNv33UAPqfiqn2NKEDFt70/3CFRwat/tzcXFKXYn
	Pn7mo+rF4iTL7HWd+sdMiJtWMEI5Vkbiul764kiAR9f4gV0QkvdoaP+3rIFJng==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273058;
	b=MaUAckjXOFGdV62D5Te09ZtvNqj2dnA5v4hu0PanhJ2cCGBgFTM8JwmqqqlDgV394eELeE
	LrqZ+DIeoysm8IYGQfrpd5Wnd0loapppxVH7w0N0W6TdHEzGqV+/fdic/mBtS6rgSb1DEy
	Nnow1n7VXEqU/oKFClRS2UbmQr9/iLT3cInNApQ6sWXCAflbwF3tDzWpJ+nubTADrnJD8c
	Z+FQ5FaiK/bzxq0mObhVIfGrtJGzMyN3xfawF7c2XmFG9rBTeBojqqEOHZ34aWg7HmTS0m
	IoGi32h0I88ztEqFqBzUOBp4hGGRxSC7jz2yeUJLk6a2w8pWMnDmkQghfceRqg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273058;
	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=S3Uws8OhZ7bPIElYg9sr1WrRrE6mupCem7ZEHt8y08I=;
	b=F3q/hn+oSZN2AmUnRMW73LGoIplFTx/LXTOeZknr7XT5NO3qHC/Wku9STc7WTBWI3nzCy0
	MqHMGht2iIcsayVvVw3rOEXiGVK1BlaYeV7yNiTmhfRR4CaiSuN0IzeC0rV1o51Rg8R1Xb
	NuokxkmLLlaKkh0Z06lJxyiLxHqkyjn4rRaqP/uJ0KjiTgkteDEBUv2lzSdeCV7bbgv3w7
	pW6nkB4dx07At3i9rnN031MCCyIF6shVVidC7EI+miQi6PKoqYHD3/VTg2VB5bwsDBYBPe
	kTjNbPP9FuRV1XJ+ErKp+yiM53zVdLFTYLh398ps9ub3D3p/R6XyulowxwPDQA==
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 4hzT2p00YnzxKL
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:57 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 19044
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:57 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 03ff40e2c183 - stable/15 - ufshci: add uic powermode parameter to sysctl
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 03ff40e2c1838571668a7bedd716b9632976e680
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:57 +0000
Message-Id: <6ac4a861.19044.53ad9c40@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=03ff40e2c1838571668a7bedd716b9632976e680

commit 03ff40e2c1838571668a7bedd716b9632976e680
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-03-24 05:14:04 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:52 +0000

    ufshci: add uic powermode parameter to sysctl
    
    Adds parameters related to the performance of the UFS device.
    Also update man page for the missing sysctl entries.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D55985
    
    (cherry picked from commit 085028463fa92b28939c87d0a14337fc14f394a0)
---
 share/man/man4/ufshci.4         | 34 +++++++++++++++++++++++++++++++++-
 sys/dev/ufshci/ufshci_dev.c     | 12 +++++++-----
 sys/dev/ufshci/ufshci_pci.c     |  3 +--
 sys/dev/ufshci/ufshci_private.h |  3 ++-
 sys/dev/ufshci/ufshci_sysctl.c  | 35 ++++++++++++++++++++++++++++++-----
 5 files changed, 73 insertions(+), 14 deletions(-)

diff --git a/share/man/man4/ufshci.4 b/share/man/man4/ufshci.4
index d722c9902b98..f9de9b39a449 100644
--- a/share/man/man4/ufshci.4
+++ b/share/man/man4/ufshci.4
@@ -124,9 +124,41 @@ nodes are currently implemented:
 (R) Host controller minor version.
 .It Va dev.ufshci.0.major_version
 (R) Host controller major version.
+.It Va dev.ufshci.0.wb_enabled
+(R) WriteBooster enable/disable.
+.It Va dev.ufshci.0.wb_flush_enabled
+(R) WriteBooster flush enable/disable.
+.It Va dev.ufshci.0.wb_buffer_type
+(R) WriteBooster type.
+.It Va dev.ufshci.0.wb_buffer_size_mb
+(R) WriteBooster buffer size in MB.
+.It Va dev.ufshci.0.wb_user_space_config_option
+(R) WriteBooster preserve user space mode.
+.It Va dev.ufshci.0.auto_hibernation_supported
+(R) Device auto hibernation support.
+.It Va dev.ufshci.0.auto_hibernate_idle_timer_value
+(R) Auto-Hibernate Idle Timer Value (in microseconds).
+.It Va dev.ufshci.0.power_mode_supported
+(R) Device power mode support.
+.It Va dev.ufshci.0.power_mode
+(R) Current device power mode.
+.It Va dev.ufshci.0.tx_rx_power_mode
+(R) Current TX/RX PA_PWRMode value.
+.It Va dev.ufshci.0.max_tx_lanes
+(R) Maximum available TX data lanes.
+.It Va dev.ufshci.0.max_rx_lanes
+(R) Maximum available RX data lanes.
+.It Va dev.ufshci.0.tx_lanes
+(R) Active TX data lanes.
+.It Va dev.ufshci.0.rx_lanes
+(R) Active RX data lanes.
+.It Va dev.ufshci.0.max_rx_hs_gear
+(R) Maximum available RX HS gear.
+.It Va dev.ufshci.0.hs_gear
+(R) Active HS gear.
 .It Va dev.ufshci.0.utmrq.num_failures
 (R) Number of failed UTP task-management requests.
-.It Va dev.ufshci.0.utmrq.ioq.num_retries
+.It Va dev.ufshci.0.utmrq.num_retries
 (R) Number of retried UTP task-management requests.
 .It Va dev.ufshci.0.utmrq.num_intr_handler_calls
 (R) Number of interrupt handler calls caused by UTP task-management requests.
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 3167945b53b6..0fedbca9a90e 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -325,7 +325,7 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr)
 	 */
 	const uint32_t fast_mode = 1;
 	const uint32_t rx_bit_shift = 4;
-	uint32_t power_mode, peer_granularity;
+	uint32_t peer_granularity;
 
 	/* Update lanes with available TX/RX lanes */
 	if (ufshci_uic_send_dme_get(ctrlr, PA_AvailTxDataLanes,
@@ -352,9 +352,11 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr)
 
 	if (ctrlr->quirks & UFSHCI_QUIRK_CHANGE_LANE_AND_GEAR_SEPARATELY) {
 		/* Before changing gears, first change the number of lanes. */
-		if (ufshci_uic_send_dme_get(ctrlr, PA_PWRMode, &power_mode))
+		if (ufshci_uic_send_dme_get(ctrlr, PA_PWRMode,
+			&ctrlr->tx_rx_power_mode))
 			return (ENXIO);
-		if (ufshci_uic_send_dme_set(ctrlr, PA_PWRMode, power_mode))
+		if (ufshci_uic_send_dme_set(ctrlr, PA_PWRMode,
+			ctrlr->tx_rx_power_mode))
 			return (ENXIO);
 
 		/* Wait for power mode changed. */
@@ -415,8 +417,8 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr)
 		return (ENXIO);
 
 	/* Set TX/RX PWRMode */
-	power_mode = (fast_mode << rx_bit_shift) | fast_mode;
-	if (ufshci_uic_send_dme_set(ctrlr, PA_PWRMode, power_mode))
+	ctrlr->tx_rx_power_mode = (fast_mode << rx_bit_shift) | fast_mode;
+	if (ufshci_uic_send_dme_set(ctrlr, PA_PWRMode, ctrlr->tx_rx_power_mode))
 		return (ENXIO);
 
 	/* Wait for power mode changed. */
diff --git a/sys/dev/ufshci/ufshci_pci.c b/sys/dev/ufshci/ufshci_pci.c
index 606f2a095576..b6b8124bc3a6 100644
--- a/sys/dev/ufshci/ufshci_pci.c
+++ b/sys/dev/ufshci/ufshci_pci.c
@@ -34,8 +34,7 @@ static device_method_t ufshci_pci_methods[] = {
 	DEVMETHOD(device_attach, ufshci_pci_attach),
 	DEVMETHOD(device_detach, ufshci_pci_detach),
 	DEVMETHOD(device_suspend, ufshci_pci_suspend),
-	DEVMETHOD(device_resume, ufshci_pci_resume),
-	DEVMETHOD_END
+	DEVMETHOD(device_resume, ufshci_pci_resume), DEVMETHOD_END
 };
 
 static driver_t ufshci_pci_driver = {
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index de311e659c53..fb57d67d8362 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -410,7 +410,8 @@ struct ufshci_controller {
 
 	/* UFS Interconnect Layer (UIC) */
 	struct mtx uic_cmd_lock;
-	uint8_t hs_gear;
+	uint32_t tx_rx_power_mode;
+	uint32_t hs_gear;
 	uint32_t tx_lanes;
 	uint32_t rx_lanes;
 	uint32_t max_rx_hs_gear;
diff --git a/sys/dev/ufshci/ufshci_sysctl.c b/sys/dev/ufshci/ufshci_sysctl.c
index 495f087f3c50..a113e951798e 100644
--- a/sys/dev/ufshci/ufshci_sysctl.c
+++ b/sys/dev/ufshci/ufshci_sysctl.c
@@ -193,7 +193,7 @@ ufshci_sysctl_initialize_ctrlr(struct ufshci_controller *ctrlr)
 	    CTLFLAG_RD, &ctrlr->num_io_queues, 0, "Number of I/O queue pairs");
 
 	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "cap", CTLFLAG_RD,
-	    &ctrlr->cap, 0, "Number of I/O queue pairs");
+	    &ctrlr->cap, 0, "Host controller capabilities register value");
 
 	SYSCTL_ADD_BOOL(ctrlr_ctx, ctrlr_list, OID_AUTO, "wb_enabled",
 	    CTLFLAG_RD, &dev->is_wb_enabled, 0, "WriteBooster enable/disable");
@@ -214,10 +214,6 @@ ufshci_sysctl_initialize_ctrlr(struct ufshci_controller *ctrlr)
 	    &dev->wb_user_space_config_option, 0,
 	    "WriteBooster preserve user space mode");
 
-	SYSCTL_ADD_BOOL(ctrlr_ctx, ctrlr_list, OID_AUTO, "power_mode_supported",
-	    CTLFLAG_RD, &dev->power_mode_supported, 0,
-	    "Device power mode support");
-
 	SYSCTL_ADD_BOOL(ctrlr_ctx, ctrlr_list, OID_AUTO,
 	    "auto_hibernation_supported", CTLFLAG_RD,
 	    &dev->auto_hibernation_supported, 0,
@@ -229,9 +225,38 @@ ufshci_sysctl_initialize_ctrlr(struct ufshci_controller *ctrlr)
 	    ufshci_sysctl_ahit, "IU",
 	    "Auto-Hibernate Idle Timer Value (in microseconds)");
 
+	SYSCTL_ADD_BOOL(ctrlr_ctx, ctrlr_list, OID_AUTO, "power_mode_supported",
+	    CTLFLAG_RD, &dev->power_mode_supported, 0,
+	    "Device power mode support");
+
 	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "power_mode",
 	    CTLFLAG_RD, &dev->power_mode, 0, "Current device power mode");
 
+	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "tx_rx_power_mode",
+	    CTLFLAG_RD, &ctrlr->tx_rx_power_mode, 0,
+	    "Current TX/RX PA_PWRMode value");
+
+	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "max_tx_lanes",
+	    CTLFLAG_RD, &ctrlr->max_tx_lanes, 0,
+	    "Maximum available TX data lanes");
+
+	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "max_rx_lanes",
+	    CTLFLAG_RD, &ctrlr->max_rx_lanes, 0,
+	    "Maximum available RX data lanes");
+
+	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "tx_lanes", CTLFLAG_RD,
+	    &ctrlr->tx_lanes, 0, "Active TX data lanes");
+
+	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "rx_lanes", CTLFLAG_RD,
+	    &ctrlr->rx_lanes, 0, "Active RX data lanes");
+
+	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "max_rx_hs_gear",
+	    CTLFLAG_RD, &ctrlr->max_rx_hs_gear, 0,
+	    "Maximum available RX HS gear");
+
+	SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "hs_gear", CTLFLAG_RD,
+	    &ctrlr->hs_gear, 0, "Active HS gear");
+
 	SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, "timeout_period",
 	    CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, &ctrlr->timeout_period,
 	    0, ufshci_sysctl_timeout_period, "IU",

From nobody Tue Oct  6 07:50:59 2026
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 4hzT2q3j7Lz6cWK9
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:50:59 +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 4hzT2q23njz4GHj
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:59 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273059;
	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=LsbN71ob+vVMO810lnh6iu2ldPoiVsxnxO7pK3Xg/vQ=;
	b=fVGW2ujxM64PHOFW32iEBu9AkY/Ls7WFqc7wPOV3064pl/v/XtHQu488XHjUpRacG4EG5r
	aCHDYzG1qcGiqSVJjYTqvGk2VCiHsz1dZXFqjOHGyz+CtreveqNRc2fpF0O1W/x+HGi8t/
	kI+EYAN6A7pGbnc5pa8SVhtnAr3MQ1NonHVVZ+lH9IQKk2hP0YErJRApQl6XsPM3El7xYy
	UMtUHDFCpkKy5lDIlX3pmFrHeLCWP67+1B8++ccZCu8Yuvalu5i6CNOjK+xzadraDBpDH0
	+V/hAXKoxUQVCSryhrtJJUXkZwXCjL3fWMFr7UfAZAsIh0GZOdpl3mYx29S1KQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273059;
	b=y32wynSp0m/p8/KWga+paLv8B7pMtGBs/6npqBVhbREsRt4163qCVDz3BGbHOo08IyGcYi
	3sS1kodWkpS0Yf2H6ehaHqggaxwz+DAjLtsqp88eSDASN03HcsEgMCTOfEnCbRGnj8UmDj
	ZuGf5iA9HV/RaiWrHbVI61vW5AxMYPryFR9PKGyC9p+GDXf6r70/2hBGMXafn1zDOYUbFU
	Zg2IExWln0LIuyRbR112bWkWOPlcPC5PjA6mAPHHUj7Ka1HepxtUjYzgtAx8rofKDAOVwE
	IIcq1IpK9fdeMmePo29V0bo7TCJH5YbcuUQyND7bhSnO6qnAvSw1u5/JNtInPQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273059;
	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=LsbN71ob+vVMO810lnh6iu2ldPoiVsxnxO7pK3Xg/vQ=;
	b=srNpcUW8iAqHXVxh/wRLVK/hjyP17whsjk7MMSYTyrGvyuY+l6J+DQ/ZzqmZw4ETKfA5cC
	X6XlQpfbGARgJ+/OHvmLxoTDBQcHcBCXTie80arxNsB2KVbS7BpLLIialVP2aL3QorJkX/
	c/0pRN8vVlrMi9XyNhUYT6YD7eeFAqdw/LnUxoNDcvZhGao6NEfKMq+VCdhcXPQitPGzk3
	mFnGDVzjj5rMaXVzo6sQVqjZ9e1n6on+yG+B/3nEKsvwvT+oKXunR0xT721/yYeJOXFL+o
	S1abaYTvII82HprgN4kVO99OSK8Yg7vij4vMrn/JT9SWezPd7zQVjKCbglvzNg==
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 4hzT2q0fLRzxc8
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:50:59 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18e02
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:50:59 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: c4035bfbf17e - stable/15 - ufshci: Support ACPI
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: c4035bfbf17e2fd4f42b4562f5cec5df4815635f
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:50:59 +0000
Message-Id: <6ac4a863.18e02.2d8b72d9@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=c4035bfbf17e2fd4f42b4562f5cec5df4815635f

commit c4035bfbf17e2fd4f42b4562f5cec5df4815635f
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-03-24 05:16:26 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:52 +0000

    ufshci: Support ACPI
    
    Supports UFS host controller attachment via ACPI. Tested on the
    Samsung Galaxy Book 4 Edge using Qualcomm Snapdragon X Elite.
    Additionally, a quirk related to power mode change has been added.
    
    For reference, it doesn't reach maximum speed yet. I plan to improve
    it later.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D55986
    
    (cherry picked from commit e2083e8d3a01cac739b38521abc72620d3810aba)
---
 sys/conf/files                  |   3 +-
 sys/dev/ufshci/ufshci_acpi.c    | 248 ++++++++++++++++++++++++++++++++++++++++
 sys/dev/ufshci/ufshci_ctrlr.c   |  71 ++++++++++--
 sys/dev/ufshci/ufshci_private.h |  12 +-
 sys/modules/ufshci/Makefile     |   3 +
 5 files changed, 324 insertions(+), 13 deletions(-)

diff --git a/sys/conf/files b/sys/conf/files
index 0d8a705aab2b..b64b0c1355fa 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -3288,10 +3288,11 @@ dev/uart/uart_tty.c		optional uart
 # Universal Flash Storage Host Controller Interface drivers
 #
 dev/ufshci/ufshci.c		optional ufshci
+dev/ufshci/ufshci_acpi.c	optional ufshci acpi
 dev/ufshci/ufshci_ctrlr.c	optional ufshci
 dev/ufshci/ufshci_ctrlr_cmd.c	optional ufshci
 dev/ufshci/ufshci_dev.c		optional ufshci
-dev/ufshci/ufshci_pci.c		optional ufshci
+dev/ufshci/ufshci_pci.c		optional ufshci pci
 dev/ufshci/ufshci_req_queue.c	optional ufshci
 dev/ufshci/ufshci_req_sdb.c	optional ufshci
 dev/ufshci/ufshci_sim.c		optional ufshci
diff --git a/sys/dev/ufshci/ufshci_acpi.c b/sys/dev/ufshci/ufshci_acpi.c
new file mode 100644
index 000000000000..94da0d3cb411
--- /dev/null
+++ b/sys/dev/ufshci/ufshci_acpi.c
@@ -0,0 +1,248 @@
+/*-
+ * Copyright (c) 2026, Samsung Electronics Co., Ltd.
+ * Written by Jaeyoon Choi
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/buf.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/proc.h>
+#include <sys/smp.h>
+
+#include <vm/vm.h>
+
+#include <contrib/dev/acpica/include/acpi.h>
+
+#include <dev/acpica/acpivar.h>
+
+#include "ufshci_private.h"
+
+static int ufshci_acpi_probe(device_t);
+static int ufshci_acpi_attach(device_t);
+static int ufshci_acpi_detach(device_t);
+static int ufshci_acpi_suspend(device_t);
+static int ufshci_acpi_resume(device_t);
+
+static device_method_t ufshci_acpi_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_probe, ufshci_acpi_probe),
+	DEVMETHOD(device_attach, ufshci_acpi_attach),
+	DEVMETHOD(device_detach, ufshci_acpi_detach),
+	DEVMETHOD(device_suspend, ufshci_acpi_suspend),
+	DEVMETHOD(device_resume, ufshci_acpi_resume), { 0, 0 }
+};
+
+static driver_t ufshci_acpi_driver = {
+	"ufshci",
+	ufshci_acpi_methods,
+	sizeof(struct ufshci_controller),
+};
+
+DRIVER_MODULE(ufshci, acpi, ufshci_acpi_driver, 0, 0);
+MODULE_DEPEND(ufshci, acpi, 1, 1, 1);
+
+static struct ufshci_acpi_device {
+	const char *hid;
+	const char *desc;
+	uint32_t ref_clk;
+	uint32_t quirks;
+} ufshci_acpi_devices[] = {
+	{ "QCOM24A5", "Qualcomm Snapdragon X Elite UFS Host Controller",
+	    UFSHCI_REF_CLK_19_2MHz,
+	    UFSHCI_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH |
+			UFSHCI_QUIRK_BROKEN_LSDBS_MCQS_CAP },
+	{ 0x00000000, NULL, 0, 0 }
+};
+
+static char *ufshci_acpi_ids[] = { "QCOM24A5", NULL };
+
+static const struct ufshci_acpi_device *
+ufshci_acpi_find_device(device_t dev)
+{
+	char *hid;
+	int i;
+	int rv;
+
+	rv = ACPI_ID_PROBE(device_get_parent(dev), dev, ufshci_acpi_ids, &hid);
+	if (rv > 0)
+		return (NULL);
+
+	for (i = 0; ufshci_acpi_devices[i].hid != NULL; i++) {
+		if (strcmp(ufshci_acpi_devices[i].hid, hid) != 0)
+			continue;
+		return (&ufshci_acpi_devices[i]);
+	}
+
+	return (NULL);
+}
+
+static int
+ufshci_acpi_probe(device_t dev)
+{
+	struct ufshci_controller *ctrlr = device_get_softc(dev);
+	const struct ufshci_acpi_device *acpi_dev;
+
+	acpi_dev = ufshci_acpi_find_device(dev);
+	if (acpi_dev == NULL)
+		return (ENXIO);
+
+	if (acpi_dev->hid) {
+		ctrlr->quirks = acpi_dev->quirks;
+		ctrlr->ref_clk = acpi_dev->ref_clk;
+	}
+
+	if (acpi_dev->desc) {
+		device_set_desc(dev, acpi_dev->desc);
+		return (BUS_PROBE_DEFAULT);
+	}
+
+	return (ENXIO);
+}
+
+static int
+ufshci_acpi_allocate_memory(struct ufshci_controller *ctrlr)
+{
+	ctrlr->resource_id = 0;
+	ctrlr->resource = bus_alloc_resource_any(ctrlr->dev, SYS_RES_MEMORY,
+	    &ctrlr->resource_id, RF_ACTIVE);
+
+	if (ctrlr->resource == NULL) {
+		ufshci_printf(ctrlr, "unable to allocate acpi resource\n");
+		return (ENOMEM);
+	}
+
+	ctrlr->bus_tag = rman_get_bustag(ctrlr->resource);
+	ctrlr->bus_handle = rman_get_bushandle(ctrlr->resource);
+	ctrlr->regs = (struct ufshci_registers *)ctrlr->bus_handle;
+
+	return (0);
+}
+
+static int
+ufshci_acpi_setup_shared(struct ufshci_controller *ctrlr)
+{
+	int error;
+
+	ctrlr->num_io_queues = 1;
+	ctrlr->rid = 0;
+	ctrlr->res = bus_alloc_resource_any(ctrlr->dev, SYS_RES_IRQ,
+	    &ctrlr->rid, RF_SHAREABLE | RF_ACTIVE);
+	if (ctrlr->res == NULL) {
+		ufshci_printf(ctrlr, "unable to allocate shared interrupt\n");
+		return (ENOMEM);
+	}
+
+	error = bus_setup_intr(ctrlr->dev, ctrlr->res,
+	    INTR_TYPE_MISC | INTR_MPSAFE, NULL, ufshci_ctrlr_shared_handler,
+	    ctrlr, &ctrlr->tag);
+	if (error) {
+		ufshci_printf(ctrlr, "unable to setup shared interrupt\n");
+		return (error);
+	}
+
+	return (0);
+}
+
+static int
+ufshci_acpi_setup_interrupts(struct ufshci_controller *ctrlr)
+{
+	int num_io_queues, per_cpu_io_queues, min_cpus_per_ioq;
+
+	/*
+	 * TODO: Need to implement MCQ(Multi Circular Queue)
+	 * Example: num_io_queues = mp_ncpus;
+	 */
+	num_io_queues = 1;
+	TUNABLE_INT_FETCH("hw.ufshci.num_io_queues", &num_io_queues);
+	if (num_io_queues < 1 || num_io_queues > mp_ncpus)
+		num_io_queues = mp_ncpus;
+
+	per_cpu_io_queues = 1;
+	TUNABLE_INT_FETCH("hw.ufshci.per_cpu_io_queues", &per_cpu_io_queues);
+	if (per_cpu_io_queues == 0)
+		num_io_queues = 1;
+
+	min_cpus_per_ioq = smp_threads_per_core;
+	TUNABLE_INT_FETCH("hw.ufshci.min_cpus_per_ioq", &min_cpus_per_ioq);
+	if (min_cpus_per_ioq > 1) {
+		num_io_queues = min(num_io_queues,
+		    max(1, mp_ncpus / min_cpus_per_ioq));
+	}
+
+	if (num_io_queues > vm_ndomains)
+		num_io_queues -= num_io_queues % vm_ndomains;
+
+	ctrlr->num_io_queues = num_io_queues;
+	return (ufshci_acpi_setup_shared(ctrlr));
+}
+
+static int
+ufshci_acpi_attach(device_t dev)
+{
+	struct ufshci_controller *ctrlr = device_get_softc(dev);
+	int status;
+
+	ctrlr->dev = dev;
+	status = ufshci_acpi_allocate_memory(ctrlr);
+	if (status != 0)
+		goto bad;
+
+	status = ufshci_acpi_setup_interrupts(ctrlr);
+	if (status != 0)
+		goto bad;
+
+	return (ufshci_attach(dev));
+bad:
+	if (ctrlr->resource != NULL) {
+		bus_release_resource(dev, SYS_RES_MEMORY, ctrlr->resource_id,
+		    ctrlr->resource);
+	}
+
+	if (ctrlr->tag)
+		bus_teardown_intr(dev, ctrlr->res, ctrlr->tag);
+
+	if (ctrlr->res)
+		bus_release_resource(dev, SYS_RES_IRQ, rman_get_rid(ctrlr->res),
+		    ctrlr->res);
+
+	return (status);
+}
+
+static int
+ufshci_acpi_detach(device_t dev)
+{
+	return (ufshci_detach(dev));
+}
+
+static int
+ufshci_acpi_suspend(device_t dev)
+{
+	struct ufshci_controller *ctrlr = device_get_softc(dev);
+	int error;
+
+	error = bus_generic_suspend(dev);
+	if (error)
+		return (error);
+
+	/* Currently, PCI-based ufshci only supports POWER_STYPE_STANDBY */
+	error = ufshci_ctrlr_suspend(ctrlr, POWER_STYPE_STANDBY);
+	return (error);
+}
+
+static int
+ufshci_acpi_resume(device_t dev)
+{
+	struct ufshci_controller *ctrlr = device_get_softc(dev);
+	int error;
+
+	error = ufshci_ctrlr_resume(ctrlr, POWER_STYPE_AWAKE);
+	if (error)
+		return (error);
+
+	error = bus_generic_resume(dev);
+	return (error);
+}
diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index 501a1074fa58..b271720efb52 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -21,6 +21,50 @@ ufshci_ctrlr_fail(struct ufshci_controller *ctrlr)
 	ufshci_req_queue_fail(ctrlr, &ctrlr->transfer_req_queue);
 }
 
+/* Some controllers require a reinit after switching to the max gear. */
+static int
+ufshci_ctrlr_reinit_after_max_gear_switch(struct ufshci_controller *ctrlr)
+{
+	int error;
+
+	/* Reset device */
+	ufshci_utmr_req_queue_disable(ctrlr);
+	ufshci_utr_req_queue_disable(ctrlr);
+
+	error = ufshci_ctrlr_disable(ctrlr);
+	if (error != 0)
+		return (error);
+
+	error = ufshci_ctrlr_enable(ctrlr);
+	if (error != 0)
+		return (error);
+
+	error = ufshci_utmr_req_queue_enable(ctrlr);
+	if (error != 0)
+		return (error);
+
+	error = ufshci_utr_req_queue_enable(ctrlr);
+	if (error != 0)
+		return (error);
+
+	error = ufshci_ctrlr_send_nop(ctrlr);
+	if (error != 0)
+		return (error);
+
+	/* Reinit the target device. */
+	error = ufshci_dev_init(ctrlr);
+	if (error != 0)
+		return (error);
+
+	/* Initialize Reference Clock */
+	error = ufshci_dev_init_reference_clock(ctrlr);
+	if (error != 0)
+		return (error);
+
+	/* Initialize unipro */
+	return (ufshci_dev_init_unipro(ctrlr));
+}
+
 static void
 ufshci_ctrlr_start(struct ufshci_controller *ctrlr, bool resetting)
 {
@@ -77,6 +121,12 @@ ufshci_ctrlr_start(struct ufshci_controller *ctrlr, bool resetting)
 
 	ufshci_dev_init_uic_link_state(ctrlr);
 
+	if ((ctrlr->quirks & UFSHCI_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH) &&
+	    ufshci_ctrlr_reinit_after_max_gear_switch(ctrlr) != 0) {
+		ufshci_ctrlr_fail(ctrlr);
+		return;
+	}
+
 	/* Read Controller Descriptor (Device, Geometry) */
 	if (ufshci_dev_get_descriptor(ctrlr) != 0) {
 		ufshci_ctrlr_fail(ctrlr);
@@ -199,7 +249,7 @@ ufshci_ctrlr_disable(struct ufshci_controller *ctrlr)
 	return (error);
 }
 
-static int
+int
 ufshci_ctrlr_enable(struct ufshci_controller *ctrlr)
 {
 	uint32_t ie, hcs;
@@ -302,15 +352,18 @@ ufshci_ctrlr_construct(struct ufshci_controller *ctrlr, device_t dev)
 
 	/* Read Device Capabilities */
 	ctrlr->cap = cap = ufshci_mmio_read_4(ctrlr, cap);
-	ctrlr->is_single_db_supported = UFSHCIV(UFSHCI_CAP_REG_LSDBS, cap);
-	/*
-	 * TODO: This driver does not yet support multi-queue.
-	 * Check the UFSHCI_CAP_REG_MCQS bit in the future to determine if
-	 * multi-queue support is available.
-	 */
-	ctrlr->is_mcq_supported = false;
-	if (!(ctrlr->is_single_db_supported == 0 || ctrlr->is_mcq_supported))
+	if (ctrlr->quirks & UFSHCI_QUIRK_BROKEN_LSDBS_MCQS_CAP) {
+		ctrlr->is_single_db_supported = true;
+		ctrlr->is_mcq_supported = true;
+	} else {
+		ctrlr->is_single_db_supported = (UFSHCIV(UFSHCI_CAP_REG_LSDBS,
+						     cap) == 0);
+		ctrlr->is_mcq_supported = (UFSHCIV(UFSHCI_CAP_REG_MCQS, cap) ==
+		    1);
+	}
+	if (!(ctrlr->is_single_db_supported || ctrlr->is_mcq_supported))
 		return (ENXIO);
+
 	/*
 	 * The maximum transfer size supported by UFSHCI spec is 65535 * 256 KiB
 	 * However, we limit the maximum transfer size to 1MiB(256 * 4KiB) for
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index fb57d67d8362..eab36e88525b 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -329,10 +329,15 @@ struct ufshci_controller {
 #define UFSHCI_QUIRK_NOT_SUPPORT_ABORT_TASK \
 	16 /* QEMU does not support Task Management Request */
 #define UFSHCI_QUIRK_SKIP_WELL_KNOWN_LUNS \
-	32 /* QEMU does not support Well known logical units*/
+	32 /* QEMU does not support Well known logical units */
 #define UFSHCI_QUIRK_BROKEN_AUTO_HIBERNATE                                    \
 	64 /* Some controllers have the Auto hibernate feature enabled but it \
 	      does not work. */
+#define UFSHCI_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH                            \
+	128 /* Some controllers need to reinit the device after gear switch. \
+	     */
+#define UFSHCI_QUIRK_BROKEN_LSDBS_MCQS_CAP \
+	256 /* Some controllers have their LSDB and MCQS fields reset to 0. */
 
 	uint32_t ref_clk;
 
@@ -405,8 +410,8 @@ struct ufshci_controller {
 	/* UFS Transport Protocol Layer (UTP) */
 	struct ufshci_req_queue task_mgmt_req_queue;
 	struct ufshci_req_queue transfer_req_queue;
-	bool is_single_db_supported; /* 0 = supported */
-	bool is_mcq_supported;	     /* 1 = supported */
+	bool is_single_db_supported;
+	bool is_mcq_supported;
 
 	/* UFS Interconnect Layer (UIC) */
 	struct mtx uic_cmd_lock;
@@ -457,6 +462,7 @@ int ufshci_ctrlr_suspend(struct ufshci_controller *ctrlr,
 int ufshci_ctrlr_resume(struct ufshci_controller *ctrlr,
     enum power_stype stype);
 int ufshci_ctrlr_disable(struct ufshci_controller *ctrlr);
+int ufshci_ctrlr_enable(struct ufshci_controller *ctrlr);
 /* ctrlr defined as void * to allow use with config_intrhook. */
 void ufshci_ctrlr_start_config_hook(void *arg);
 void ufshci_ctrlr_poll(struct ufshci_controller *ctrlr);
diff --git a/sys/modules/ufshci/Makefile b/sys/modules/ufshci/Makefile
index ab5f3eaf88d0..aa0419d3a6d6 100644
--- a/sys/modules/ufshci/Makefile
+++ b/sys/modules/ufshci/Makefile
@@ -3,6 +3,7 @@
 KMOD = ufshci
 
 SRCS =	ufshci.c	\
+	ufshci_acpi.c	\
 	ufshci_pci.c	\
 	ufshci_ctrlr.c	\
 	ufshci_dev.c	\
@@ -12,8 +13,10 @@ SRCS =	ufshci.c	\
 	ufshci_req_sdb.c	\
 	ufshci_sim.c		\
 	ufshci_sysctl.c		\
+	acpi_if.h		\
 	bus_if.h		\
 	device_if.h		\
+	opt_acpi.h		\
 	opt_cam.h		\
 	pci_if.h
 

From nobody Tue Oct  6 07:51:00 2026
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 4hzT2r4KH5z6cWDQ
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:00 +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 4hzT2r2HBQz4GFR
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:00 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273060;
	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=gHtsUm6qNPGLEw9wN7nsxLG6xWkLEFsDFjzE5+343Zg=;
	b=OOSQlPmfK7LSs9C3di8f2Iax2oVWYzchDZssZFRrCciXq8CBLHuYWvsd3HSbdprNg8UXks
	J3lcmRAEJWFmkh30FbCuPTFuVjkxG72oSuE9/GshJLwCyeSHhFbgrxYN0xNhNLkJLgG68X
	u3gxJgEUPmbN0BoyPPa72zzBbqkFy95q3XYCG/LU/rP8B4V2fPwV9OJNVCssbQDWbvmXC7
	T2Z+rk9EtBYab60S+HYqApIg8ryVSQEZOkhH5xthe73sRI6eQEhgcm4nra8DoL/FVeeSR6
	zWwxxtspEDVdOCXd6RjFP04e3zqkQesWLIBSBv2MgR5TVFYXuWcMxoi/93TkWw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273060;
	b=fpblkbS+XTegaZxRCAS9yH+gRId5XR6RAASpkRwXakK3vXZevrEEm5PpI7Y3OkN8q+YttV
	bUtvV1OjJ9f4Lf5ZusJs6qRvFXoCRaEDPquve9sko8t1E1KPc/+BcdR1APRZJ+pZ8ACxSF
	Jj+LFVlTxSHUvRSTPAnMqtmbVXxbu5BfhADdaWa90JFnfFF4nFqqZwGK1EhNhGDcobpoPj
	dpIn0jNWIu+agmzy7+OoJaQc4mUTa3kJ8ZjaL9U7Ot22nPploY0PyZXL58IIoI+hhHls1h
	Y6pFpG0/J5rYJeO7mksQZievTjtCnEb3OS6JKtf5jml8+U9891xuIDMpvjDb7A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273060;
	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=gHtsUm6qNPGLEw9wN7nsxLG6xWkLEFsDFjzE5+343Zg=;
	b=JMcWx5kneriRLNQbcwS16DMmZ22rDFdhf9bL/MV38hBRqaZfKMnfySpDsmxK/4p6DTt5TK
	W7CD7KyVM8BMHlw5xZ8rcog30B9PjYIrzrsNbuKXIidGdCURl1Cu4C8UiBQVmJlcvEHwyD
	KaHr9U9VqxuBgwbsOniPOMzAuwyEx08flaws0FhsgQwhzB4O0jPBbg0golNTtI9vDTnzwc
	hSgqOuyfqfQgR+zh9KGWsp5u/My4ugpiPRJz3bc+e/qRpbr6zz9X75QEPqOfqW/M0efe/M
	SKGalqmpfxsnwn2IThqSclgbqAClakRjaV5E6ftQX8+xjxRoirEGQwTFpI8ppg==
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 4hzT2r1LTxzxZB
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:00 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 185b8
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:00 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: c9e2fd2eb3b9 - stable/15 - ufshci: fix data direction encoding for read commands
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: c9e2fd2eb3b91cbef7295e556b22ab249b14686e
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:00 +0000
Message-Id: <6ac4a864.185b8.92cb44c@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=c9e2fd2eb3b91cbef7295e556b22ab249b14686e

commit c9e2fd2eb3b91cbef7295e556b22ab249b14686e
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:30:11 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:53 +0000

    ufshci: fix data direction encoding for read commands
    
    The data_direction field in the UTP Transfer Request Descriptor is only
    2 bits wide ([26:25]). UFSHCI_DATA_DIRECTION_FROM_TGT_TO_SYS was defined
    as 0x10, which truncates to 0b00 (No data transfer) when stored into the
    2-bit field, so every read command was described to the controller as
    having no data phase. Only writes (0b01) happened to be encoded
    correctly.
    
    Define all values as 2-bit binary literals, matching the existing
    RESERVED = 0b11 entry, so read is encoded as 0b10 as required by the
    specification.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58652
    
    (cherry picked from commit cf04a05424f1a79e55303de252e5873abeae7b88)
---
 sys/dev/ufshci/ufshci.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sys/dev/ufshci/ufshci.h b/sys/dev/ufshci/ufshci.h
index 766d8de0535b..c2bef5c9a807 100644
--- a/sys/dev/ufshci/ufshci.h
+++ b/sys/dev/ufshci/ufshci.h
@@ -154,9 +154,9 @@ enum ufshci_command_type {
 };
 
 enum ufshci_data_direction {
-	UFSHCI_DATA_DIRECTION_NO_DATA_TRANSFER = 0x00,
-	UFSHCI_DATA_DIRECTION_FROM_SYS_TO_TGT = 0x01,
-	UFSHCI_DATA_DIRECTION_FROM_TGT_TO_SYS = 0x10,
+	UFSHCI_DATA_DIRECTION_NO_DATA_TRANSFER = 0b00,
+	UFSHCI_DATA_DIRECTION_FROM_SYS_TO_TGT = 0b01,
+	UFSHCI_DATA_DIRECTION_FROM_TGT_TO_SYS = 0b10,
 	UFSHCI_DATA_DIRECTION_RESERVED = 0b11,
 };
 

From nobody Tue Oct  6 07:51:01 2026
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 4hzT2s5nLSz6cVyN
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:01 +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 4hzT2s3HR7z4GR2
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:01 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273061;
	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=PRx48xgkiUeYUbngnLv5A56Qpad000frTv3VYmjvRi0=;
	b=vPyF67PYmLaHd+LuhB/nud0qsk/jrWn5LX1OKAMQZqy/FUEo9GaPW5lPNzCbauLuRj64Zz
	qDHzOqUPHBo7J0vO2VblrqU+S9BHsavQTGbWzZK7TzhqDKzbBKzwpIluQS7Y9TJxiY1i6K
	bUPrA4gJV+sTvPppwyLBXCFP90UXcAhy5JFS0uyByTGMIJSlANx1z+dSoN84QA0ed3jhek
	eGIf2Qvg3GDTXS7k7m5BKmZlnwjhkqSdPrBT8I3ZO5dokMnfCrfNzQy8ZCc36CZ5p415th
	Fh+stOYsSy2e5QgSXEuJ1gZ5Dlp8DJZzHbXaZjBsmikZVLAAJSyN1r9Yqs1KSA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273061;
	b=OPhVlvmPOoPtx4nLXCMcXbMcB7RbsyEG2YeajKR5gnLFic+NGu7e3CQnSfBIO2XUvwa0t1
	eyg2azbJil/0uZvZsC8OiTvD5ypS2H/WgEbsDCG7jK5KvzyoZPgmDhQ+DLt6gUMG/TZ52j
	J8CIw3xYIvV3KVfSO6evjIFCJ5ztox8neR6+G/k7Q5RFS2Cy2K7IHhpy1CYVZP8dTRaHt+
	qEXiqK30kR5TPEmfD8tGVAee76sLon7VRT0ZadtY0Vt4V2BLTmm08Xpfch6AMwYpHTwxhs
	+UV/YDgRSEGhRmGpKfoj5IbUAuId2lWLgO9q8IaLj2ZsAojFCC0rWSG4PMraGA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273061;
	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=PRx48xgkiUeYUbngnLv5A56Qpad000frTv3VYmjvRi0=;
	b=weNcdZgRpgcs2NiMolqBbMhwP1m3bOF6J3iioPCJBokzZ/kyR1iU0XaDDrCm4JHB5oHDnU
	TpXa3/jn8037bdGWld01vqs2g773483rWDlxAj6suWX7Kz4WbewjoF3kpbnGHy6nZD3ujo
	Sr4TlueeTwo3EePZEWHG5Z5gvxky6AyqpQBKLBbs4VX/nDVLR52WNT31I039zAVYlYB7Ww
	eYPCJOL5+7figiJWpxqjV9bsloJOp6CThuNwSV00K1Wk3rjmD0W9BR3HEBVaLiXlQKQ/e1
	HlRqPK+9rwsXe6xI8E5ZYwqAaa6aGI7NKdk8yrkV4ya4UKbuTsGvmpHDTkfg/A==
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 4hzT2s25gFzxqm
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:01 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 19048
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:01 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 3c812d0f02e3 - stable/15 - ufshci: abort submission when payload DMA mapping fails
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 3c812d0f02e35ccc3b2a5087819b1acb052851b8
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:01 +0000
Message-Id: <6ac4a865.19048.14642aa@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=3c812d0f02e35ccc3b2a5087819b1acb052851b8

commit 3c812d0f02e35ccc3b2a5087819b1acb052851b8
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:31:43 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:53 +0000

    ufshci: abort submission when payload DMA mapping fails
    
    When bus_dmamap_load_mem() failed, ufshci_req_queue_prepare_prdt()
    manually completed and released the tracker, but its caller kept going:
    it built the UTRD, set the slot back to SCHEDULED, and rang the
    doorbell for a tracker whose request had already been freed. Return the
    mapping error and stop the submission so the released tracker is not
    resurrected.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58653
    
    (cherry picked from commit 5f3a2b364ea51ea05daa4399693bda2021e39434)
---
 sys/dev/ufshci/ufshci_req_queue.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index 4c82b79d0e26..395801274f0e 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -371,7 +371,7 @@ ufshci_payload_map(void *arg, bus_dma_segment_t *seg, int nseg, int error)
 	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 }
 
-static void
+static int
 ufshci_req_queue_prepare_prdt(struct ufshci_tracker *tr)
 {
 	struct ufshci_request *req = tr->req;
@@ -403,6 +403,8 @@ ufshci_req_queue_prepare_prdt(struct ufshci_tracker *tr)
 		    UFSHCI_RESPONSE_CODE_GENERAL_FAILURE);
 		mtx_lock(&tr->hwq->qlock);
 	}
+
+	return (error);
 }
 
 static void
@@ -716,9 +718,15 @@ ufshci_req_queue_submit_tracker(struct ufshci_req_queue *req_queue,
 		memcpy(tr->ucd, &req->request_upiu, request_len);
 		memset((uint8_t *)tr->ucd + response_off, 0, response_len);
 
-		/* Prepare PRDT */
-		if (req->payload_valid)
-			ufshci_req_queue_prepare_prdt(tr);
+		/*
+		 * Prepare PRDT. If the payload could not be mapped, the
+		 * tracker has already been completed and released by the
+		 * manual completion path, so the descriptor must not be
+		 * built and the doorbell must not be rung.
+		 */
+		if (req->payload_valid &&
+		    ufshci_req_queue_prepare_prdt(tr) != 0)
+			return;
 
 		/* Prepare UTP Transfer Request Descriptor. */
 		ucd_paddr = tr->ucd_bus_addr;

From nobody Tue Oct  6 07:51:02 2026
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 4hzT2t5bDwz6cWBC
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:02 +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 4hzT2t47Y7z4GNs
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:02 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273062;
	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=DtP9xwf9UojCK7hMi/U2dI7cMCBQRg5H5azobLn3b2s=;
	b=hJiIwI1Op2WFQCjZTgALd+2qKB/jlQNRIW0kdzrpg2UKI3pDSIkCCWEr6W2pQYHlGSzNBp
	63z9r8mk/sBrnViXbrtPRtpAlnk2Q3OSX2+8aL9sGziAmPODORq2Dpr12ncM2sXMhduXqK
	bbPxqa15aG2WF4PUBb7gOeLhubUMD4XbANK6mPvoFM7ABpvygsA4LVuzCPhL5N9Gy72RMG
	+u9e2HQIB77cLAdega6YvNWESEtfiIr+JT0LGWuLX/VdLWoLXOp82rg1Et9n65sPdUQX3Z
	4Tk14+PiF4jQRXSsRXgYYaCbcN0ZuYH4BvhKFOdwu083KIljo/bvjh6bM8jC3w==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273062;
	b=LYQhTztzJ9Km4HCe/DtLH17HbqKPxbw763M2ypI6cU6H5qNgo02ckq8K3mif86D0aKWGwV
	9XS4RZOXVS4QTkOLNAd7AxRKDbxgLa21cJ0tBWi5zeSclDJUGfI8WlrH4n8CTdKWJkmzH7
	lF1gwQra4dkav3yMOxtNcOivqckJXT+EYQbDjtnq2pAjxBHkm0LjHpPr7EF5cmdYNIlO2o
	8KmHSfIZzZi8Dm4Y78NIpcRTze7X/+FCEqBSozC4Kc2ht8YYLVdDsqMwGPADk9Uuuk+t/K
	9yY1YgETBbJpbiRFatMWTNGASfHlYBsIlihNZytTAjpHyb439BWOXqg1y9lOBA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273062;
	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=DtP9xwf9UojCK7hMi/U2dI7cMCBQRg5H5azobLn3b2s=;
	b=G39QWG4+bw/K+Bnn7i9I2pR1JUePlYpXII0ExafM0zkpFW5TnEGtejfWVZCU4tgPvwjTOu
	BwQo/WS5LpRQms7dRPJtaTCtIt+tL+WQ2WfENvnmfCXvkCsVrs08cNMRYv2X2GfpvEVxR7
	5a8MgYl7/mcbc8aRPQHNnRvdYqhrrXnqyEQTLe+585ZbpwhPJ9aQRqkXKpYpPpxluveWnd
	a8PmJj3g6Mvvfj26f76eJ4YHrYmev98kiQM7BtNTVr/ImSKuse2lGywjZmlZWJ7jAk3tox
	55kd2GITJAZkMSBaN3rLX91+nOSjLoLKmoSVUWxzuYgla0AwmHK3fmmF1oYpiw==
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 4hzT2t34gRzxcB
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:02 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 1882c
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:02 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: d8ed29dcb9f3 - stable/15 - ufshci: fail attribute reads on a non-zero config result code
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: d8ed29dcb9f3fa7cc2a91c20f2f17e23664db663
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:02 +0000
Message-Id: <6ac4a866.1882c.67afe850@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=d8ed29dcb9f3fa7cc2a91c20f2f17e23664db663

commit d8ed29dcb9f3fa7cc2a91c20f2f17e23664db663
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:33:00 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:54 +0000

    ufshci: fail attribute reads on a non-zero config result code
    
    ufshci_uic_send_cmd() only logged the error code and returned success,
    so a failed DME_GET gave its caller a stale value as if it were valid.
    The gear and lane settings could then be programmed from that garbage.
    
    Return ENXIO for reads instead. Writes keep logging and continuing,
    because a device may reject an optional attribute and that must not
    fail bring-up.
    
    Sponsored by:           Samsung Electronics
    Reviewed by             imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58654
    
    (cherry picked from commit 154e335cd635436c69ad98723e25988852bd11db)
---
 sys/dev/ufshci/ufshci_uic_cmd.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/sys/dev/ufshci/ufshci_uic_cmd.c b/sys/dev/ufshci/ufshci_uic_cmd.c
index c6e6afe3f688..03ea8b2ba9f1 100644
--- a/sys/dev/ufshci/ufshci_uic_cmd.c
+++ b/sys/dev/ufshci/ufshci_uic_cmd.c
@@ -199,6 +199,14 @@ ufshci_uic_send_cmd(struct ufshci_controller *ctrlr,
 		    "Failed to send UIC command (Opcode: 0x%x"
 		    ", config result code = 0x%x)\n",
 		    uic_cmd->opcode, config_result_code);
+		/*
+		 * Reads fail here: there is no valid result to return.
+		 * Writes only log the error, so that a rejected optional
+		 * attribute does not fail bring-up.
+		 */
+		if (return_value != NULL)
+			return (ENXIO);
+		return (0);
 	}
 
 	if (return_value != NULL)

From nobody Tue Oct  6 07:51:03 2026
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 4hzT2v6nQgz6cW6d
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:03 +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 4hzT2v4kpdz4GTn
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:03 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273063;
	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=vqD6UBiacGAbhZFXo8s26KfEndiV34lHTP1br/qw1kI=;
	b=mNvQyVHDzmRYyaP+UgNURekNi+lwW/H1S8USOuNce/GLdNClZFBWVnE240VWJptXKsgupO
	3U2JKrqvGBB1aWh8rK6EB27+66aFJHFMBN0kycTpXBksjjcNFK56tsqoAp3bM8T2S9uhKP
	+zxsjWM5x4tew75PN7anop3BSnz6z9uPCy16OqDLplq3noHGmfq3H3IdgZCGeyApuMPrvk
	rRyNIxuy+VFKvdO1c9ckRZugORVgeVqCdFgwWX2wp1XohiwrHdaQ/E0O9edd/0qLzeVqz2
	LzCocHPfJfJOGcR4/30vqr9xj+W0Eu+/Q6GSyYhaL+snbD7xxqmMXdO77MiHAg==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273063;
	b=peaHBfFta8CntHqAIy650O29PNV9ujfMwvdlz9LpQ/D9MDlBb/Or7uXfuD0IhjUFOkqfwB
	lrEzvgIxWW1KWg4Y094iOEbjsCgBgdO0vtgxIjvvOgKZGdcfq2sySUxDq8t6QnQCV4iVBh
	1saS3vL78EJKn0JX+Cta7n7B1mQhhI7qzdMDwXSh4Lz3/pC6Qv9d0inoQYS4IPMA12nngw
	1t8omrP3T+MwLaak/QX9Al3W9Cbw3I7A8Zia/Z2TCWF+15fHneop6/MQcv9mDqeA6Ki4Ro
	rrDCqDzEue3A+Z+t4QnKgsxMD0IfbCtNxFQcrrEg97IuH9Smg4R276DLcq/XzA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273063;
	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=vqD6UBiacGAbhZFXo8s26KfEndiV34lHTP1br/qw1kI=;
	b=GUPGma/Pt9r8iGSn7Qv6TndOosK4gY8Pp/BTcK8/fMO/yBOcaBhwOvDFAB20+Hs4io4jxL
	W5l+6/Y5imbsNk90xAI+e1IgRDr3Ww+4OPtZvC7EXafocumwF0W6+g8QNYezCL5CRPsry5
	Pfl+oMaQA2j6CICmXeLRStSdoSwYVhEyNEgsJrDrWlhnAMbwz1GaOWwvnKTej6WVCayil9
	iLDPuwzQY0N934SThTUyWD342ajjhMwJMXfmeTn6fe+ygruMrzR1d32jpvvPtZydNAwDyQ
	t8DsNgCrmhyDGm/ncpWtspJmMspbybS8lx+iHgFrSJfQE4HruOftirwFns1SMQ==
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 4hzT2v3mkjzxcC
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:03 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18729
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:03 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 9997667c1b34 - stable/15 - ufshci: handle controller command submit failures
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 9997667c1b34eda8a1f3f1bd4c20e28d1144f07b
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:03 +0000
Message-Id: <6ac4a867.18729.39a51846@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=9997667c1b34eda8a1f3f1bd4c20e28d1144f07b

commit 9997667c1b34eda8a1f3f1bd4c20e28d1144f07b
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:34:06 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:54 +0000

    ufshci: handle controller command submit failures
    
    Return submission errors from the controller command helpers and
    propagate them to polled callers before waiting for completion. Free
    requests that never enter a hardware queue so failure paths do not leak
    or panic after the poll timeout.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58655
    
    (cherry picked from commit c9827f1528a69664f4031e1c511b2e7022601a7c)
---
 sys/dev/ufshci/ufshci_ctrlr.c     |  7 +++++-
 sys/dev/ufshci/ufshci_ctrlr_cmd.c | 29 ++++++++++++++++++-----
 sys/dev/ufshci/ufshci_dev.c       | 48 +++++++++++++++++++++++++++++----------
 sys/dev/ufshci/ufshci_private.h   |  6 ++---
 sys/dev/ufshci/ufshci_req_queue.c | 16 +++++++++----
 5 files changed, 79 insertions(+), 27 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index b271720efb52..cb5549f8e7c9 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -494,9 +494,14 @@ int
 ufshci_ctrlr_send_nop(struct ufshci_controller *ctrlr)
 {
 	struct ufshci_completion_poll_status status;
+	int error;
 
 	status.done = 0;
-	ufshci_ctrlr_cmd_send_nop(ctrlr, ufshci_completion_poll_cb, &status);
+	error = ufshci_ctrlr_cmd_send_nop(ctrlr, ufshci_completion_poll_cb,
+	    &status);
+	if (error)
+		return (error);
+
 	ufshci_completion_poll(&status);
 	if (status.error) {
 		ufshci_printf(ctrlr, "ufshci_ctrlr_send_nop failed!\n");
diff --git a/sys/dev/ufshci/ufshci_ctrlr_cmd.c b/sys/dev/ufshci/ufshci_ctrlr_cmd.c
index cac01894c062..2e85cfa4b5b0 100644
--- a/sys/dev/ufshci/ufshci_ctrlr_cmd.c
+++ b/sys/dev/ufshci/ufshci_ctrlr_cmd.c
@@ -7,15 +7,18 @@
 
 #include "ufshci_private.h"
 
-void
+int
 ufshci_ctrlr_cmd_send_task_mgmt_request(struct ufshci_controller *ctrlr,
     ufshci_cb_fn_t cb_fn, void *cb_arg, uint8_t function, uint8_t lun,
     uint8_t task_tag, uint8_t iid)
 {
 	struct ufshci_request *req;
 	struct ufshci_task_mgmt_request_upiu *upiu;
+	int error;
 
 	req = ufshci_allocate_request_vaddr(NULL, 0, M_NOWAIT, cb_fn, cb_arg);
+	if (req == NULL)
+		return (ENOMEM);
 
 	req->request_size = sizeof(struct ufshci_task_mgmt_request_upiu);
 	req->response_size = sizeof(struct ufshci_task_mgmt_response_upiu);
@@ -30,15 +33,20 @@ ufshci_ctrlr_cmd_send_task_mgmt_request(struct ufshci_controller *ctrlr,
 	upiu->input_param2 = task_tag;
 	upiu->input_param3 = iid;
 
-	ufshci_ctrlr_submit_task_mgmt_request(ctrlr, req);
+	error = ufshci_ctrlr_submit_task_mgmt_request(ctrlr, req);
+	if (error)
+		ufshci_free_request(req);
+
+	return (error);
 }
 
-void
+int
 ufshci_ctrlr_cmd_send_nop(struct ufshci_controller *ctrlr, ufshci_cb_fn_t cb_fn,
     void *cb_arg)
 {
 	struct ufshci_request *req;
 	struct ufshci_nop_out_upiu *upiu;
+	int error;
 
 	req = ufshci_allocate_request_vaddr(NULL, 0, M_WAITOK, cb_fn, cb_arg);
 
@@ -50,15 +58,20 @@ ufshci_ctrlr_cmd_send_nop(struct ufshci_controller *ctrlr, ufshci_cb_fn_t cb_fn,
 	memset(upiu, 0, req->request_size);
 	upiu->header.trans_type = UFSHCI_UPIU_TRANSACTION_CODE_NOP_OUT;
 
-	ufshci_ctrlr_submit_transfer_request(ctrlr, req);
+	error = ufshci_ctrlr_submit_transfer_request(ctrlr, req);
+	if (error)
+		ufshci_free_request(req);
+
+	return (error);
 }
 
-void
+int
 ufshci_ctrlr_cmd_send_query_request(struct ufshci_controller *ctrlr,
     ufshci_cb_fn_t cb_fn, void *cb_arg, struct ufshci_query_param param)
 {
 	struct ufshci_request *req;
 	struct ufshci_query_request_upiu *upiu;
+	int error;
 
 	req = ufshci_allocate_request_vaddr(NULL, 0, M_WAITOK, cb_fn, cb_arg);
 
@@ -77,5 +90,9 @@ ufshci_ctrlr_cmd_send_query_request(struct ufshci_controller *ctrlr,
 	upiu->value_64 = param.value;
 	upiu->length = param.desc_size;
 
-	ufshci_ctrlr_submit_transfer_request(ctrlr, req);
+	error = ufshci_ctrlr_submit_transfer_request(ctrlr, req);
+	if (error)
+		ufshci_free_request(req);
+
+	return (error);
 }
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 0fedbca9a90e..c53d9b71ba2c 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -19,6 +19,7 @@ ufshci_dev_read_descriptor(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
+	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_READ_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_READ_DESCRIPTOR;
@@ -29,8 +30,11 @@ ufshci_dev_read_descriptor(struct ufshci_controller *ctrlr,
 	param.desc_size = desc_size;
 
 	status.done = 0;
-	ufshci_ctrlr_cmd_send_query_request(ctrlr, ufshci_completion_poll_cb,
-	    &status, param);
+	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
+	    ufshci_completion_poll_cb, &status, param);
+	if (error)
+		return (error);
+
 	ufshci_completion_poll(&status);
 	if (status.error) {
 		ufshci_printf(ctrlr,
@@ -74,6 +78,7 @@ ufshci_dev_read_flag(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
+	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_READ_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_READ_FLAG;
@@ -83,8 +88,11 @@ ufshci_dev_read_flag(struct ufshci_controller *ctrlr,
 	param.value = 0;
 
 	status.done = 0;
-	ufshci_ctrlr_cmd_send_query_request(ctrlr, ufshci_completion_poll_cb,
-	    &status, param);
+	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
+	    ufshci_completion_poll_cb, &status, param);
+	if (error)
+		return (error);
+
 	ufshci_completion_poll(&status);
 	if (status.error) {
 		ufshci_printf(ctrlr, "ufshci_dev_read_flag failed!\n");
@@ -102,6 +110,7 @@ ufshci_dev_set_flag(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
+	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_SET_FLAG;
@@ -111,8 +120,11 @@ ufshci_dev_set_flag(struct ufshci_controller *ctrlr,
 	param.value = 0;
 
 	status.done = 0;
-	ufshci_ctrlr_cmd_send_query_request(ctrlr, ufshci_completion_poll_cb,
-	    &status, param);
+	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
+	    ufshci_completion_poll_cb, &status, param);
+	if (error)
+		return (error);
+
 	ufshci_completion_poll(&status);
 	if (status.error) {
 		ufshci_printf(ctrlr, "ufshci_dev_set_flag failed!\n");
@@ -128,6 +140,7 @@ ufshci_dev_clear_flag(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
+	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_CLEAR_FLAG;
@@ -137,8 +150,11 @@ ufshci_dev_clear_flag(struct ufshci_controller *ctrlr,
 	param.value = 0;
 
 	status.done = 0;
-	ufshci_ctrlr_cmd_send_query_request(ctrlr, ufshci_completion_poll_cb,
-	    &status, param);
+	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
+	    ufshci_completion_poll_cb, &status, param);
+	if (error)
+		return (error);
+
 	ufshci_completion_poll(&status);
 	if (status.error) {
 		ufshci_printf(ctrlr, "ufshci_dev_clear_flag failed!\n");
@@ -155,6 +171,7 @@ ufshci_dev_read_attribute(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
+	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_READ_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_READ_ATTRIBUTE;
@@ -164,8 +181,11 @@ ufshci_dev_read_attribute(struct ufshci_controller *ctrlr,
 	param.value = 0;
 
 	status.done = 0;
-	ufshci_ctrlr_cmd_send_query_request(ctrlr, ufshci_completion_poll_cb,
-	    &status, param);
+	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
+	    ufshci_completion_poll_cb, &status, param);
+	if (error)
+		return (error);
+
 	ufshci_completion_poll(&status);
 	if (status.error) {
 		ufshci_printf(ctrlr, "ufshci_dev_read_attribute failed!\n");
@@ -184,6 +204,7 @@ ufshci_dev_write_attribute(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
+	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_WRITE_ATTRIBUTE;
@@ -193,8 +214,11 @@ ufshci_dev_write_attribute(struct ufshci_controller *ctrlr,
 	param.value = value;
 
 	status.done = 0;
-	ufshci_ctrlr_cmd_send_query_request(ctrlr, ufshci_completion_poll_cb,
-	    &status, param);
+	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
+	    ufshci_completion_poll_cb, &status, param);
+	if (error)
+		return (error);
+
 	ufshci_completion_poll(&status);
 	if (status.error) {
 		ufshci_printf(ctrlr, "ufshci_dev_write_attribute failed!\n");
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index eab36e88525b..e7345fc5a410 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -493,12 +493,12 @@ int ufshci_dev_link_state_transition(struct ufshci_controller *ctrlr,
     enum ufshci_uic_link_state target_state);
 
 /* Controller Command */
-void ufshci_ctrlr_cmd_send_task_mgmt_request(struct ufshci_controller *ctrlr,
+int ufshci_ctrlr_cmd_send_task_mgmt_request(struct ufshci_controller *ctrlr,
     ufshci_cb_fn_t cb_fn, void *cb_arg, uint8_t function, uint8_t lun,
     uint8_t task_tag, uint8_t iid);
-void ufshci_ctrlr_cmd_send_nop(struct ufshci_controller *ctrlr,
+int ufshci_ctrlr_cmd_send_nop(struct ufshci_controller *ctrlr,
     ufshci_cb_fn_t cb_fn, void *cb_arg);
-void ufshci_ctrlr_cmd_send_query_request(struct ufshci_controller *ctrlr,
+int ufshci_ctrlr_cmd_send_query_request(struct ufshci_controller *ctrlr,
     ufshci_cb_fn_t cb_fn, void *cb_arg, struct ufshci_query_param param);
 void ufshci_ctrlr_cmd_send_scsi_command(struct ufshci_controller *ctrlr,
     ufshci_cb_fn_t cb_fn, void *cb_arg, uint8_t *cmd_ptr, uint8_t cmd_len,
diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index 395801274f0e..371b9c520979 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -632,11 +632,17 @@ ufshci_req_queue_timeout(void *arg)
 				ufshci_printf(ctrlr,
 				    "Recovery step 1: Timeout occurred. aborting the task(%d).\n",
 				    tr->req->request_upiu.header.task_tag);
-				ufshci_ctrlr_cmd_send_task_mgmt_request(ctrlr,
-				    ufshci_abort_complete, tr,
-				    UFSHCI_TASK_MGMT_FUNCTION_ABORT_TASK,
-				    tr->req->request_upiu.header.lun,
-				    tr->req->request_upiu.header.task_tag, 0);
+				if (ufshci_ctrlr_cmd_send_task_mgmt_request(ctrlr,
+					ufshci_abort_complete, tr,
+					UFSHCI_TASK_MGMT_FUNCTION_ABORT_TASK,
+					tr->req->request_upiu.header.lun,
+					tr->req->request_upiu.header.task_tag,
+					0) != 0) {
+					ufshci_req_queue_timeout_recovery(ctrlr,
+					    hwq);
+					idle = false;
+					break;
+				}
 			} else {
 				/* Recovery Step 2-5 */
 				ufshci_req_queue_timeout_recovery(ctrlr, hwq);

From nobody Tue Oct  6 07:51:04 2026
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 4hzT2x1Qlvz6cWDb
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:05 +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 4hzT2w5RHgz4GPD
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:04 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273064;
	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=H7fRe3tp7DraUXB1BGGSQlqMsde8ThtYl1OmuiD6cs4=;
	b=q5MxL2hXW5TAtWIXPjGyEQC2VVjgAmYf/jXs43n/jNGhUvMNLh71yyCxUFvl8/SJmh/Em+
	8HZ4xPiPwQ4fkk9g4EeBYjZUwrz/pRV2cWlAtQsf7nYq3S3d+UQ4Yb6JaKTTV6DWuFNaW9
	32aEwvPjxc8VqlVHi5+Yu9WewzvD7UGJ/hPUrcGSklFDkjNhfloATy1HBI0nNcqB+wpNTh
	AhG8x41/sjE2+GAqH0A0URB16CFOOTvRKfTdSk7WwW1H9vZu4lx4YgB1pS/fOeD3xQw17i
	hNH1tH1lHRkDMyZWjIyP/8p7Y3ZqHfPvUOv1K7ogcC7HKh5sO/eGv+6WGF+x1Q==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273064;
	b=W6rabYWFO4Mg4WvqgVrbmejdF88Q6nTXz5j4JD8Q6spAbfPYGD6SA4jJkh4XHo0pVGrTPh
	48ySHgJ74PElI/edxAfVzCKH2yzg2nDJjOiyTprXnE9APy394CA5n9xLg18tYYwHkVBIUs
	1XL6X+WWk++5zLQE+U0P1TnjQHLJLfjTzNBHUgpg0Jfw4IoNZF4HvW/fT7j4CErc9m5BsD
	Xsv61/imsBvv+8bzMNh4w3D8S57uaEkaGc4lQfYR9Q6STXLgmz/mnTQcsxwZ/C9fxwvY/p
	iHiqzXaW5JS0ppztdnwKD+2Scn3ZdesnAGdeez84CJX6Mut0NEclR5+CpJVedQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273064;
	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=H7fRe3tp7DraUXB1BGGSQlqMsde8ThtYl1OmuiD6cs4=;
	b=x+ysYIV7kwjP9keXFWephLb8kU+71ng8MhR0MLt9gy+yJ+P/xe4QduKcNh2VI4tOOrhko3
	FQo47GzA4t0CQoqJ6r/Lxx7sCeyjq96inaB6jV+PGYnu8zR2jZOhdDZCnZJZohc1NpmV6x
	XuhJxZmhHQW3n93qgG7CfWv8zt0Y0sr2Vgy4p3NL4nLeeLAv3bl+zx0UQuidB7CK85OV1K
	I9NFgS5c00LRYkCxsg/7nz6Cm0rDx0Wp7ZhkH/jVwSD9ob4ml+j2bdTrNkRV8PFW3T5zqb
	Zk+dPZ/e9bPVi3hkti716f0lRSbm8wUCQ9DEXLwpQN9+z+MGQRQYuA2DmzW24A==
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 4hzT2w4Ty3zxZD
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:04 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 47b62
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:04 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 49c63957ab9b - stable/15 - ufshci: fix SCSI I/O request failure cleanup
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 49c63957ab9b2c41d9de6629371f96a5827ff982
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:04 +0000
Message-Id: <6ac4a868.47b62.20f5a71b@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=49c63957ab9b2c41d9de6629371f96a5827ff982

commit 49c63957ab9b2c41d9de6629371f96a5827ff982
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:35:45 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:55 +0000

    ufshci: fix SCSI I/O request failure cleanup
    
    ufshchi_sim_scsiio() did not check the M_NOWAIT request allocation
    for NULL. The CDB validation and submit failure paths also returned
    without freeing the request.
    
    Fail the CCB when the allocation returns NULL. Free the request on
    every failure path. Mark the CCB as queued right before the submit,
    so the failure paths above do not need to touch that flag.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58656
    
    (cherry picked from commit 360b7c1635ea772d41275f8d1061cef4e131e328)
---
 sys/dev/ufshci/ufshci_sim.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 404f3e99d1e2..234ee3bf7dfa 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -150,6 +150,11 @@ ufshchi_sim_scsiio(struct cam_sim *sim, union ccb *ccb)
 	else
 		req = ufshci_allocate_request_vaddr(payload, payload_len,
 		    M_NOWAIT, ufshci_sim_scsiio_done, ccb);
+	if (req == NULL) {
+		ccb->ccb_h.status = CAM_RESRC_UNAVAIL;
+		xpt_done(ccb);
+		return;
+	}
 
 	req->request_size = sizeof(struct ufshci_cmd_command_upiu);
 	req->response_size = sizeof(struct ufshci_cmd_response_upiu);
@@ -178,8 +183,6 @@ ufshchi_sim_scsiio(struct cam_sim *sim, union ccb *ccb)
 
 	upiu->expected_data_transfer_length = htobe32(payload_len);
 
-	ccb->ccb_h.status |= CAM_SIM_QUEUED;
-
 	if (csio->ccb_h.flags & CAM_CDB_POINTER)
 		cdb = csio->cdb_io.cdb_ptr;
 	else
@@ -187,18 +190,22 @@ ufshchi_sim_scsiio(struct cam_sim *sim, union ccb *ccb)
 
 	if (cdb == NULL || csio->cdb_len > sizeof(upiu->cdb)) {
 		ccb->ccb_h.status = CAM_REQ_INVALID;
+		ufshci_free_request(req);
 		xpt_done(ccb);
 		return;
 	}
 	memcpy(upiu->cdb, cdb, csio->cdb_len);
 
+	ccb->ccb_h.status |= CAM_SIM_QUEUED;
 	error = ufshci_ctrlr_submit_transfer_request(ctrlr, req);
 	if (error == EBUSY) {
 		ccb->ccb_h.status = CAM_SCSI_BUSY;
+		ufshci_free_request(req);
 		xpt_done(ccb);
 		return;
 	} else if (error) {
 		ccb->ccb_h.status = CAM_REQ_INVALID;
+		ufshci_free_request(req);
 		xpt_done(ccb);
 		return;
 	}

From nobody Tue Oct  6 07:51:05 2026
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 4hzT2y2Pk7z6cW3r
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:06 +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 4hzT2x6KhPz4GVB
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:05 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273065;
	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=wKcSm9VKeS0hBv1j586gIQwTgupA0SsX30IK3e5U5kw=;
	b=FradapDwjS5r1QGwjhko5tadI+X36TBl/3ptbbI8DYxYa0uKZQTzI4dLivgxflXohWaghD
	8HWzZ/ueRdUSNBsWoKane2m3KUp+EfUWAoZtDQT7dv2QqJrRUEHMZc66tGDn0+spxaX89E
	2nGzjMejy1vk4QCy4OVcNBVcIWiYrl9qWDlsNUiDikLtMMz7yHvTR71KHCNfqEMDPVVO3n
	4/nlG6wGyrdhyRvQWSoF8c88xCld1DfZS1JAVvQJKoe86yF8MdHADSjTP5BoxmOk3Cky2u
	HWjUJ4kHqmAJVq45u7jhaIhuVYIqHOou7MSqvv6QqTxT8Et5Y2PBECPNoZtk+w==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273065;
	b=p+aoVJ/2+ffaVl7WXnZ181eEsnodgEh9x9gdzc5CXkL73Ffnv1XFcBT+NOculdX6gAqczC
	PQi0L1T7pbNto73NTuk8nRDUkb3RQzlrWGyv0Dry+LbW0Br+DqYKwZJCamS6mM3iHCFm9A
	Hmiy0x+n30FlUPmw1Ppp8QNVwhHAdTgx1sU3+KLfHo/HgeX76hoVeT9eICoGyVia49i8Wj
	wOIeJEMJ5wioA9e3b+gf7ZfO84VqkszarW7cBS3EHgvQ1jIfvTyPZjYv1BpHPDcEan/QSA
	lwmMN51esGGTt+qVV1JPcKNyRIYz+IjQXe1oZKMwvgSAwb1AIkpNAfIFuHZ0XQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273065;
	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=wKcSm9VKeS0hBv1j586gIQwTgupA0SsX30IK3e5U5kw=;
	b=lBWFW0Q4pvQPljIX3CxuBWjwb3B6fNarQydrqUnILQwjidYxR35zXZaqiHtZUpQMqpD3yN
	NyGw1U8cY98l7hKR1lN6XjscY8Is+TbMhSVTy3VYZFq7YK3VzDi1CdNFLtz7+TiVudcQVz
	toAn1Hd0Q3E7SG7BqVfVHNQ0bAsKZ5/2xcvV0CaUZOqoj/yLtIjLok1fcafFt5bgg2+N7Q
	atrJ2Ii3eYURkSM2aaiZw5cvB9J6sJoYCw49izpIlci10D4gBLN9offut0IZNp+WFD3f4P
	kAzplD/8owYLL6EK/LiX8vRFMJoyRSre7RzitoezGzr4VO3U16eMhG86lUY71A==
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 4hzT2x5LJkzxsy
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:05 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 1872d
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:05 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: ad33bd6f67a9 - stable/15 - ufshci: free the lookup path when the periph search times out
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: ad33bd6f67a906e26e96aaf7cfb3448038bc9647
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:05 +0000
Message-Id: <6ac4a869.1872d.32456ebd@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=ad33bd6f67a906e26e96aaf7cfb3448038bc9647

commit ad33bd6f67a906e26e96aaf7cfb3448038bc9647
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:37:00 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:55 +0000

    ufshci: free the lookup path when the periph search times out
    
    ufshci_sim_find_periph() freed the lookup path only when it found the
    periph. The timeout path returned without freeing it and leaked the
    path. Free the path at the single exit instead.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58657
    
    (cherry picked from commit 607189d789ac37fac03025cbf7dfb0d243b7c49e)
---
 sys/dev/ufshci/ufshci_sim.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 234ee3bf7dfa..148840123d13 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -448,10 +448,8 @@ ufshci_sim_find_periph(struct ufshci_controller *ctrlr, uint8_t wlun)
 		periph = cam_periph_find(path, "pass");
 		xpt_path_unlock(path);
 
-		if (periph) {
-			xpt_free_path(path);
+		if (periph)
 			break;
-		}
 
 		if (timeout - ticks < 0) {
 			ufshci_printf(ctrlr,
@@ -462,6 +460,8 @@ ufshci_sim_find_periph(struct ufshci_controller *ctrlr, uint8_t wlun)
 		pause_sbt("ufshci_find_periph", ustosbt(100), 0, C_PREL(1));
 	}
 
+	xpt_free_path(path);
+
 	return periph;
 }
 

From nobody Tue Oct  6 07:51:06 2026
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 4hzT2z2mS8z6cWDh
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:07 +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 4hzT2y74j8z4GS6
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:06 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273067;
	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=06UZxJpLquIrFFfQJSEzpzjg9G2SKWoOFtwGAMmJjp0=;
	b=WvATHx2nkOi0vMK1kuP3Gts/ExshhgcEl910qLBYeWvt/vKMIgqZDz+vmZNF8if2RQU3hS
	Vw3pCO/so3hhrbcXr0Lxl+LUFiWG+efOtB391CiGkwSKGGSL+FSFbNo7n/dpUFbDWKpaqi
	BYB8DKW4PWbACAIzo3tx5GJ5H/xY/Jq6eZAvZkqKiGTnMdKG+x/R/KVdpSshIWJp4E8VWB
	JT+v37GQQVGTU69Pj4Mof7C86VdmtwEwcakjp4wRB9+ok/VkYYp8vPfEixff9dBdJpYnaM
	vJEfyI0MW9BQ8yBuhwUThiG+MThXqoMgRnrRNmhCdkrno/+Zjbm2+4dkVy2chw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273067;
	b=qQ35bk9ElZatJ80lDbXxWSCauNy1zYMInQPJBhMvLG/xShoFh6CFKrdkvgdyn32Xyxq4gi
	f6w20sAGS23+GcAlUAG6TWSZSKZf35ZG/J3CBTH2cREXLdUNgnTE5p8K694nnvvN6xozSj
	zQ6SEyP0x7lecrpPrrCYcP6hcOaWlXtA18SapI5USar2QOy4rz4h42T6I7Acmx3Nd3jUQY
	1omiTq3B6uXthayNdKT19HcybCGuiTN0PsGz0vUWbfSacob8Xu5iRQMxe/zp/FxhbxJZju
	dn7l2E2XnFNfNbL07/M8kFtvV6WfVQ1AKJ6oKpk/xMusYkRn0c+5RJrva7AD6A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273067;
	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=06UZxJpLquIrFFfQJSEzpzjg9G2SKWoOFtwGAMmJjp0=;
	b=ao2e8D9l2cNjHVTeQvytsKw6MLYAUokeWjUEplXVGzeOO61wJ/Knfn9CZanLOKgDl89csp
	jbwwbBvTXH+H4XVJPhsqtbeusUQS4pBkDdET7iuEs1qxTBfqVSDzpcJm0l41UVfb9Tx17w
	NGCFIECQE/NpeiBVRjXs3aIdantFzTeNcVTXOtVk7yYnqSTG59QyUa8Sg8vtpEzgqMSMre
	QQbQQbiPloOLQMYdBo57kONE0L39AU7/k40bYzUMenFOyzUkvEJNyDM4izr7HyRRPbq1y/
	w1kA92gQBeR/YhldC4bB301AItvVAT/6fHKXzG3RAk2PbqkFMknbcjbrw6uURg==
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 4hzT2y63lyzxqp
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:06 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 477ec
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:06 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: c8852e0ac0c1 - stable/15 - ufshci: fix WLUN periph reference counting
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: c8852e0ac0c1b6ce9947e412307fbc7d7659b5c8
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:06 +0000
Message-Id: <6ac4a86a.477ec.25fe14ca@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=c8852e0ac0c1b6ce9947e412307fbc7d7659b5c8

commit c8852e0ac0c1b6ce9947e412307fbc7d7659b5c8
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:39:12 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:56 +0000

    ufshci: fix WLUN periph reference counting
    
    The driver stored the WLUN periph pointer without holding a reference,
    so the pointer went stale when the pass(4) device went away. In
    addition, ufshci_sim_send_ssu() released a reference that it had never
    acquired.
    
    Define a simple ownership rule. ufshci_sim_find_periph() acquires the
    periph and returns it. The cache owns one reference. The controller
    destructor drops it with cam_periph_release() before taking the SIM
    lock, since the release takes the CAM device lock by itself.
    ufshci_sim_send_ssu() acquires its own reference and releases it when
    done. Reuse the cached periph instead of searching again, so the old
    reference is not leaked.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58658
    
    (cherry picked from commit c84c2bf78b39058a339551117323668c933f6162)
---
 sys/dev/ufshci/ufshci_ctrlr.c   |  2 ++
 sys/dev/ufshci/ufshci_dev.c     | 13 ++++++++-----
 sys/dev/ufshci/ufshci_private.h |  1 +
 sys/dev/ufshci/ufshci_sim.c     | 36 +++++++++++++++++++++++++++++++-----
 4 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index cb5549f8e7c9..421aa1e28124 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -448,6 +448,8 @@ ufshci_ctrlr_destruct(struct ufshci_controller *ctrlr, device_t dev)
 		bus_release_resource(ctrlr->dev, SYS_RES_IRQ,
 		    rman_get_rid(ctrlr->res), ctrlr->res);
 
+	ufshci_sim_release_wlun_periph(ctrlr);
+
 	mtx_lock(&ctrlr->sc_mtx);
 
 	ufshci_sim_detach(ctrlr);
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index c53d9b71ba2c..7113834db13a 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -508,12 +508,15 @@ ufshci_dev_init_ufs_power_mode(struct ufshci_controller *ctrlr)
 	if (ctrlr->quirks & UFSHCI_QUIRK_SKIP_WELL_KNOWN_LUNS)
 		return (0);
 
-	ctrlr->ufs_device_wlun_periph = ufshci_sim_find_periph(ctrlr,
-	    UFSHCI_WLUN_UFS_DEVICE);
 	if (ctrlr->ufs_device_wlun_periph == NULL) {
-		ufshci_printf(ctrlr,
-		    "Well-known LUN `UFS Device (0x50)` not found\n");
-		return (0);
+		/* The returned reference is kept by the cached pointer. */
+		ctrlr->ufs_device_wlun_periph = ufshci_sim_find_periph(ctrlr,
+		    UFSHCI_WLUN_UFS_DEVICE);
+		if (ctrlr->ufs_device_wlun_periph == NULL) {
+			ufshci_printf(ctrlr,
+			    "Well-known LUN `UFS Device (0x50)` not found\n");
+			return (0);
+		}
 	}
 
 	ctrlr->ufs_dev.power_mode_supported = true;
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index e7345fc5a410..c738e246e96c 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -448,6 +448,7 @@ uint8_t ufshci_sim_translate_scsi_to_ufs_lun(lun_id_t scsi_lun);
 uint64_t ufshci_sim_translate_ufs_to_scsi_lun(uint8_t ufs_lun);
 int ufshci_sim_attach(struct ufshci_controller *ctrlr);
 void ufshci_sim_detach(struct ufshci_controller *ctrlr);
+void ufshci_sim_release_wlun_periph(struct ufshci_controller *ctrlr);
 struct cam_periph *ufshci_sim_find_periph(struct ufshci_controller *ctrlr,
     uint8_t wlun);
 int ufshci_sim_send_ssu(struct ufshci_controller *ctrlr, bool start,
diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 148840123d13..9d80dd195ad9 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -393,6 +393,20 @@ ufshci_sim_attach(struct ufshci_controller *ctrlr)
 	return (0);
 }
 
+/*
+ * Drop the cached WLUN periph reference. cam_periph_release() takes the
+ * CAM device lock itself, so call this without sc_mtx held: CAM takes
+ * the device lock before the SIM lock, not the other way around.
+ */
+void
+ufshci_sim_release_wlun_periph(struct ufshci_controller *ctrlr)
+{
+	if (ctrlr->ufs_device_wlun_periph != NULL) {
+		cam_periph_release(ctrlr->ufs_device_wlun_periph);
+		ctrlr->ufs_device_wlun_periph = NULL;
+	}
+}
+
 void
 ufshci_sim_detach(struct ufshci_controller *ctrlr)
 {
@@ -425,6 +439,10 @@ ufshci_sim_detach(struct ufshci_controller *ctrlr)
 	}
 }
 
+/*
+ * On success this returns a referenced periph; the caller is responsible
+ * for dropping the reference with cam_periph_release().
+ */
 struct cam_periph *
 ufshci_sim_find_periph(struct ufshci_controller *ctrlr, uint8_t wlun)
 {
@@ -446,6 +464,8 @@ ufshci_sim_find_periph(struct ufshci_controller *ctrlr, uint8_t wlun)
 	while (1) {
 		xpt_path_lock(path);
 		periph = cam_periph_find(path, "pass");
+		if (periph != NULL && cam_periph_acquire(periph) != 0)
+			periph = NULL;
 		xpt_path_unlock(path);
 
 		if (periph)
@@ -474,17 +494,23 @@ ufshci_sim_send_ssu(struct ufshci_controller *ctrlr, bool start,
 	union ccb *ccb;
 	int err;
 
-	/* Acquire periph reference */
-	if (periph && cam_periph_acquire(periph) != 0) {
+	/* Acquire a periph reference for the duration of this call. */
+	if (periph != NULL && cam_periph_acquire(periph) != 0) {
+		/* The cached periph is going away; drop its reference. */
+		cam_periph_release(periph);
+		ctrlr->ufs_device_wlun_periph = NULL;
 		periph = NULL;
 	}
 
 	if (periph == NULL) {
-		/* If the periph device does not exist, it will try to find it
-		 * again */
+		/*
+		 * If the periph device does not exist, try to find it again.
+		 * The reference returned by ufshci_sim_find_periph() is used
+		 * for this call; take an extra one for the cached pointer.
+		 */
 		periph = ufshci_sim_find_periph(ctrlr,
 		    (uint8_t)UFSHCI_WLUN_UFS_DEVICE);
-		if (periph)
+		if (periph != NULL && cam_periph_acquire(periph) == 0)
 			ctrlr->ufs_device_wlun_periph = periph;
 	}
 

From nobody Tue Oct  6 07:51:07 2026
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 4hzT303ZDLz6cWBM
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:08 +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 4hzT300y3sz4GHB
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:08 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273068;
	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=d706M8YebRvjK8UOcUlPpdHedTGsfKIwOclM5FyBafw=;
	b=V/XTR9hXY4LFh6MBevap00QTuaawlAvMU1G4c9Em0aM6ukwQyBlnKOoT/Nf9VxYs0Vq0Zj
	lJc5XG+d8toKJyqpWS7ITIcKpPhzeyC1utSATAkfpoti7e3LU0M9R0PKcMTz3wy/Yo3IvI
	w4wRa1WLdIiMmMhIi1X1OnoGeKeorBYtde6aCz/SFYWSQdHm2IRvsh+7eW0b4TqCW6f/Z0
	Fw9RdBxFsqPWcbXRzKAzZUISzCzna49+I17MphnJ2mMSVzVuNKzCtKs01LCQj2aNJo05kV
	OaoXZdBanTnuB84DDir8GlSb/6m24MIr9covoT4evI40aFFFrGwg8PWYkbjtAw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273068;
	b=J+0Zcem/+h1m1h+spcaFm9O8oHfepNHP06kVcESLQsXJ6gaLPH+kcb6No8ZuIpwmzf4GSK
	RtM7M0jlYZAsZsMQQi2rGenswSNMzXtjZqEk+5n7g8GOpgrfoS8HpaH/boGLIfaCGTuFot
	LVwD+5U/mkGwhSf6Bk4I2GAyCkJ+br22DRmKAQqhv+DHMDdLbxBLXKKBq6O5xu1/uuiZFi
	n2tdtEQ+9FY6CXB4O3RDOb0fJYK63nAlbKCTMsucakOS/AKXN85LW3jE1p7ijc899/cFmB
	BMSxESHd3XqbU4h2L3GJ7i0Kk1ShKnRxNzxQc9/4B+biIpZnwzgF5hvaQXNOkQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273068;
	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=d706M8YebRvjK8UOcUlPpdHedTGsfKIwOclM5FyBafw=;
	b=v+esHEpn9DQeXwPo7N0ghmhq9CtBsuoxizPULe8mJ+7q2lVcTKk+pj8FLNfep6sebFaOoO
	dXOOrx6YtnnfesgQjO1T2vfmo/uJ2juhacFGRgTQp9HospawWU55xxOvT5T++joMCkM9hG
	ehyvSt3j71szxZSHCuTWihzVMRgxXX27WIwmj6xl0EfeccKx5crk5wn8ihGNWErsznWKaX
	qcUvLD9mJhZquLop0+/V50OFRpHmZZw+da/ijs7bWae4mBadHXV8G5xhtKMxo6GUDqNU9o
	9wLU74HJfflGrXL/fZeg043G6G0af40ErGQc//PT7c3eDasgx/XGJJTIrZaLQw==
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 4hzT2z6rHpzx03
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:07 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 1904c
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:07 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 87ececd2dd8f - stable/15 - ufshci: free the correct address when DMA load fails
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 87ececd2dd8f3de45be0010e0bfbd9941d4e29e5
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:07 +0000
Message-Id: <6ac4a86b.1904c.56e9d025@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=87ececd2dd8f3de45be0010e0bfbd9941d4e29e5

commit 87ececd2dd8f3de45be0010e0bfbd9941d4e29e5
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:40:28 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:56 +0000

    ufshci: free the correct address when DMA load fails
    
    The bus_dmamap_load() error paths passed hwq->utrd and req_queue->ucd
    to bus_dmamem_free(), but both pointers are only assigned after a
    successful load and are still NULL at that point. The freshly
    allocated memory was leaked. Free the local buffer instead.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58659
    
    (cherry picked from commit c2186638ff7052e3803f2bdab9ad62cfb69ac7de)
---
 sys/dev/ufshci/ufshci_req_sdb.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_sdb.c b/sys/dev/ufshci/ufshci_req_sdb.c
index 54542f48b32c..cc99b645331c 100644
--- a/sys/dev/ufshci/ufshci_req_sdb.c
+++ b/sys/dev/ufshci/ufshci_req_sdb.c
@@ -112,7 +112,7 @@ ufshci_req_sdb_cmd_desc_construct(struct ufshci_req_queue *req_queue,
 	if (bus_dmamap_load(req_queue->dma_tag_ucd, req_queue->ucdmem_map,
 		ucdmem, ucd_allocsz, ufshci_ucd_map, hwq, 0) != 0) {
 		ufshci_printf(ctrlr, "failed to load cmd desc memory\n");
-		bus_dmamem_free(req_queue->dma_tag_ucd, req_queue->ucd,
+		bus_dmamem_free(req_queue->dma_tag_ucd, ucdmem,
 		    req_queue->ucdmem_map);
 		goto out;
 	}
@@ -222,7 +222,7 @@ ufshci_req_sdb_construct(struct ufshci_controller *ctrlr,
 	if (bus_dmamap_load(hwq->dma_tag_queue, hwq->queuemem_map, queuemem,
 		alloc_size, ufshci_single_map, &queuemem_phys, 0) != 0) {
 		ufshci_printf(ctrlr, "failed to load request queue memory\n");
-		bus_dmamem_free(hwq->dma_tag_queue, hwq->utrd,
+		bus_dmamem_free(hwq->dma_tag_queue, queuemem,
 		    hwq->queuemem_map);
 		goto out;
 	}

From nobody Tue Oct  6 07:51:09 2026
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 4hzT315jgnz6cWHL
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:09 +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 4hzT311bQjz4GYP
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:09 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273069;
	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=kh1Iw9cGBByDBL2gBjSrXvkeYQ3h9Cxq4zZjLiHrOgc=;
	b=qGGSCgI2kAQlii9fomRQJIv7AEM9oWbSPLQURAPCzfDjeftGghp8asbFmu7aIj8AT4sX6h
	pewpWhrLoAgN9AQjs/8Kp3H+7m8tjTvjVKLlTOpuui0diu0rQ4c92qe0sLZ5xLtaVnn6jE
	Ts0QYOlIEUGolWa025NhjTP7XISud5bCvaGOQU5msIIWGjQAbMxKoE/LPIjeJ3FKtgdTCC
	ykxm1tBf95BDczSSJiwPOcwRM++6IhzeUGXqNRvagL7AQFXGK1OQ3O9MvEWxwBpi2pKAAa
	RUkwl4R4WgPQ74Qqfdekb+D26uZzJij/tje9ihmX2kwKCpy1FKyt7uGPww3EVA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273069;
	b=w63KVbcconexJl2Xkt43OUasL3xO5ltyjYzzWANS5zude8rnYrOQwmrzPTOhmcBw/Nz8nO
	i8YpvPFaY1s7fQkqoLTIH8daIxO5M5XWIa/xq7m5juXoOz0BXZGzlIwvLApinwxZMn2yC4
	7oVL7C+RrVCWidZD+i/IO3JJaUmsRXdvsfo0+vqRP5bEIJYiDlds9OuPcvf8viwDDKzyGw
	WQElSqNQF7kyDzvbYteF7ax+boTACWrNn1uCMx2fNoSuiTO8J5HiVBYOVsQlR5LLzNqLND
	r47MxBP9mZD966OKqSV89p1Y84CgANOPhszIsnfkUzE5bF0KGhy4t7/QRdWWhg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273069;
	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=kh1Iw9cGBByDBL2gBjSrXvkeYQ3h9Cxq4zZjLiHrOgc=;
	b=LA2IWZZl4c1uKkFYAPr0E/Av43uwZn9Tj494D6hzDTsBHXm6b4m5RiG2NrnQB8kN2xg4O7
	aGUTv3vAaAP/XQSO0oWiSGr6I8Y/7EJ+bnP21a1pgZS13207Xl4oQlXs91c6/Hbpg2fO9K
	3Vzx0R57q+noMcOCDtXXeNYbvTGoOKPIWHiD5C7qXJnhEtlhiv/pExdzZfPWl/NwsEWahe
	b/haxRECmKBcvLeq2mENNG18DTmjobo+k2IvDoUovRN2RKwpX874a9hICRmnVIvGilXXgE
	fWhbIrzAWtCd5MQPOTAHyCB3057VN8uUu4PG7r4Z3UMTKrxKB0qi7x+myPP26A==
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 4hzT310XvMzx04
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:09 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 19051
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:09 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 6b85b8e923ae - stable/15 - ufshci: tolerate partially constructed queues in SDB teardown
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 6b85b8e923ae55ca57c15eb46103a2a35cdc3ef4
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:09 +0000
Message-Id: <6ac4a86d.19051.c44ae2d@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=6b85b8e923ae55ca57c15eb46103a2a35cdc3ef4

commit 6b85b8e923ae55ca57c15eb46103a2a35cdc3ef4
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:42:16 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:57 +0000

    ufshci: tolerate partially constructed queues in SDB teardown
    
    When attach fails, ufshci_req_sdb_destroy() runs on a partially
    constructed queue, and it runs twice: once from the construct error
    path and once from the controller destructor.
    
    Make that safe: NULL-check each resource before freeing it and clear
    the pointer afterwards, so a second call finds nothing to do. The
    construct error label no longer frees the command descriptors itself,
    which fixes a double free of ucd_bus_addr. Also destroy the payload
    DMA tag, which was previously leaked. Drop the mtx_initialized()
    checks: the locks are always set up before any failure path can reach
    the destroy.
    
    Attach can also fail before the queues were constructed at all. The
    destructor would then call a NULL qops.destroy pointer, so skip the
    destroy when the queue was never set up.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58660
    
    (cherry picked from commit 24c2ead33b44ca5db2605b462c935236f3a73443)
---
 sys/dev/ufshci/ufshci_req_queue.c |  8 +++++++
 sys/dev/ufshci/ufshci_req_sdb.c   | 44 +++++++++++++++++++++++----------------
 2 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index 371b9c520979..d8d86070c18c 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -72,6 +72,10 @@ ufshci_utmr_req_queue_construct(struct ufshci_controller *ctrlr)
 void
 ufshci_utmr_req_queue_destroy(struct ufshci_controller *ctrlr)
 {
+	/* Attach may fail before the queue ops are set up. */
+	if (ctrlr->task_mgmt_req_queue.qops.destroy == NULL)
+		return;
+
 	ctrlr->task_mgmt_req_queue.qops.destroy(ctrlr,
 	    &ctrlr->task_mgmt_req_queue);
 }
@@ -114,6 +118,10 @@ ufshci_utr_req_queue_construct(struct ufshci_controller *ctrlr)
 void
 ufshci_utr_req_queue_destroy(struct ufshci_controller *ctrlr)
 {
+	/* Attach may fail before the queue ops are set up. */
+	if (ctrlr->transfer_req_queue.qops.destroy == NULL)
+		return;
+
 	ctrlr->transfer_req_queue.qops.destroy(ctrlr,
 	    &ctrlr->transfer_req_queue);
 }
diff --git a/sys/dev/ufshci/ufshci_req_sdb.c b/sys/dev/ufshci/ufshci_req_sdb.c
index cc99b645331c..c7bf033ddc37 100644
--- a/sys/dev/ufshci/ufshci_req_sdb.c
+++ b/sys/dev/ufshci/ufshci_req_sdb.c
@@ -22,10 +22,16 @@ ufshci_req_sdb_cmd_desc_destroy(struct ufshci_req_queue *req_queue)
 	struct ufshci_tracker *tr;
 	int i;
 
-	for (i = 0; i < req_queue->num_trackers; i++) {
-		tr = hwq->act_tr[i];
-		bus_dmamap_destroy(req_queue->dma_tag_payload,
-		    tr->payload_dma_map);
+	if (req_queue->dma_tag_payload != NULL) {
+		for (i = 0; i < req_queue->num_trackers; i++) {
+			tr = hwq->act_tr[i];
+			if (tr->payload_dma_map != NULL)
+				bus_dmamap_destroy(req_queue->dma_tag_payload,
+				    tr->payload_dma_map);
+		}
+
+		bus_dma_tag_destroy(req_queue->dma_tag_payload);
+		req_queue->dma_tag_payload = NULL;
 	}
 
 	if (req_queue->ucd) {
@@ -42,6 +48,7 @@ ufshci_req_sdb_cmd_desc_destroy(struct ufshci_req_queue *req_queue)
 	}
 
 	free(req_queue->hwq->ucd_bus_addr, M_UFSHCI);
+	req_queue->hwq->ucd_bus_addr = NULL;
 }
 
 static void
@@ -145,7 +152,6 @@ ufshci_req_sdb_cmd_desc_construct(struct ufshci_req_queue *req_queue,
 
 	return (0);
 out:
-	ufshci_req_sdb_cmd_desc_destroy(req_queue);
 	return (ENOMEM);
 }
 
@@ -297,24 +303,27 @@ void
 ufshci_req_sdb_destroy(struct ufshci_controller *ctrlr,
     struct ufshci_req_queue *req_queue)
 {
-	struct ufshci_hw_queue *hwq = &req_queue->hwq[UFSHCI_SDB_Q];
-	struct ufshci_tracker *tr;
+	struct ufshci_hw_queue *hwq;
 	int i;
 
+	if (req_queue->hwq == NULL)
+		return;
+
+	hwq = &req_queue->hwq[UFSHCI_SDB_Q];
+
 	mtx_lock(&hwq->recovery_lock);
 	hwq->timer_armed = false;
 	mtx_unlock(&hwq->recovery_lock);
 	callout_drain(&hwq->timer);
 
-	if (!req_queue->is_task_mgmt)
-		ufshci_req_sdb_cmd_desc_destroy(&ctrlr->transfer_req_queue);
+	if (hwq->act_tr != NULL) {
+		if (!req_queue->is_task_mgmt)
+			ufshci_req_sdb_cmd_desc_destroy(
+			    &ctrlr->transfer_req_queue);
 
-	for (i = 0; i < req_queue->num_trackers; i++) {
-		tr = hwq->act_tr[i];
-		free(tr, M_UFSHCI);
-	}
+		for (i = 0; i < req_queue->num_trackers; i++)
+			free(hwq->act_tr[i], M_UFSHCI);
 
-	if (hwq->act_tr) {
 		free(hwq->act_tr, M_UFSHCI);
 		hwq->act_tr = NULL;
 	}
@@ -331,12 +340,11 @@ ufshci_req_sdb_destroy(struct ufshci_controller *ctrlr,
 		hwq->dma_tag_queue = NULL;
 	}
 
-	if (mtx_initialized(&hwq->recovery_lock))
-		mtx_destroy(&hwq->recovery_lock);
-	if (mtx_initialized(&hwq->qlock))
-		mtx_destroy(&hwq->qlock);
+	mtx_destroy(&hwq->recovery_lock);
+	mtx_destroy(&hwq->qlock);
 
 	free(req_queue->hwq, M_UFSHCI);
+	req_queue->hwq = NULL;
 }
 
 struct ufshci_hw_queue *

From nobody Tue Oct  6 07:51:10 2026
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 4hzT324vSTz6cW8p
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:10 +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 4hzT322vPTz4Gq5
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:10 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273070;
	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=pZ+Zy4uT+FAQMgVTwFR5u5rqfEIqve44CtxTBQyz9Ss=;
	b=EtjqaRpNQ//3HDHQRIWBo/HUncyohnqkUyaic5RtyovVQEBPhQg2GDeLbUE/ZpQvrG/AB1
	GVHidkHgS3ar8qFOPlLTu/rVadK6XKUufW9O++YOQvXsXsQZHHlSDzfykHSbrBmO2pePyi
	kgd9fy7xijYyFmVNGluKNaKdJQ75uShmPysOZVVzgU8Vuc7MgqfpAR60EyIwOaGEhbf8Eu
	cwKyP2bwZuj9/8p5UWnQuvxnHGe5WpdIKavLKdLnRdqE9vbbMCDI4kpk+fOLtgfx5Z1lj5
	Idc4go8rDEHtYPa3cav9+y0EbDnodOuJ2ZIuJ8vrRutnF8jA0YgqUKBGQksrLw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273070;
	b=ktdHdh9toawT6kdl/geXEO+E8eQchK33GGtmDONcuZrkNemd8d+qJZSl16QdJr+CtMiQ0k
	zL3+yGk1EMJGrCV9k7UbHmZSGmZVbdWcWyzPgwoHJakMN26miW2qbFxg8kGvG6ZmVsMO05
	kw3e1Vr/YSj1wuQXMEqaVwgFRO5SQhlCQBYmiBHYJ+TLUXGYKHzeIYFpvZh7jlk+9ilBgb
	pDBqMVKVSRia1u71bjFZEu6ZCaO3Btdt3QWgxy/kiAEHdmj9Vq/9ed8mv76tbYLyFmC1zL
	axRMzaQeN7WrDkR6UOwyGFLi2fNsjWXB4qcXHp2PjR8F3ToNszfFWdjE9C++Qg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273070;
	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=pZ+Zy4uT+FAQMgVTwFR5u5rqfEIqve44CtxTBQyz9Ss=;
	b=m7MOXhGvmRGhapvJQMs506lZlTKGJS+15RgkpvsVWR0SwVZDm9tG8ljq8vwzKQaZkKHBCw
	tREZ4ZmfZwMri0VTbiNpgQCxh6FyMbXXuRLpmC8MbmxfGNbOtTdAEJSGHW3ZZxyrtiSF+k
	Ma5SyauxruNaQWSm7ZAeF4cgoto6yP4VELoRZSPZLlJ0YVdDIkEFEn+JTMLHaCaT4qdWMq
	cpr4pJTX71HaJTN34jGHH8haDKsa8P5jc15WaRS5cCgZaIoaHTAOa9wvGVdu1pSM2b/s4o
	5qcy1KVe8uvCNe3xwERorAyYnNEh4MhNs+q41eusPZJRXcOaijg6gDcWcOGXRQ==
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 4hzT321b1Zzxp9
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:10 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18521
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:10 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: e0ce55de9adc - stable/15 - ufshci: check SDB queue allocations for failure
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: e0ce55de9adcff53dfb9e614f623d3873d095dc7
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:10 +0000
Message-Id: <6ac4a86e.18521.1f3b6b7f@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=e0ce55de9adcff53dfb9e614f623d3873d095dc7

commit e0ce55de9adcff53dfb9e614f623d3873d095dc7
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:43:34 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:57 +0000

    ufshci: check SDB queue allocations for failure
    
    The hardware queue and ucd_bus_addr allocations use M_NOWAIT but were
    used without a NULL check, and the payload bus_dmamap_create() return
    value was ignored, so a failed allocation was only discovered by
    faulting on it later. Fail the construction instead. The teardown
    path handles the partially constructed queue.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58661
    
    (cherry picked from commit 25a61a7927c8b1a516e6e095a6f53031a8636fde)
---
 sys/dev/ufshci/ufshci_req_sdb.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/sys/dev/ufshci/ufshci_req_sdb.c b/sys/dev/ufshci/ufshci_req_sdb.c
index c7bf033ddc37..9f3a2a866ae0 100644
--- a/sys/dev/ufshci/ufshci_req_sdb.c
+++ b/sys/dev/ufshci/ufshci_req_sdb.c
@@ -86,6 +86,8 @@ ufshci_req_sdb_cmd_desc_construct(struct ufshci_req_queue *req_queue,
 	req_queue->hwq->ucd_bus_addr = malloc(sizeof(bus_addr_t) *
 		req_queue->num_trackers,
 	    M_UFSHCI, M_ZERO | M_NOWAIT);
+	if (req_queue->hwq->ucd_bus_addr == NULL)
+		return (ENOMEM);
 
 	/*
 	 * Each component must be page aligned, and individual PRP lists
@@ -141,8 +143,13 @@ ufshci_req_sdb_cmd_desc_construct(struct ufshci_req_queue *req_queue,
 	}
 
 	for (i = 0; i < req_queue->num_trackers; i++) {
-		bus_dmamap_create(req_queue->dma_tag_payload, 0,
+		error = bus_dmamap_create(req_queue->dma_tag_payload, 0,
 		    &hwq->act_tr[i]->payload_dma_map);
+		if (error != 0) {
+			ufshci_printf(ctrlr,
+			    "request payload map create failed %d\n", error);
+			goto out;
+		}
 
 		hwq->act_tr[i]->ucd = (struct ufshci_utp_cmd_desc *)ucdmem;
 		hwq->act_tr[i]->ucd_bus_addr = hwq->ucd_bus_addr[i];
@@ -181,6 +188,8 @@ ufshci_req_sdb_construct(struct ufshci_controller *ctrlr,
 	/* Single Doorbell mode uses only one queue. (UFSHCI_SDB_Q = 0) */
 	req_queue->hwq = malloc(sizeof(struct ufshci_hw_queue), M_UFSHCI,
 	    M_ZERO | M_NOWAIT);
+	if (req_queue->hwq == NULL)
+		return (ENOMEM);
 	hwq = &req_queue->hwq[UFSHCI_SDB_Q];
 	hwq->num_entries = req_queue->num_entries;
 	hwq->num_trackers = req_queue->num_trackers;

From nobody Tue Oct  6 07:51:11 2026
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 4hzT334vJ7z6cWDr
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:11 +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 4hzT333Y30z4GWp
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:11 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273071;
	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=d+yFBpEZcn8ODALRmrXxFuI8WG9AX+ZixD8SvBui1qc=;
	b=GuZhO35e1ZcIJg+GU2nlIFC7qUWKJtk84xXtsz36s0K0YlleTGUV4/s+EiKYEFam8k0Cvd
	7n5Iwd7bsno5jeAoopC0xAEG0qrfkqAWBg9o14ZX7zay8QxP29rrMsmoCivJhpiHvmnJF3
	ViCSa+MSXEL39o7QvSyKY6ix/l77Eg7elMTaBnCWu6QuYyVBXpNOZInC1SSAWPH1q/ZqeO
	gIcV6a2Q6Obve1Mz0dSepv0KYqgvTbcJIKcEEHsoOPfGuPt8ltdRJYbexGQeK2gS0USuhU
	sC1oGYRlwqdhe29ZRpwXQjOSvY4KRif3bRg22SLi7paLzuoduR+lCrwMtA3iMg==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273071;
	b=c6gZffqJS7AiWihvkALFB3PjN40bwgCnt9R5uYvfMMsc9JuPHZjzZOVEAYexOwJugYgm8m
	qEmLg1tBnmZRIWZ3deC4gTMQUd0yUjpHDe4fyh3Q8hIditwsbHgukNNxZQoby60veyLxRJ
	PRhWvGnodR/EWx8nSufWZ8bc9/wbpa1TJEkTBCRPeqzz6bpmpjNL5mzoCXVhx+sW2MiwNq
	NwbTQfqjBfs5eDJEPlN4ASnKmGSuh7zcEpabVHbxYkV+FBv8M7XQ8oUQp2SanCwJuwzvZz
	A9jz0k4bC6LQossgGz1BHWLkfbFOzogiiMsR0VCa/P+jNrw5UorLS/oDOq9dZQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273071;
	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=d+yFBpEZcn8ODALRmrXxFuI8WG9AX+ZixD8SvBui1qc=;
	b=NmnlaWALWHomM8fKUIUSDpRKGbtcctR3uG47ap2/Mq5SVvWBcRIPCgUnmC8tdEhbrzjg5G
	MOPbtf+KvXrh1CbykMrnRFKd+DkjmU0t8972e6xZ1CNzRKedCu7PzbvR6Dv25WB53cv2Ko
	lW/pzKK7onzELAV4vqItUdc3GnpGaEEcLoh8ymTsvOw1VmeWobk7BYD+GOshuSGne0B4Ed
	z4VSmwlx1/h5w/AT+wuNbVOeLGtCmnkB6EWdvnnOOToVgL6/OLEWRyI3wxzk0cSEX6Ht1U
	V/ijjCD07Ezl5NT9YbEgsAVyd/KR3SxeKbRgeLV54WE0f+oeKIC9iYHaoa2tQw==
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 4hzT3326Zjzxt3
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:11 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 475bc
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:11 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 5f7c2adceb5c - stable/15 - ufshci: do not free the devq twice on SIM attach failure
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 5f7c2adceb5c3df28a24e8c6f0287f4a5b640263
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:11 +0000
Message-Id: <6ac4a86f.475bc.5f5756cd@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=5f7c2adceb5c3df28a24e8c6f0287f4a5b640263

commit 5f7c2adceb5c3df28a24e8c6f0287f4a5b640263
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:44:35 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:58 +0000

    ufshci: do not free the devq twice on SIM attach failure
    
    cam_sim_free() with free_devq set already frees the devq, so the
    following cam_simq_free() call on the xpt_bus_register() and
    xpt_create_path() failure paths was a double free. Also clear
    ctrlr->ufshci_sim so a later ufshci_sim_detach() does not operate on
    the freed SIM.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58662
    
    (cherry picked from commit c71705a0830497c080579896b4aa2a5ce2513f1c)
---
 sys/dev/ufshci/ufshci_sim.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 9d80dd195ad9..4a106a6c7b8a 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -371,8 +371,9 @@ ufshci_sim_attach(struct ufshci_controller *ctrlr)
 
 	mtx_lock(&ctrlr->sc_mtx);
 	if (xpt_bus_register(ctrlr->ufshci_sim, ctrlr->dev, 0) != CAM_SUCCESS) {
+		/* cam_sim_free() with free_devq also frees the devq. */
 		cam_sim_free(ctrlr->ufshci_sim, /*free_devq*/ TRUE);
-		cam_simq_free(devq);
+		ctrlr->ufshci_sim = NULL;
 		mtx_unlock(&ctrlr->sc_mtx);
 		printf("Failed to create a bus\n");
 		return (ENOMEM);
@@ -383,7 +384,7 @@ ufshci_sim_attach(struct ufshci_controller *ctrlr)
 		CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
 		xpt_bus_deregister(cam_sim_path(ctrlr->ufshci_sim));
 		cam_sim_free(ctrlr->ufshci_sim, /*free_devq*/ TRUE);
-		cam_simq_free(devq);
+		ctrlr->ufshci_sim = NULL;
 		mtx_unlock(&ctrlr->sc_mtx);
 		printf("Failed to create a path\n");
 		return (ENOMEM);

From nobody Tue Oct  6 07:51:12 2026
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 4hzT346SRwz6cW8v
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:12 +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 4hzT344TtDz4Gbx
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:12 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273072;
	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=f4UZiOvYmA7MUWttPOoWb0gb1FuvNuk1eu2+a+wGOM0=;
	b=ip/b1FkBninBv/UuunMdE/cbjjWPQyZJ6vj+9eeNcWdSpGNqZv4PwwNQnZVBt6qQEQXug5
	Mfix7AWEJ8D6WjAELsgpgog9cVAGzz9I1UsTmWuE3Ni3XBcx4lZh1CwzbpFMKT3sEo4ulg
	zm0/sktWcYrek09kIW/vX9/mqH5UciuuxCyQ7CcblTKe9lXchee+rhn/HL2fVTbCtOnlIa
	YtJ1MS8tawFGEJ2eknYKM4hcDM0ntqy8qrcEeKj3nRiIIaZ8H2p/+/a6rIIBOgJSps94fO
	CUqSfqFO6U/ZnCzJxtsZpIZ1Gq1uPh/1wr/JiBckWtzbwnyh9VV2OYQNYwK4eQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273072;
	b=BRFowL5AlE7kcO+3NkomvX8jB0NN8pnOIUO241i9Z22/scyriXjElSuyJo6NeO0Ujiobjq
	X8uGqoNdGiBfOID8XDeDV6T963N1T11L/A5aEkXocuelTFqy8qB5SIOaqGfSTUVfquFxcj
	ZSD6aQ1X/2YLLhk2ZsKCEgMfn3b0o82UCTBdky+g/wbjiudA5B3gdvUz2CLdX1WpvAzzLU
	DO7yg4CNaMoD0BEhn/gy4HIS2ceao6oRpM4YLg/p3AF1I6WYOHlccPkceQ91qES4P6wk3G
	mubGE+0kMA3IQd6dupbng+DWgGePu1LRk2XrIlFyrPx9hGh/AlPj/quleobKsw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273072;
	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=f4UZiOvYmA7MUWttPOoWb0gb1FuvNuk1eu2+a+wGOM0=;
	b=Sl4veP3M7DhmxqR/F7Q3JVXRsXe+jkL1ivqgSVHfERDEa+LsVm4o8/o/TcrQ+KzD4iTSFP
	POMfPCR/F8ocVdeH1wOlFlGED1W/F542XFeXaZcWf3riLUsyv3h3WUoQRA4QGACKP5SHYy
	Dnb+e0YP/bO5Nu5l8vryHbMQqebuipLn8k8iZb/NEVLect6UBl5FTMGpwm1UdGP/2ukBkT
	yAoB1QEUBSDhSiQ8GdD4xf/AqT5LXa+4b+/ToEEcWbh26D1GnyUnng92FZ18Um5Bmru2z6
	FaBRO8Cl+SZBxQjCtaC2pxGKtxlT490K2rdnSNZHo0Y1fBRj8yz5/FkyB6/j7w==
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 4hzT342wZhzxcM
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:12 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 47731
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:12 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 75180cf2ec09 - stable/15 - ufshci: initialize alloc_units before the dedicated-buffer scan
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 75180cf2ec09248c501ccfd9923dd1e2e5726b65
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:12 +0000
Message-Id: <6ac4a870.47731.341b0bff@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=75180cf2ec09248c501ccfd9923dd1e2e5726b65

commit 75180cf2ec09248c501ccfd9923dd1e2e5726b65
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:45:49 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:58 +0000

    ufshci: initialize alloc_units before the dedicated-buffer scan
    
    If every unit descriptor read failed in the LU-dedicated WriteBooster
    scan, alloc_units was used uninitialized. Start it at zero so that case
    is treated as a zero-sized buffer and WriteBooster is disabled.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58663
    
    (cherry picked from commit 456ab423dddc0ce07787b21fcb79426abc7b436e)
---
 sys/dev/ufshci/ufshci_dev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 7113834db13a..db7a8c564a29 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -745,7 +745,7 @@ ufshci_dev_config_write_booster(struct ufshci_controller *ctrlr)
 {
 	struct ufshci_device *dev = &ctrlr->ufs_dev;
 	uint32_t extended_ufs_feature_support;
-	uint32_t alloc_units;
+	uint32_t alloc_units = 0;
 	struct ufshci_unit_descriptor unit_desc;
 	uint8_t lun;
 	bool is_life_time_left;

From nobody Tue Oct  6 07:51:13 2026
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 4hzT355qZgz6cW8x
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:13 +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 4hzT354gW3z4Gqc
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:13 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273073;
	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=DAfSxX9hD7Q8VsYVQ7rj+Gmfe6MRscloGRywoelg7jc=;
	b=faq00cOXE4KMVrKLgAT79C+duJfnNuRLyxPnL6DDwW4h0irbfbRXX2s6WVCozHt392G4z2
	dnmeC4yetl9fibVduAFwKrEUyzPDk1aI1T48yY6qYqzSRPy1cbqb6iBEmLETkfsVnRl5Q4
	n34yiXsOXpD7ijX6qQ7LjAkvoJ4/1zqJA/10UuaFT/tWLeud+eZlwkGSFlhBaond4zC6Mn
	9L7fzcD3cDC3HHQuOu1C9xYiMjz4iqWxCS8t0GN1Jdaj0nlYt20yKqwcM8p9M0KbLO6Gv8
	XlF05n43q7/tJJ8hb3Qc1UHT1qQVInyAgkDSuy+Y+U+7B3HfmacwLSqghmTtog==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273073;
	b=m4esqUoxfDwMH3PtXJ2JZTJmb2PZP8/++M72WH3JW1eHeJ2Qj3rfX8pI3f0ZkXfXJGI2Lk
	ksr8K/slKjlDZEcATzPxsCwyCMlKhC/X1tO3w+US1DUngayftRfFs9DlrUGkiB2CH+5ab+
	sgjEiUUjjW8dBpNXSsRmCazaM6Iqgv6t4+8ILh+aE7JL+XCII+PlegM0YjsB8Xm3sYHz4H
	jHuKuky9pm+h3iMgYhKpB29D4w62GQW5Whi/QzAzj6YwTCWh+/R91WmwDiQWgo2crj53rQ
	uqZHHZypSMN6gBvvo4LZiT9ukR6VVSKetH2iPRFJoO8gcjVV3NacOA6Z9pWB/g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273073;
	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=DAfSxX9hD7Q8VsYVQ7rj+Gmfe6MRscloGRywoelg7jc=;
	b=V2+eIzM6z9IZ68NgN4lSyhn16nw5cg6rBvIeNabn+XAXQNNBqVR3WxPWub3+wBPVxJgqYb
	gtfpmlzig0ToC9Q/XZqqwXF1YnI06cLfIkTDrsfoieivR9Ik8kkzKUYTgPLijCl13GhIDm
	iLy58J1wMtQ+ItQE3be1dRT+/9fsdDdCdqD5otWUz/F/WrobSwEp7ZLnEVS+x0IX44izE8
	4L4I7a272leuxfBG/vntuCG5qoDzIpkeR4nosa/45ir2ooA+f9umqm8vva9YTrf/UCY4m5
	HT8psUaI+rdILqFfgTYUk7TI4fjYudj/Sd26YTn1O5fUxgHfG1//JLOGJo018w==
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 4hzT353jbpzwwX
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:13 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18e06
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:13 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 2e2f523ae699 - stable/15 - ufshci: byte-swap big-endian UPIU fields
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 2e2f523ae6999d39e07dfebffd06f942fe8a13b8
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:13 +0000
Message-Id: <6ac4a871.18e06.51ce0f19@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=2e2f523ae6999d39e07dfebffd06f942fe8a13b8

commit 2e2f523ae6999d39e07dfebffd06f942fe8a13b8
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:46:50 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:59 +0000

    ufshci: byte-swap big-endian UPIU fields
    
    The UPIU wire fields are big-endian. The task management and query
    builders wrote host-order values into them. The completion paths also
    read the results back without conversion. On a little-endian host an
    ABORT_TASK carried a swapped task tag and LUN, a query carried a
    swapped length, and attribute reads returned swapped values. Tolerant
    devices masked most of the damage.
    
    Convert with htobe*/be*toh at the wire boundary, as ufshci_sim.c
    already does for its fields.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58664
    
    (cherry picked from commit 50a00f10d830119ed54f5bce1b34533f3a09325e)
---
 sys/dev/ufshci/ufshci_ctrlr_cmd.c | 10 +++++-----
 sys/dev/ufshci/ufshci_dev.c       |  2 +-
 sys/dev/ufshci/ufshci_req_queue.c | 13 +++++++------
 3 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr_cmd.c b/sys/dev/ufshci/ufshci_ctrlr_cmd.c
index 2e85cfa4b5b0..faeb6f98c942 100644
--- a/sys/dev/ufshci/ufshci_ctrlr_cmd.c
+++ b/sys/dev/ufshci/ufshci_ctrlr_cmd.c
@@ -29,9 +29,9 @@ ufshci_ctrlr_cmd_send_task_mgmt_request(struct ufshci_controller *ctrlr,
 	    UFSHCI_UPIU_TRANSACTION_CODE_TASK_MANAGEMENT_REQUEST;
 	upiu->header.lun = lun;
 	upiu->header.ext_iid_or_function = function;
-	upiu->input_param1 = lun;
-	upiu->input_param2 = task_tag;
-	upiu->input_param3 = iid;
+	upiu->input_param1 = htobe32(lun);
+	upiu->input_param2 = htobe32(task_tag);
+	upiu->input_param3 = htobe32(iid);
 
 	error = ufshci_ctrlr_submit_task_mgmt_request(ctrlr, req);
 	if (error)
@@ -87,8 +87,8 @@ ufshci_ctrlr_cmd_send_query_request(struct ufshci_controller *ctrlr,
 	upiu->idn = param.type;
 	upiu->index = param.index;
 	upiu->selector = param.selector;
-	upiu->value_64 = param.value;
-	upiu->length = param.desc_size;
+	upiu->value_64 = htobe64(param.value);
+	upiu->length = htobe16(param.desc_size);
 
 	error = ufshci_ctrlr_submit_transfer_request(ctrlr, req);
 	if (error)
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index db7a8c564a29..454572f966d5 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -192,7 +192,7 @@ ufshci_dev_read_attribute(struct ufshci_controller *ctrlr,
 		return (ENXIO);
 	}
 
-	*value = status.cpl.response_upiu.query_response_upiu.value_64;
+	*value = be64toh(status.cpl.response_upiu.query_response_upiu.value_64);
 
 	return (0);
 }
diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index d8d86070c18c..db96d13fad24 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -484,6 +484,7 @@ ufshci_abort_complete(void *arg, const struct ufshci_completion *status,
     bool error)
 {
 	struct ufshci_tracker *tr = arg;
+	uint32_t output_param1;
 
 	/*
 	 * We still need to check the active tracker array, to cover race where
@@ -508,12 +509,12 @@ ufshci_abort_complete(void *arg, const struct ufshci_completion *status,
 		ufshci_req_queue_manual_complete_tracker(tr,
 		    UFSHCI_DESC_ABORTED, UFSHCI_RESPONSE_CODE_GENERAL_FAILURE);
 
-		if ((status->response_upiu.task_mgmt_response_upiu
-			    .output_param1 ==
-			UFSHCI_TASK_MGMT_SERVICE_RESPONSE_FUNCTION_COMPLETE) ||
-		    (status->response_upiu.task_mgmt_response_upiu
-			    .output_param1 ==
-			UFSHCI_TASK_MGMT_SERVICE_RESPONSE_FUNCTION_SUCCEEDED)) {
+		output_param1 = be32toh(
+		    status->response_upiu.task_mgmt_response_upiu.output_param1);
+		if (output_param1 ==
+			UFSHCI_TASK_MGMT_SERVICE_RESPONSE_FUNCTION_COMPLETE ||
+		    output_param1 ==
+			UFSHCI_TASK_MGMT_SERVICE_RESPONSE_FUNCTION_SUCCEEDED) {
 			ufshci_printf(tr->hwq->ctrlr,
 			    "Warning: the abort task request completed \
 			    successfully, but the original task is still incomplete.");

From nobody Tue Oct  6 07:51:14 2026
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 4hzT3731Twz6cWBd
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:15 +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 4hzT36626Zz4GQq
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:14 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273074;
	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=yxJ9+mnUs+RJbSIteAUr1uSYTzdIIP1EAzLEex2Ag0o=;
	b=XZp8MrtK6o1oGMtgfzcyodSVFHrOx8XPAdn27OsWZmPSllRmLYHUOUZjm/1sSK4dpNVMp9
	ZmCGCbqcvnl5PLSpp+c0P40etOqup0zC2HOxwu0vAGWFVRIvpJ2tQZy0Dkq+myyDeam3o4
	t4S3vUJTeRBCfVeE2qAC/Wc58+0QXuiZB/dhKv7WBlxkB3TShzgO6nNFJ2rjHjkh0IomjK
	QGinlekpLC+AO9LIWcRG7WCk8nxoZg/qXzEkK+As2RF7M2wG6kYXq9HIpkNBcIA9WPTnsq
	Ss8nmuI3sIDAvyp2HpvHjlgD8PNxAMrSJu8F0R4mGRCRTEo50mqDLKkHr7l7nA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273074;
	b=l1keJvHsrTlbyz9TyfwvXUa+iEmq79vDKW0sewcJld5QcUxWOO/fHUCTZmJw0GTbEJ2InJ
	rC/xdOwzugQs3Ka2gXgt29/RP7O8rwh9Hro6+NsAgv/Owyd1EKa9QGo0Cy7AJuB7VsGP4h
	Em9jv2MESYG3mrZZs/PyJK5iIx9UkV/VSlSpkbueHjvML+IicRT7rT0hfTkmVmpFU8+BVX
	Wiy6tOudeX9TB18o135OKYnVc1SbzM9F3LtkjpuJhL7XryZiGtfz9NsjKbBwGFHVCmq6M2
	y0WFzeOGKEJnnqhd35jRvsdDUZJevSqGAJDQGXK8vKfO94u0oJRWhDTfQEd4sA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273074;
	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=yxJ9+mnUs+RJbSIteAUr1uSYTzdIIP1EAzLEex2Ag0o=;
	b=TYCV6FOSPzI/Wn7qJ+L5v/d4Un5QybKTt6DKB4Mw8OeKYW8LCz8CzAVtlUxwtNOsD1zP/K
	D4qYeqUYkkDEYKpwrH8ZvuiOE1jJkuU9dBO2DWhsmcqMwG/G8Nh7VJazLll+PTZ9kyuY3s
	4dDPEMuKiJvb+mgnbsa/edQ4N1Yu5zlrKp7gPwTVcxEvpHLqXIPgc+nEqtU8xmAzn0+R0D
	1ImgYCn7t1mRgypI+DPKnBpsahV7vIQIGmxszKGPYTVqvoLxgG2SLBPOlBFz7fAvkZ6eGo
	EeW6p4r4nUHAvERwBUvtq25d6d/QNhkg9agGroYNp6x9DeDJwMzbzo2DBgRA+g==
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 4hzT364RrkzxKV
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:14 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18631
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:14 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: b6e20a5ae8a1 - stable/15 - ufshci: initialize desc_size for non-descriptor query requests
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: b6e20a5ae8a1782749495e4caa018e2e2cb26123
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:14 +0000
Message-Id: <6ac4a872.18631.6b1f4e14@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=b6e20a5ae8a1782749495e4caa018e2e2cb26123

commit b6e20a5ae8a1782749495e4caa018e2e2cb26123
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:47:38 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:59 +0000

    ufshci: initialize desc_size for non-descriptor query requests
    
    The flag and attribute query builders left param.desc_size
    uninitialized, so stack garbage was sent as the query UPIU length
    field. Devices generally ignore the length for these opcodes, which
    hid the bug. Zero it explicitly.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58665
    
    (cherry picked from commit af00e00f23a1d427d96fecbb39e276fc2d7dfde1)
---
 sys/dev/ufshci/ufshci_dev.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 454572f966d5..18546d7120c0 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -86,6 +86,7 @@ ufshci_dev_read_flag(struct ufshci_controller *ctrlr,
 	param.index = 0;
 	param.selector = 0;
 	param.value = 0;
+	param.desc_size = 0;
 
 	status.done = 0;
 	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
@@ -118,6 +119,7 @@ ufshci_dev_set_flag(struct ufshci_controller *ctrlr,
 	param.index = 0;
 	param.selector = 0;
 	param.value = 0;
+	param.desc_size = 0;
 
 	status.done = 0;
 	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
@@ -148,6 +150,7 @@ ufshci_dev_clear_flag(struct ufshci_controller *ctrlr,
 	param.index = 0;
 	param.selector = 0;
 	param.value = 0;
+	param.desc_size = 0;
 
 	status.done = 0;
 	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
@@ -179,6 +182,7 @@ ufshci_dev_read_attribute(struct ufshci_controller *ctrlr,
 	param.index = index;
 	param.selector = selector;
 	param.value = 0;
+	param.desc_size = 0;
 
 	status.done = 0;
 	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
@@ -212,6 +216,7 @@ ufshci_dev_write_attribute(struct ufshci_controller *ctrlr,
 	param.index = index;
 	param.selector = selector;
 	param.value = value;
+	param.desc_size = 0;
 
 	status.done = 0;
 	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,

From nobody Tue Oct  6 07:51:15 2026
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 4hzT381qJGz6cWBf
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:16 +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 4hzT376X5gz4Gcq
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:15 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273075;
	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=jGYb4BLyEivEVNVCJxBsz90krNmGVIJ26+tY50Uo/9o=;
	b=ZLI+n7GYwhivBQSNx4CCFiwbxpDqPOxTIpVYSfT61jy/XEwAm1ChHQs3Qc8cEgXsFTbgp9
	rrKiSr7V0mIKC9L6Q6dvfdHmpKdRM5CZzcZRttftSxgI/s2ZQGtczG2GDxMFUcAIxgP/5x
	dcbreB5Ryqv1qv18pIWYwZ/WDSZsT/ysojUuccVystEYEHVuqQ492qYPq9KANPU4B6ITIk
	fcedmH1zNwLFGfut/crfxv2fLKKDkhZFI9qGlzF0Ud2cyyfJ2jAZv1ic860Rk0As5e8aeO
	4jfRaRPyEDleVGUHvEZiqJvUnKmpj2Kw/O/dONG3xMlLB+ndss3EOHacx68V7A==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273075;
	b=tLLfVYtwiv91TXqsAWm6cygmtNFvVRyapVWoqnR3UVJEEWp8sVUrP2+8bA5VIGSWne0bl7
	+DubDVf1lwT4r+p4KEPLGdWuKYyN9ySAyknmgxnmUkdaBBJlwk4HhxJNXrdjKhNQer2Wjb
	49Y+zrRmJVbQe+R0jMOJrGtLc8e0UcyKKsIiJ7DFSmCzu7koOdhhQVebk6ta5mOFYTJRct
	XhVPknXlVixKKZDgO9SF+UATRb7J55HCXKkZ6sNjadalilVo03TX6WA3wIpBQEPoFfEeij
	y4mC/GiNZ+TpjbPGAsP/lJE+vgzgFuquTuJ4z9wLMRsZgZrVQEKx9IyZBJveHw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273075;
	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=jGYb4BLyEivEVNVCJxBsz90krNmGVIJ26+tY50Uo/9o=;
	b=Wool4AD8jvYAT0EbpSwef8wOE/Uh35L+SoR5kwMtGrmHOeGw0valAo7B7xJ90VF38e8B+u
	uIcEobFq/ngWjglnHzPWZJWQ8K959Fua+P9r2yQuWUhmMKVTcIdQbac0n9Z6ApjHc/TAWq
	bDOBJWI4kVmVIoP9b6+WWZnw/ohsZFaqlv3Eg2aovas2yqhzQSvUv0lgv5avSY4M/tLEU1
	jhPjzpNtM7EAjqskoFGCvJS96N+hw/HKmIMZr3pT4gMd1+t6DdmYkz81F/8rjet5L3XIMB
	LaoHyWIJxqCQtvLBdjosZsV1oe8WJ2UtHt4GoWE/Nkfa0JBUyUZilCgwefVqfg==
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 4hzT374hdQzxqx
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:15 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 475c0
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:15 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: d3ff4bd64c07 - stable/15 - ufshci: read UIC command results while holding the lock
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: d3ff4bd64c07b1c28c38222a89307482d6df080b
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:15 +0000
Message-Id: <6ac4a873.475c0.63f3fa20@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=d3ff4bd64c07b1c28c38222a89307482d6df080b

commit d3ff4bd64c07b1c28c38222a89307482d6df080b
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:48:41 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:27:59 +0000

    ufshci: read UIC command results while holding the lock
    
    The UIC result registers (UICCMDARG2/3) are only valid between a
    command's completion and the next command's submission. They were read
    after uic_cmd_lock was dropped, so a concurrent UIC submitter could
    overwrite them in between. Read them into locals before releasing the
    lock.
    
    Also mask the generic error code to its [7:0] field when checking it,
    so unrelated bits in UICCMDARG2 (such as the attribute set type echoed
    for DME_SET) cannot be mistaken for an error.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58667
    
    (cherry picked from commit 266ce89fc231d58431293cf5b77e0854440aa13d)
---
 sys/dev/ufshci/ufshci_uic_cmd.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_uic_cmd.c b/sys/dev/ufshci/ufshci_uic_cmd.c
index 03ea8b2ba9f1..45ded2a120c6 100644
--- a/sys/dev/ufshci/ufshci_uic_cmd.c
+++ b/sys/dev/ufshci/ufshci_uic_cmd.c
@@ -170,7 +170,7 @@ ufshci_uic_send_cmd(struct ufshci_controller *ctrlr,
     struct ufshci_uic_cmd *uic_cmd, uint32_t *return_value)
 {
 	int error;
-	uint32_t config_result_code;
+	uint32_t config_result_code, result_value;
 
 	mtx_lock(&ctrlr->uic_cmd_lock);
 
@@ -188,12 +188,18 @@ ufshci_uic_send_cmd(struct ufshci_controller *ctrlr,
 
 	error = ufshci_uic_wait_cmd(ctrlr, uic_cmd);
 
+	/* The result registers stay valid only until the next command. */
+	if (error == 0) {
+		config_result_code = UFSHCIV(UFSHCI_UICCMDARG2_REG_ERROR_CODE,
+		    ufshci_mmio_read_4(ctrlr, ucmdarg2));
+		result_value = ufshci_mmio_read_4(ctrlr, ucmdarg3);
+	}
+
 	mtx_unlock(&ctrlr->uic_cmd_lock);
 
 	if (error)
 		return (ENXIO);
 
-	config_result_code = ufshci_mmio_read_4(ctrlr, ucmdarg2);
 	if (config_result_code) {
 		ufshci_printf(ctrlr,
 		    "Failed to send UIC command (Opcode: 0x%x"
@@ -210,7 +216,7 @@ ufshci_uic_send_cmd(struct ufshci_controller *ctrlr,
 	}
 
 	if (return_value != NULL)
-		*return_value = ufshci_mmio_read_4(ctrlr, ucmdarg3);
+		*return_value = result_value;
 
 	return (0);
 }

From nobody Tue Oct  6 07:51:16 2026
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 4hzT391m0Nz6cWHb
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:17 +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 4hzT386Qpgz4Gnq
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:16 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273076;
	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=zym4ScZJ25W6Jl2lVa7V9NkakUywVMk9D50SxZIMfvQ=;
	b=Gg61iTAshzReUm7O3y3Gn/OXPeVlpLRIcC66/iulw3xdp8cSmnuwUMxZOhWLzeZ2wOQffY
	MRMAxxq9Yx14ydTbENVfONp39dgWmiClD6yPSvX2eWUeD4bfeP7NTSYY7PE1PHxq0gOJch
	oLTmG9SHrjQJRnBHnmnQkhmc/2caNEUaCURWCofxL5Lk6QVU+Qu1a7a0nAeUpVg6IW0VcZ
	l/hTiRVNjo38Un6MQODejYDPLyD/Fh3Pi6dYJQOnn8Z0e9f1aNIhShtKjt2HfVMypDo0Ym
	bAWtFtq9urMCFY9j2/SXB6Afrxro2iCOecym87Xa9+ujGwbvvfVAwl69yrYOhA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273076;
	b=UXVGgf+7OKwtEpxay0Rp/lthmI+vrALiXKwd9OPM0sci+zlBs+mwgB3eo93Q6KktNYh/5H
	rz22AZ6OjrWK8hHncI0v7nVc6HIqSvD4SQ0R4U3vLM8muPTISY9k/BZPwBspXrgflWo9s0
	ZFsl+pLctburHjTNWPvnIIw/HfnANc4f3Q74eBt0PgAKGLm65ODOCjbyDUp4uhXsmiwhIL
	V0CHe0FxLRuVFDYgvwV0Z8EKWsxqH4zaR3XPDBRzVnNcEIwOIiCVPAzXvARRHoQOiSfTuj
	a5kS889Mqsmjt7PcaetBdiXpvjNo3tOjzPK9ZRtd/STklL/aEp/Sf30JnStMoA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273076;
	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=zym4ScZJ25W6Jl2lVa7V9NkakUywVMk9D50SxZIMfvQ=;
	b=t47FX7WCnSgRfXQ/eN2r438zXdTQHwXJiMGLfGS1aWWvzPKq0odeh44TpLjxE5uMK45yD5
	W3db4POXhKfM6mUYLctABqArxom+1Lp190gzKW04BF4dLSe6/wxwi1/arpY12lLMnuJDY5
	SYRY3pxVw42M9sVFvXtkHCj5mNGq3BWZFna+i+wt8R4iudsjJBH4REb7BZ6vJOIO0e3vDk
	1bvhDKxpuQ5aF4hVaYXs/+fvO7+XMWuPCxCBonYtLYLofReo12PtB1HTJZRekSd/OLK+9T
	w6EbXxUCRWtnP4Z6xzef9JxzNtsGM/DqQYHEM5HYCm33/PYNHULqEuYB0DE+Kg==
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 4hzT385V0hzx06
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:16 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18797
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:16 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: af54fe0db727 - stable/15 - ufshci: check completions under the queue lock
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: af54fe0db727a82838f593b1716b4f2a2e404fa8
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:16 +0000
Message-Id: <6ac4a874.18797.180fc5f0@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=af54fe0db727a82838f593b1716b4f2a2e404fa8

commit af54fe0db727a82838f593b1716b4f2a2e404fa8
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:49:31 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:00 +0000

    ufshci: check completions under the queue lock
    
    The completion scan held only the recovery lock. The submit path sets
    a slot to SCHEDULED and then rings the doorbell, both under the queue
    lock. A scan running between those two steps saw a SCHEDULED slot with
    a clear doorbell and completed a command the device had not started.
    The command failed with OCS 0xf, and a reused slot could return wrong
    read data.
    
    Check the slot state and the doorbell under the queue lock. The submit
    path holds it across both steps, so a half-submitted slot can no
    longer be seen. Found with fio randrw verify on QEMU.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58668
    
    (cherry picked from commit c686e7d3b0d315c358be81b4a1151711213d998d)
---
 sys/dev/ufshci/ufshci_req_sdb.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_sdb.c b/sys/dev/ufshci/ufshci_req_sdb.c
index 9f3a2a866ae0..80c4e53230e3 100644
--- a/sys/dev/ufshci/ufshci_req_sdb.c
+++ b/sys/dev/ufshci/ufshci_req_sdb.c
@@ -584,16 +584,23 @@ ufshci_req_sdb_process_cpl(struct ufshci_req_queue *req_queue)
 	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
 
 	for (slot = 0; slot < req_queue->num_entries; slot++) {
+		bool completed;
+
 		tr = hwq->act_tr[slot];
 
 		KASSERT(tr, ("there is no tracker assigned to the slot"));
 		/*
 		 * When the response is delivered from the device, the doorbell
-		 * is cleared.
+		 * is cleared. Check it under qlock so that a slot whose
+		 * doorbell write is still in flight in the submit path is not
+		 * mistaken for a completed one.
 		 */
-		if (tr->slot_state == UFSHCI_SLOT_STATE_SCHEDULED &&
+		mtx_lock(&hwq->qlock);
+		completed = tr->slot_state == UFSHCI_SLOT_STATE_SCHEDULED &&
 		    req_queue->qops.is_doorbell_cleared(req_queue->ctrlr,
-			slot)) {
+			slot);
+		mtx_unlock(&hwq->qlock);
+		if (completed) {
 			ufshci_req_queue_complete_tracker(tr);
 			done = true;
 		}

From nobody Tue Oct  6 07:51:17 2026
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 4hzT3B3lkJz6cWF3
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:18 +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 4hzT3B1cs2z4H2H
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:18 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273078;
	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=7d0DTVqJc1VzLK0nnjZ/TkBH6PEqYMlTo8gmTtVgLaM=;
	b=vjo1IwLFCbTCMNc9A+6F8M2ftSB4gK3aQKaFdYwGO5yZSuqaNGmz6dJqW2oF+gSfOmRCeQ
	B7xW9vApfArCLA/dNYPPyN6VxClFHq949eN29JKsj55YDdBL+yO4V8MjwktGBUGAWu8TzG
	3BPFxWtQ4NReTXzH3mzrpRbBkqu1aQaUcJLyFHC2mwMUtciQcUsSFsxSjNhqeZbdviokD4
	w3ruVlw5cGvgoJIuu4Ec9GPfjHx03keBijmgJ9K0TP9HGR4M0m1b3PxBsZQlzkPVVmEzvf
	hQytulmTIivZLjNBOIH9taEOWft9+Ld8adACq3X5qfXwJRm36lRyBdYX6LDKhA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273078;
	b=Y/RIioM5BJafeR+pvW9dwv3VWwd3k5dytVlUvUfiMOnXIyYQcPtYO2n+XCGCJVVsFryS9u
	MYP5qLCRDnJCFGCC9e8sOsS2jlhuCq6R0x6/SEfzseJs51LBSZrWZB/xMmMfsbxDAFuP1e
	hJKqWRL1drYNsxossswimPiPSpgGbT4riB8Nw59yJh4hgWVCyWkri4hYyBv4xzOXVRznDW
	z4TeW7C3wXHjf9/mXBY91aKqHHCqhQtcZ6x73vNHjE4jv4/uNAWRwsib8C3Mz1KJak7a0w
	MpAlX0aXRKObivGp3MxB9BnTNXC9Qsvaaa3h3qveV6rCuHo3EP5HCJdd2UlLfQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273078;
	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=7d0DTVqJc1VzLK0nnjZ/TkBH6PEqYMlTo8gmTtVgLaM=;
	b=MalM9teey/Jv3ZW/uLdQoHlSfttTyjdBC0YcGlBSdDTopFE22TcujRl5WHaL9yBNFZZI7W
	Z1p/UtfnCedPUfdda5Mcr+w4J6WhotKvHwyTqVsDyjVK16hP26DfKkmthMukJEo5HBFDK3
	GrcCBpP6cnYGLlW9CVS6rID5kTHzvI0mcxHjC2OIp+OfBYBSVGoSwKCdP0+F9aLdYqVLY4
	XfPw3AF0g5avrOqyim1fMhxCBVBmbKtwAtcukjcSn3MHrZ9OvUklZLUUB/CMx3Tz86v11b
	+JkEA1VB31E2XXaw7wXAU09S7R8IRIaSpa7WitmlGWfwIczh1DES17fEsVeg6Q==
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 4hzT396K18zwwZ
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:17 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18525
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:17 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 31d28afe7ec5 - stable/15 - ufshci: release the CCB after sending a start stop unit command
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 31d28afe7ec5b92b8af1bb324be2e93ff78363b4
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:17 +0000
Message-Id: <6ac4a875.18525.4d9b38a1@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=31d28afe7ec5b92b8af1bb324be2e93ff78363b4

commit 31d28afe7ec5b92b8af1bb324be2e93ff78363b4
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:51:30 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:00 +0000

    ufshci: release the CCB after sending a start stop unit command
    
    ufshci_sim_send_ssu() got a CCB from cam_periph_getccb() but never
    returned it. Each call leaked the CCB and one slot of the device's
    CCB allocation budget. When the budget runs out, the next
    cam_periph_getccb() waits forever and the suspend path hangs.
    
    Release the CCB while the periph lock is still held, as the other CAM
    periph drivers do.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58669
    
    (cherry picked from commit aaf0e80e684da35cd527491243583467ae7c75cb)
---
 sys/dev/ufshci/ufshci_sim.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 4a106a6c7b8a..e40079b23354 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -12,6 +12,7 @@
 #include <cam/cam_debug.h>
 #include <cam/cam_periph.h>
 #include <cam/cam_sim.h>
+#include <cam/cam_xpt_periph.h>
 #include <cam/cam_xpt_sim.h>
 #include <cam/scsi/scsi_all.h>
 #include <cam/scsi/scsi_message.h>
@@ -542,6 +543,8 @@ ufshci_sim_send_ssu(struct ufshci_controller *ctrlr, bool start,
 
 	err = cam_periph_runccb(ccb, NULL, 0, SF_RETRY_UA, NULL);
 
+	xpt_release_ccb(ccb);
+
 	cam_periph_unlock(periph);
 	/* Release periph reference */
 	cam_periph_release(periph);

From nobody Tue Oct  6 07:51:18 2026
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 4hzT3C4FfJz6cW4Q
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:19 +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 4hzT3C1j4tz4H09
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:19 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273079;
	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=nHYobN4HXRYLUuulvGW7a3iBEkss/9shpnQ0vkV/tiA=;
	b=B1WJloqTB6rwKUecyGJt8rTWyJ2Fq9cXYdxxLc4kHZNoLJYLZQXpcx50fGXu1c+5posQk5
	+DuhQu3CMA3Z2CXOVEwmORIYHwGYM0HBVdEvw23tf8e9x/G4MRjRJYMZdh/XvRnIvDz13F
	/mmsrWplOMOZOn2nfBypA8Q241ymWaLcN51orLzbo14zX7bsMRL/T0VYeE9ww4aqHxiXeY
	503TOqWI4d4mCuvN5ES/lzDEpWZAdr8O//KTgh1zkvla7O22aW1LLfuqmu1BYTV+uXVNqu
	DyJmhtsP8Z3AISHjo+RL7a9I4VRiiRSBGCFm/peyAG+8M/KW2h0f1rTglnQWig==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273079;
	b=PGGW8A/bjOS1qvv8lwxfYNzG7AY5sIJHRBiiZE+9Dk/c2d3hsQaxmr0q9OMwc/XQPk8U4w
	bgsppCOVtEv3117nGkUQPVi3EN61GJG3Xj4DL81OEvMYVvM8GsYbHD3LIjzyPq2STle7vg
	n97cjiVGiZaYJwIfult35t24gMqCWL9XFjb4V0nqF7o6KnZwBDPtXr811TidPtp55x5fWj
	lzQT2vDr7dQ8dR7/8RozY7eOJMuefzu6iQbgymbajdVJ70+ju8gXDG+l98Q+/y/6ULaz8Q
	vXbwyT21v6Y6qW2HjiRZ8diK5wTeig1nOtPZn5zF1FSD4dFU8XmBMnMqCSRvEA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273079;
	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=nHYobN4HXRYLUuulvGW7a3iBEkss/9shpnQ0vkV/tiA=;
	b=aj5k+57SFfSeKNn0GNp98eWqWkEP+Jkqa2TzRh8KlWd3elXP36xieehRaGtQ6jaunoPeC/
	E0p84iyUVtJmuqCSQUuChqrT/RK27+nNzzIG3DOrbgKr+OMhw9lCRT2l+eqptLoTJQxUHh
	SKiKnwgngyg33PC0eefxElBmRW0SbOB0+RwCC7LouJPmHE6QHhnFwMPFE8ne0HiD99qXJx
	a33FoU5lFvu6htDnjbmacIy7jr0fhc3mQgUrh4QuXzauba+cYNKXEKEbQksz1O/3yjW7vf
	GrHayb1jFLhd2ny2i7s1GS0E7VeSQaSVP/JwGJ6lKNg8+J+Q4GL6XMERM2g3OA==
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 4hzT3C0Cp7zxcT
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:19 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 475c4
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:18 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 748239b973e2 - stable/15 - ufshci: free the taskqueue on detach
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 748239b973e2c24160b29742d7e90f0670a6d203
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:18 +0000
Message-Id: <6ac4a876.475c4.60722db5@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=748239b973e2c24160b29742d7e90f0670a6d203

commit 748239b973e2c24160b29742d7e90f0670a6d203
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:52:37 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:01 +0000

    ufshci: free the taskqueue on detach
    
    ufshci_ctrlr_destruct() never freed the taskqueue. Every load and
    unload cycle leaked the taskqueue and its kernel thread. A task that
    was still queued could also run after the module was gone.
    
    Free the taskqueue in destruct. Do it after the interrupt teardown
    so nothing enqueues new work. A reset task that is still queued at
    this point races the queue teardown. That race is older than this
    change. The planned in-flight recovery rework will close it.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58670
    
    (cherry picked from commit 2d32961316248fdff54a2a9fc24ac8b712fee9b0)
---
 sys/dev/ufshci/ufshci_ctrlr.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index 421aa1e28124..bb07ad5f76da 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -448,6 +448,15 @@ ufshci_ctrlr_destruct(struct ufshci_controller *ctrlr, device_t dev)
 		bus_release_resource(ctrlr->dev, SYS_RES_IRQ,
 		    rman_get_rid(ctrlr->res), ctrlr->res);
 
+	/*
+	 * The interrupt and the timers are gone, so nothing enqueues new
+	 * tasks. Free the taskqueue before the SIM teardown below.
+	 */
+	if (ctrlr->taskqueue != NULL) {
+		taskqueue_free(ctrlr->taskqueue);
+		ctrlr->taskqueue = NULL;
+	}
+
 	ufshci_sim_release_wlun_periph(ctrlr);
 
 	mtx_lock(&ctrlr->sc_mtx);

From nobody Tue Oct  6 07:51:20 2026
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 4hzT3F0BNkz6cW4T
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51: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 "YR2" (not verified))
	by mx1.freebsd.org (Postfix) with ESMTPS id 4hzT3D25jYz4Gpn
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:20 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273080;
	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=rUfN1w4VY99Nk31FHj/S9EBgS7VM98R19EBS/DZHfwA=;
	b=mFBU21WL5rhYr77QrmuaLjzzWc+DT9mGaJOwUflH4Kydw2LKXZerD4513QtwzSZ9B+dbMb
	eSePuhq3hsFV6hLqVdWgbgN6LzS0+qJGLLaAbvWnDDhEDKpz2sBKx0NBlkCGyJDTMzPI1s
	YrZHwS59hIUrOCi34rVYhbgxiuWd/ukdHtw/iKBf6e0p5MPCa2Jr0imQ0mn73M0AVPrApd
	lzpOpV+FBg6lYlrKbq8ZTYmVn90etuzVPyzq1ZlV42i14zEfHIX+Xc8q1xvri9yrFWlrg9
	w7mYcX8yGZkLa8KBjSYjQDK+E5I1tdOb3xSiuCZCkUrNL2V/cyvJZtd9D5RuTA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273080;
	b=RZcMjwbK+B/Ovo/Ec6cbyoIArKGpHHuPVFG0xbJq1VhMdKiumHcF3V4IiqJ/ifVtDEN9qw
	DGGBUE/6mP+WAnX+GXh8oLRFsK259lyeEudNCzRRnNfVNSijG73kKvEhFu8gyA6+mM81IH
	4swWCNt7XCxjf0Pa0VcB3oto/fq0d2w9d3EXt5Hhg9a2rgIuO29Y73E9Nhv89t/GDWuoN5
	jHgge67aq6VdyJlWaGeVyvFMBvlRSvw8DamYJtGxz9m8as7kRHnihS66/9PrnUW1P4RB39
	P80w0rFlgTUACn4JZLLU1ZkiIMQ+RQkah0pdlZRKxCfzlWjH1sJBJbn02gog1g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273080;
	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=rUfN1w4VY99Nk31FHj/S9EBgS7VM98R19EBS/DZHfwA=;
	b=EBt9C1XywBFL3Q1rp98aPySKGTBSyyZ19m1MbM8GbYZRYWgIp9KZgDs1VPvPksRXQ6BooX
	L02SOdaSNev60Tdflr/3gPzVI1+Ce3rwnhGJG43xYFFDUyaj7ypciqf1ewI9mqWNBWse9Q
	vvkCDWYwyyUf2+eHsrJTrvyeh0y8RrgEHz2BjglK5Yo5EGNOgfya/cVFDBWT+0uv2l5TIK
	jFddM9vhq2PoVdFNeznOxyiOr818iig6gZaaAY2P8xgmcddb7OgQz/6RslGMUUzlSPLBM3
	STBkLv890ZCgi1kw2FxSDEf/tDlPKuBbELOei1Rr+Opfcd3oaJur2bpyHZOoJw==
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 4hzT3D0ltlzxZK
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:20 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 47735
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:20 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: b3f313e26e87 - stable/15 - ufshci: do not reset the device in the XPT_RESET_DEV handler
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: b3f313e26e878904fd39722b09520d68e0c8a167
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:20 +0000
Message-Id: <6ac4a878.47735.6eb1e283@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=b3f313e26e878904fd39722b09520d68e0c8a167

commit b3f313e26e878904fd39722b09520d68e0c8a167
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-10 01:53:27 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:01 +0000

    ufshci: do not reset the device in the XPT_RESET_DEV handler
    
    CAM calls the SIM action callback with the SIM lock and the CAM
    device lock held. The XPT_RESET_DEV handler called
    ufshci_dev_reset(), which sleeps on device commands. Sleeping there
    panics when another thread contends for the lock: "panic: sleeping
    thread holds CAM device lock".
    
    Report success without touching the device, as nvme_sim(4) does.
    A real device reset needs the controller reset path. That rework is
    planned together with in-flight request recovery.
    
    Sponsored by:           Samsung Electronics
    Reviewed by:            imp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D58671
    
    (cherry picked from commit a33860b0a2b98caf32c2ff62707f254ca92773f4)
---
 sys/dev/ufshci/ufshci_sim.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index e40079b23354..f969d9c8311b 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -288,13 +288,14 @@ ufshci_cam_action(struct cam_sim *sim, union ccb *ccb)
 		break;
 	}
 	case XPT_RESET_BUS:
-		ccb->ccb_h.status = CAM_REQ_CMP;
-		break;
 	case XPT_RESET_DEV:
-		if (ufshci_dev_reset(ctrlr))
-			ccb->ccb_h.status = CAM_REQ_CMP_ERR;
-		else
-			ccb->ccb_h.status = CAM_REQ_CMP;
+		/*
+		 * This callback cannot sleep: CAM calls it with the SIM
+		 * lock and the CAM device lock held. It cannot reset the
+		 * device here. Report success so CAM keeps going, like
+		 * nvme_sim(4) does.
+		 */
+		ccb->ccb_h.status = CAM_REQ_CMP;
 		break;
 	case XPT_ABORT:
 		ccb->ccb_h.status = CAM_FUNC_NOTAVAIL;

From nobody Tue Oct  6 07:51:21 2026
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 4hzT3G3Fxcz6cWNG
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:22 +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 4hzT3F4vb6z4Gpw
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:21 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273081;
	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=QF81VjBp38cVLDlDedeVL9ibjtpwWu6OPOZNnhChnQs=;
	b=cjTdv98LV6Pq0QZhfQGZLg7uasGF+6GfBE75D81kZTzB8eE8mkGwc0DbZiywMDkSfKr64x
	usOY1o9vkdeH0E4RrmKZGRm2ST6PdJCBgaGuBXsO7QQjSok1OiupSlQprhTKO/yFLb8vt1
	mencLmoEXuqVk10g3sQRTRmz2iQ6DUSpYHfwVCMYRRWwT5+W/jnMtXjDo19/LN3x6xh7e6
	sC2GWX83/0XlhYyzJlc5TVjE6nyVPXB0pozmn8BSKs/2iEbI8vNWF4Q63ZNx8YZdsGZ/h/
	w6MLV+9mmO7vLyjSieOCZG8c8U+lUAq1IEK56U4tAjj6mJF4n7WjZKn0ZECwtA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273081;
	b=PjVA/Yyw8K9Sw7+LGll9htEIJryvwvdctFzCNT/kDas1z5sxynYLVLCcgUu0caqI8h6TRQ
	6ujs5abVhxyWkAS4eqhUI1abHpppZgSfSAUC1NDcFAjXaiYPcTlw3Rd/B8AGD71PmFRh2S
	an5D36k2QcXkDvTaOn//poYNPTVyAKwLutk1H5kIZn0Y+8CVHd/5yGuQm1XRfYK7czAshr
	FExLgxNTELCeN2QTsO18B2uKSINunELGwnV3Q0HctE/Uo2aiL2Sp7NdfVYaA05EYhCap6b
	pZQ9rF24P3RHpO81w1x752ajycc4qROFf9oUne9/hM8I6SRGtrSeEg6av8Avmw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273081;
	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=QF81VjBp38cVLDlDedeVL9ibjtpwWu6OPOZNnhChnQs=;
	b=cwkm+F7TYJvdqrA242C0Y6Sk4towPcSVJsIbxEBUygkBr+YfQ0oIaXUd02ylHXpvU4PQIN
	vq4jiEPhEh/TD58sh8kbA2qCXzkvzZ26yJnjF18JdsxfVR3XgUFEDz5B39VydTdWwxFKBO
	BYJwc9MDF5zhImuThvUyKyUpvHMNqrlTg4xOPsOtJMhOBdK2s/ojgJlwoNLv8SR2mBzvmk
	yAq0DujMDQ1kwcuOAeuYStYADEeLF4vsvaG7VxAA0kafog/mnu1jqGmfWXBc9xRTwPBxQu
	uM+mzv1/bskp9gTgt1Kl+2iP0ZcTkp2ucxI5AG1gJkciGwB0UL9iluGFvPF7fw==
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 4hzT3F1jK0zxcV
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:21 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 4557d
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:21 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 88fe4b75cf27 - stable/15 - ufshci: return the real errno from SDB queue construction
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 88fe4b75cf27064f9c19dac4be24440a27ae55fe
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:21 +0000
Message-Id: <6ac4a879.4557d.4c6ab52f@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=88fe4b75cf27064f9c19dac4be24440a27ae55fe

commit 88fe4b75cf27064f9c19dac4be24440a27ae55fe
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-18 04:48:56 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:02 +0000

    ufshci: return the real errno from SDB queue construction
    
    ufshci_req_sdb_cmd_desc_construct() and ufshci_req_sdb_construct()
    returned ENOMEM for every failure, so an EINVAL from bus_dma_tag_create()
    was reported as a memory shortage. Capture and return the real errno,
    and drop the cmd descriptor construct's now pointless out label.
    
    No functional change: no caller inspects the value beyond propagating
    it, so this only improves the diagnostics on an attach failure.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58815
    
    (cherry picked from commit a508a9f7238828fb5fb0f68e9f5df7d24072d6c2)
---
 sys/dev/ufshci/ufshci_req_sdb.c | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_sdb.c b/sys/dev/ufshci/ufshci_req_sdb.c
index 80c4e53230e3..51e72c4ed4f5 100644
--- a/sys/dev/ufshci/ufshci_req_sdb.c
+++ b/sys/dev/ufshci/ufshci_req_sdb.c
@@ -109,21 +109,23 @@ ufshci_req_sdb_cmd_desc_construct(struct ufshci_req_queue *req_queue,
 	if (error != 0) {
 		ufshci_printf(ctrlr, "request cmd desc tag create failed %d\n",
 		    error);
-		goto out;
+		return (error);
 	}
 
-	if (bus_dmamem_alloc(req_queue->dma_tag_ucd, (void **)&ucdmem,
-		BUS_DMA_COHERENT | BUS_DMA_NOWAIT, &req_queue->ucdmem_map)) {
+	error = bus_dmamem_alloc(req_queue->dma_tag_ucd, (void **)&ucdmem,
+	    BUS_DMA_COHERENT | BUS_DMA_NOWAIT, &req_queue->ucdmem_map);
+	if (error != 0) {
 		ufshci_printf(ctrlr, "failed to allocate cmd desc memory\n");
-		goto out;
+		return (error);
 	}
 
-	if (bus_dmamap_load(req_queue->dma_tag_ucd, req_queue->ucdmem_map,
-		ucdmem, ucd_allocsz, ufshci_ucd_map, hwq, 0) != 0) {
+	error = bus_dmamap_load(req_queue->dma_tag_ucd, req_queue->ucdmem_map,
+	    ucdmem, ucd_allocsz, ufshci_ucd_map, hwq, 0);
+	if (error != 0) {
 		ufshci_printf(ctrlr, "failed to load cmd desc memory\n");
 		bus_dmamem_free(req_queue->dma_tag_ucd, ucdmem,
 		    req_queue->ucdmem_map);
-		goto out;
+		return (error);
 	}
 
 	req_queue->ucd = (struct ufshci_utp_cmd_desc *)ucdmem;
@@ -139,7 +141,7 @@ ufshci_req_sdb_cmd_desc_construct(struct ufshci_req_queue *req_queue,
 	if (error != 0) {
 		ufshci_printf(ctrlr, "request prdt tag create failed %d\n",
 		    error);
-		goto out;
+		return (error);
 	}
 
 	for (i = 0; i < req_queue->num_trackers; i++) {
@@ -148,7 +150,7 @@ ufshci_req_sdb_cmd_desc_construct(struct ufshci_req_queue *req_queue,
 		if (error != 0) {
 			ufshci_printf(ctrlr,
 			    "request payload map create failed %d\n", error);
-			goto out;
+			return (error);
 		}
 
 		hwq->act_tr[i]->ucd = (struct ufshci_utp_cmd_desc *)ucdmem;
@@ -158,8 +160,6 @@ ufshci_req_sdb_cmd_desc_construct(struct ufshci_req_queue *req_queue,
 	}
 
 	return (0);
-out:
-	return (ENOMEM);
 }
 
 int
@@ -227,15 +227,17 @@ ufshci_req_sdb_construct(struct ufshci_controller *ctrlr,
 		goto out;
 	}
 
-	if (bus_dmamem_alloc(hwq->dma_tag_queue, (void **)&queuemem,
-		BUS_DMA_COHERENT | BUS_DMA_NOWAIT, &hwq->queuemem_map)) {
+	error = bus_dmamem_alloc(hwq->dma_tag_queue, (void **)&queuemem,
+	    BUS_DMA_COHERENT | BUS_DMA_NOWAIT, &hwq->queuemem_map);
+	if (error != 0) {
 		ufshci_printf(ctrlr,
 		    "failed to allocate request queue memory\n");
 		goto out;
 	}
 
-	if (bus_dmamap_load(hwq->dma_tag_queue, hwq->queuemem_map, queuemem,
-		alloc_size, ufshci_single_map, &queuemem_phys, 0) != 0) {
+	error = bus_dmamap_load(hwq->dma_tag_queue, hwq->queuemem_map, queuemem,
+	    alloc_size, ufshci_single_map, &queuemem_phys, 0);
+	if (error != 0) {
 		ufshci_printf(ctrlr, "failed to load request queue memory\n");
 		bus_dmamem_free(hwq->dma_tag_queue, queuemem,
 		    hwq->queuemem_map);
@@ -289,8 +291,9 @@ ufshci_req_sdb_construct(struct ufshci_controller *ctrlr,
 		 * UTP Transfer Request (UTR) requires memory for a separate
 		 * command in addition to the queue.
 		 */
-		if (ufshci_req_sdb_cmd_desc_construct(req_queue, num_entries,
-			ctrlr) != 0) {
+		error = ufshci_req_sdb_cmd_desc_construct(req_queue,
+		    num_entries, ctrlr);
+		if (error != 0) {
 			ufshci_printf(ctrlr,
 			    "failed to construct cmd descriptor memory\n");
 			goto out;
@@ -305,7 +308,7 @@ ufshci_req_sdb_construct(struct ufshci_controller *ctrlr,
 	return (0);
 out:
 	ufshci_req_sdb_destroy(ctrlr, req_queue);
-	return (ENOMEM);
+	return (error);
 }
 
 void

From nobody Tue Oct  6 07:51:22 2026
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 4hzT3H1V9Cz6cWSg
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:23 +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 4hzT3G6vdQz4Gxg
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:22 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273083;
	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=02gDY6X3upndsi8DkwBev8hrdTqZrpBfMIswaEkui9M=;
	b=QL+8cDGmbi0PgI2ZXEk2v0xvDDNbQa8TeosubHhzgfEmjpToFsfDsHs1quQGEGs56KLypF
	MXAEOjeB0FnINMsyDbCM2VoXAxTCAC+P2hhwU/0VHyw71r338m8Ih73vkFohavIEB8GsUO
	qYtDGBShpWURoo1QIExqllN7SfOncjl/mG35D/2bB0oBG9xNxC+Qj+Vx/phtVOF6nAVhLi
	2CNQDoGlsQuaCMUpVam3uPtAmMHhI6X+qM1q+iBzBs5++j/y7VaAch4oISQcCQ+WKlsJ9E
	LQGLn8rd73+8qsiAz7gGKeRjLTL0mNaFnnjW1yizvUf6B6U08I+wutVMgt3XkQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273083;
	b=BGJ/0+nNgM+p20sWkbY7Ll+7JhPX2q+En4MpAnhZmqNn59GvJ9cHhYx1EWCv9nn7AGFzu2
	xeEdd/7jZJLFsTkNXq/yasYf6e8t+5TFkw/t3lxN0u9Nesq7W68DZ/8wBI5PbHoeNj1g6I
	b8Wt3puzMBDnQyfSytcQ/DwGpD3fYhm2wHAfpA0GuKOFjxuAwSdSrcJtCYT6zw2+4trRNN
	U/Ts7M80IehJ+euFceny38bb9c/7BTZJLFhFbeeErrKfcHOAZo/U7j6UYNVggLHNCYsizf
	KNCuglhl0DpQwWazBtBGXCPHRafaJU6qlyT3zkUXyGywsfMxLI17NoPgg3kUxw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273083;
	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=02gDY6X3upndsi8DkwBev8hrdTqZrpBfMIswaEkui9M=;
	b=Y3YpM8wgUl7tiqRrpcsRYoTBglmTju+e9hnqakwgAwNvTy83mBE6sw51PMai8/qg9UaHMb
	PylemqkJHv/y4GCvsukTrnVctmDCzeKn+hdlKoam+zUOlkoEtN+7pJAZN3NmwkZdiKN7lV
	wQJZaYvInqzyD/6L3eTsKtEvuL/H2zpV1RNGCpvJXA5ZeXJYvp4Aiq40WmD3aBX36P0f8v
	zMv6jUzMN3I+vnOYKmg1DbaLzT7CEPAdWOGoFKQT251lRrVtg1LTkxymH9hT30qUmPrWBS
	MArnnYKZYeEX4YIi4OtmL+QgyB0h5bEUCNKH280LzyjlU3TNmYq6A6n4omEakw==
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 4hzT3G2Qm0zxcX
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:22 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 474d4
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:22 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 4adcdaf0da31 - stable/15 - ufshci: pass the queue being destroyed to the cmd descriptor teardown
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 4adcdaf0da316483cc0f5eabb8448dd968a02875
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:22 +0000
Message-Id: <6ac4a87a.474d4.5349d81b@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=4adcdaf0da316483cc0f5eabb8448dd968a02875

commit 4adcdaf0da316483cc0f5eabb8448dd968a02875
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-18 04:50:27 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:02 +0000

    ufshci: pass the queue being destroyed to the cmd descriptor teardown
    
    ufshci_req_sdb_destroy() hardcoded &ctrlr->transfer_req_queue when
    destroying command descriptors instead of using its req_queue argument.
    
    No functional change: the branch only runs for the transfer queue, so
    the two pointers are always the same today. Using the argument keeps
    the function queue-agnostic for when more transfer queues exist (MCQ).
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58816
    
    (cherry picked from commit dbcebc7c661e961ea6e72ef77e29675aca86ab4b)
---
 sys/dev/ufshci/ufshci_req_sdb.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_sdb.c b/sys/dev/ufshci/ufshci_req_sdb.c
index 51e72c4ed4f5..b737a7081fd9 100644
--- a/sys/dev/ufshci/ufshci_req_sdb.c
+++ b/sys/dev/ufshci/ufshci_req_sdb.c
@@ -330,8 +330,7 @@ ufshci_req_sdb_destroy(struct ufshci_controller *ctrlr,
 
 	if (hwq->act_tr != NULL) {
 		if (!req_queue->is_task_mgmt)
-			ufshci_req_sdb_cmd_desc_destroy(
-			    &ctrlr->transfer_req_queue);
+			ufshci_req_sdb_cmd_desc_destroy(req_queue);
 
 		for (i = 0; i < req_queue->num_trackers; i++)
 			free(hwq->act_tr[i], M_UFSHCI);

From nobody Tue Oct  6 07:51:23 2026
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 4hzT3H6sv2z6cWFM
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:23 +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 4hzT3H5944z4H7W
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:23 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273083;
	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=CEVz1FXcOZllKgdY5/5azQ6jd6sVZ64dE9zH4AQcGQo=;
	b=RvIRD8wujKwZnHefWIR+lrvQOGG9+YiXh1xGMTHODG9uCi/MJJD/sPwzYSxfLAsu2WNrdi
	Dv0DceB+6cowTmeIQUPCZmNAHsr/ynexBEgYN45brPJl22agKgzCLGgAMkL329VP2/Xqhq
	m0Qjn4+DIOUrpr5UyfCg7uZojUBI0/m34xW4pMlNplIpjs7r5K9sUXueSBPpl+i1TqlyUW
	Cw2XVjsvhfMCEPaEmSeDhr2SKm4UQecpx1L3BKf+s0bxyQtg8f7QGYDcjGLH3R/c1hj/sK
	Ob+WHRuJJT8wvwUbfBLYOCa1HRB0fE+Z9vWmSQj3bQbyCRVIWTF7tvtLhblCsA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273083;
	b=Cl4dcy9rj0yzcCHUxEdH2zDp1E4j1x2tmCC+3t2Nsm6ON0dAMi1CWerZMYcfURoO6e1A8V
	E5Dfio5R/Zmh+WmyshNTyFqdMYB8rVMdaIyqDX07g4BwDz1cP89KOotx4SL++3aXExOR7i
	4DaG1uQhnuxSr5jSLj2TZaUkl8N3VlSMoiQ2/mro160YyeXqwYcJfsAw7YzBrWmkPLlwm/
	ppRixR6xU82NSC1LssAs7d7P2HN4vYqiM4vrVVlCgNGeE6DabSGjbsIKxpwn3zJ3ey7qWg
	nL0BaVEkbyixTqXuCwcThiSs9bzTt+GJ2RlDNZpjLBBUd/H7U3Mkk4CSS2c/Lw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273083;
	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=CEVz1FXcOZllKgdY5/5azQ6jd6sVZ64dE9zH4AQcGQo=;
	b=jZL7Mity2ctsR3R0gkQSKhOcF8ojek3lsZctAMePGID8jfYdNqFLdasFmdRj+7YQFz3BnF
	fDRQTfwqVFXFJz/nBn/quXEBkwIlnLWcbV9Q2LMtNTiNr7pOs9WNE10owAcgAK9J9STZP3
	rUELS7M7WDLwzGEQuNxj4wtps6AmkhC/u/w3uDn8gZo03IULCwkXygJ/Z4TJUfBvRVhaho
	3RH0/mi8o2AbuUBrfhy3hhtu0btLME1YWnEcdrYmtj2XYkdnLztjBvEa283brhJ9yiL+aL
	4EDza5Nbgl6g7HYVUKnnXlFUyxUDa1Um6L7KOSa5Ul5EmPm63lG0Pr0FycJC0A==
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 4hzT3H3NkzzxpJ
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:23 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18830
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:23 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 7fb453f00502 - stable/15 - ufshci: validate the CDB before allocating a request
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 7fb453f00502c522656f44715f2a55a0313e76d0
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:23 +0000
Message-Id: <6ac4a87b.18830.10c718c2@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=7fb453f00502c522656f44715f2a55a0313e76d0

commit 7fb453f00502c522656f44715f2a55a0313e76d0
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-18 04:51:42 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:02 +0000

    ufshci: validate the CDB before allocating a request
    
    The CDB pointer and length checks depend only on the CCB, so perform
    them before allocating and initializing the request. This avoids a
    wasted allocation for invalid CCBs on the I/O path and removes one
    request-free error path.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58817
    
    (cherry picked from commit f3c3db35d545bb14b96e4cb079312c377247540b)
---
 sys/dev/ufshci/ufshci_sim.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index f969d9c8311b..8ac47fc4a2dc 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -144,6 +144,17 @@ ufshchi_sim_scsiio(struct cam_sim *sim, union ccb *ccb)
 	payload_len = csio->dxfer_len;
 	is_write = csio->ccb_h.flags & CAM_DIR_OUT;
 
+	if (csio->ccb_h.flags & CAM_CDB_POINTER)
+		cdb = csio->cdb_io.cdb_ptr;
+	else
+		cdb = csio->cdb_io.cdb_bytes;
+
+	if (cdb == NULL || csio->cdb_len > sizeof(upiu->cdb)) {
+		ccb->ccb_h.status = CAM_REQ_INVALID;
+		xpt_done(ccb);
+		return;
+	}
+
 	/* TODO: Check other data type */
 	if ((csio->ccb_h.flags & CAM_DATA_MASK) == CAM_DATA_BIO)
 		req = ufshci_allocate_request_bio((struct bio *)payload,
@@ -184,17 +195,6 @@ ufshchi_sim_scsiio(struct cam_sim *sim, union ccb *ccb)
 
 	upiu->expected_data_transfer_length = htobe32(payload_len);
 
-	if (csio->ccb_h.flags & CAM_CDB_POINTER)
-		cdb = csio->cdb_io.cdb_ptr;
-	else
-		cdb = csio->cdb_io.cdb_bytes;
-
-	if (cdb == NULL || csio->cdb_len > sizeof(upiu->cdb)) {
-		ccb->ccb_h.status = CAM_REQ_INVALID;
-		ufshci_free_request(req);
-		xpt_done(ccb);
-		return;
-	}
 	memcpy(upiu->cdb, cdb, csio->cdb_len);
 
 	ccb->ccb_h.status |= CAM_SIM_QUEUED;

From nobody Tue Oct  6 07:51:24 2026
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 4hzT3J6pRzz6cWLY
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:24 +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 4hzT3J5K8lz4GvB
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:24 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273084;
	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=J4BDkjnKAl2NGZRaFH3DbWGpvj0PlF1UZZLi7jviMbI=;
	b=e9wBTBerDNJWglFx0JbI6F5v9d1gMGXfAjr7ATEaYE6VAIC77uyGQHPR6Ka1apUD6dgyCp
	Xxs/b5BqOLs18RB2nzF8bkihlC16vHF8Zg2f114bysWgAqCKm9lggg36lIx9iyQ3kIdkbe
	lVRRCgVGMQI/3yTdB+JqsaMoq1hr8tp7Wc0LHOn9ORChJZv9UyYCcvtH5mc4fYDnmLyliO
	qmYoFHy5l1yYWa2pvRQqxUrB1NERg6skjh2sIl3V9jm0myM1PW9fVBb+F8OZGaT/X3g5yX
	zDfFad78OBBCVOwRFrCa6tVH6R5PNI7PDZ/yyq+cAKsN1AUL7IC2jpwc1grxmA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273084;
	b=RjilWttArAjkHmUGiMWIdETlRFqxkjb6+HLiNMoy4qKjZc4qv8+ZWynfYbxlo4UbZAizSx
	sDDB/hvYmND3dfyXH2LKPxXuVlxItFLiPlyvH1/r8Q2DgAqb1ON4ssTjUWl3yO57lX+Bgk
	eepELdOIT1rMlG3MimSW7ZNPD2Mm8WmtC1iR1GHR9EpU2Mab5HjMLFwT1/6vV5uzDpBS4V
	QXgsFAJva06d/eNZTT5ON9LC2MO09mAxkf1g1m6sx1faI2R4yqOmoQG2f6xzkZ5gLIIYqh
	nKVFmOotSNy/FzTpkKMZ5AywcMYwL17uahUvx0z0kudOTQGJ+FO6pnm6+Khw4Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273084;
	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=J4BDkjnKAl2NGZRaFH3DbWGpvj0PlF1UZZLi7jviMbI=;
	b=ul8B4uim3484S+qUzMV32MNZSM1b30A1lgboptF78s2VsHUJufjCXw70qI37QXsQuQVrhk
	9yLIUHO1W3oSYd533pq/sQrVHmt3pmPecCnhE/AsPK8Qqjzd9xWi5rVs5ZYghDFW/nbZ/C
	9c/8bulD0DB4OTG2+D9iqLfs+qDelYsD8Lp9bDNcFts0eoxCOZiNYaBcJvCE3bORKP639W
	kA8TFA4FQYKdXH+ejzOlUQBlrve8ApeyCI1huwOlBGzOKdBcsphEFSO65b8OCEr4pkJ+K6
	Ft4N42tqIY0cpRjpQPtYvmfsR/YF3ZZI+sxIgZRUxCcaHcvsOrbeHeDxA9akeA==
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 4hzT3J3wgYzxcY
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:24 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18f17
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:24 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 5dd01a6f1518 - stable/15 - ufshci: consolidate the device query submit/poll pattern
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 5dd01a6f1518d9bc615880ec04d732fca00489bb
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:24 +0000
Message-Id: <6ac4a87c.18f17.5ab57d96@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=5dd01a6f1518d9bc615880ec04d732fca00489bb

commit 5dd01a6f1518d9bc615880ec04d732fca00489bb
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-18 04:52:54 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:03 +0000

    ufshci: consolidate the device query submit/poll pattern
    
    The six query helpers duplicated the same submit, error check, poll,
    and status check sequence. Move it into ufshci_dev_send_query() so
    future changes to the query flow are made in one place. This also
    unifies the failure log message format.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58818
    
    (cherry picked from commit e1aa173f812010675005e2917d7b2b44ee4a226e)
---
 sys/dev/ufshci/ufshci_dev.c | 98 +++++++++++++--------------------------------
 1 file changed, 28 insertions(+), 70 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 18546d7120c0..063b65aaf579 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -12,6 +12,28 @@
 #include "ufshci_private.h"
 #include "ufshci_reg.h"
 
+static int
+ufshci_dev_send_query(struct ufshci_controller *ctrlr,
+    struct ufshci_query_param param,
+    struct ufshci_completion_poll_status *status, const char *fail_msg)
+{
+	int error;
+
+	status->done = 0;
+	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
+	    ufshci_completion_poll_cb, status, param);
+	if (error)
+		return (error);
+
+	ufshci_completion_poll(status);
+	if (status->error) {
+		ufshci_printf(ctrlr, "%s failed!\n", fail_msg);
+		return (ENXIO);
+	}
+
+	return (0);
+}
+
 static int
 ufshci_dev_read_descriptor(struct ufshci_controller *ctrlr,
     enum ufshci_descriptor_type desc_type, uint8_t index, uint8_t selector,
@@ -29,19 +51,10 @@ ufshci_dev_read_descriptor(struct ufshci_controller *ctrlr,
 	param.value = 0;
 	param.desc_size = desc_size;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
+	error = ufshci_dev_send_query(ctrlr, param, &status, __func__);
 	if (error)
 		return (error);
 
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr,
-		    "Failed to send Read Descriptor query request!\n");
-		return (ENXIO);
-	}
-
 	memcpy(desc, status.cpl.response_upiu.query_response_upiu.command_data,
 	    desc_size);
 
@@ -88,18 +101,10 @@ ufshci_dev_read_flag(struct ufshci_controller *ctrlr,
 	param.value = 0;
 	param.desc_size = 0;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
+	error = ufshci_dev_send_query(ctrlr, param, &status, __func__);
 	if (error)
 		return (error);
 
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_read_flag failed!\n");
-		return (ENXIO);
-	}
-
 	*flag = status.cpl.response_upiu.query_response_upiu.flag_value;
 
 	return (0);
@@ -111,7 +116,6 @@ ufshci_dev_set_flag(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
-	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_SET_FLAG;
@@ -121,19 +125,7 @@ ufshci_dev_set_flag(struct ufshci_controller *ctrlr,
 	param.value = 0;
 	param.desc_size = 0;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
-	if (error)
-		return (error);
-
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_set_flag failed!\n");
-		return (ENXIO);
-	}
-
-	return (0);
+	return (ufshci_dev_send_query(ctrlr, param, &status, __func__));
 }
 
 static int
@@ -142,7 +134,6 @@ ufshci_dev_clear_flag(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
-	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_CLEAR_FLAG;
@@ -152,19 +143,7 @@ ufshci_dev_clear_flag(struct ufshci_controller *ctrlr,
 	param.value = 0;
 	param.desc_size = 0;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
-	if (error)
-		return (error);
-
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_clear_flag failed!\n");
-		return (ENXIO);
-	}
-
-	return (0);
+	return (ufshci_dev_send_query(ctrlr, param, &status, __func__));
 }
 
 static int
@@ -184,18 +163,10 @@ ufshci_dev_read_attribute(struct ufshci_controller *ctrlr,
 	param.value = 0;
 	param.desc_size = 0;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
+	error = ufshci_dev_send_query(ctrlr, param, &status, __func__);
 	if (error)
 		return (error);
 
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_read_attribute failed!\n");
-		return (ENXIO);
-	}
-
 	*value = be64toh(status.cpl.response_upiu.query_response_upiu.value_64);
 
 	return (0);
@@ -208,7 +179,6 @@ ufshci_dev_write_attribute(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
-	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_WRITE_ATTRIBUTE;
@@ -218,19 +188,7 @@ ufshci_dev_write_attribute(struct ufshci_controller *ctrlr,
 	param.value = value;
 	param.desc_size = 0;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
-	if (error)
-		return (error);
-
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_write_attribute failed!\n");
-		return (ENXIO);
-	}
-
-	return (0);
+	return (ufshci_dev_send_query(ctrlr, param, &status, __func__));
 }
 
 int

From nobody Tue Oct  6 07:51:25 2026
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 4hzT3L1WsVz6cWQh
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:26 +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 4hzT3K63d4z4H83
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:25 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273085;
	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=GPOzOdGSdQFltDyJBSaZ0swklIoXSD9+A+z88zVeJfQ=;
	b=jmTZkL5ahusOdRC+mtfegDpxW/OQ2JQkb6GcHOMJ1ojLGge4mecQeCuwFTT12VvjE8ioXi
	/bRMlJ0hDiCku5oYutHx49Ktcz9pjUn5qiOo7QMWbVA6nLp+3d0SEWFmVmDoPj8+GC1ES0
	Lvu3SKM3c8qGrVe5kQxut9SPheBq+sZKh565okVNgzSRo9Bd4O0IFcMXCXP1kEpRC0D/BK
	L2oKqXi3An54O8UjnH618kzBX4uV7FvrhaWhVXDLpr1wHru7+aPKFqjoP83Nm0KV9ZfAiW
	Q2RP5uSgH+n9gTEtk9PutwEJS2V1zDgR7TJDlWEfFEU3Nzkhx6FOlCTZaRQoEw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273085;
	b=pUMla49cbGt8EdVdD1UK3/yM5ekHwVrmVcvWIZf3+EAll5B1r0sacO+CPGYsxsTKv8p7Sq
	010F0nhEHD+XXLq62PXZjAtCCEi4FJGP1tz5sEkk3roc1qBIUo0jKRkMc98Ak3P/ZzjOof
	ET6kyWLH4rubpFUjnI/SLXU78TehyK5YfiLDXh6I8CAgQnuTFz23kY9gXfHauNGdJzhV2p
	Uwrbm/xbBUnpqXs88eIi75vrYXaiUZfX+0A5kohhB1O1FUTQfxzg4MucuXZNUdn+/GPaYX
	uumcuDpG2Gv4DTvvGXnPMi+33Mkbdh9zIo3Wd4hz9hoaunBLAwEGHuxgCm2XRA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273085;
	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=GPOzOdGSdQFltDyJBSaZ0swklIoXSD9+A+z88zVeJfQ=;
	b=Z4zSJ5TKe4mf3EOLd+GzEzKB2/E894CCcnqlsUcflVJu4mgHyvqUEpA7eFdNya3cLb7FJX
	3dUUVApTrBmLn3qtO6qRz1NGLz4SjWt+cL4893Qh1bkpRXfCweKpgoq+1C1885aCYuDtPC
	EIfnOSgQQ9cGxeczfc4IVCxhclwzhI00n/pFoNNuykRG6QIvpMD8WiR3t+KEd4KjB3HXtO
	OeiRVeUsRkfh2spmaPPb59KZRVgIBg9pSg4sUThm8062fgRadgtdaPHBFivC3DBgTAOh8U
	Kl7RcZxsTZCQ7WFavbQ3TnGhksAch5jnKrhaYlaDqvpUoOxi8DYGSJ+KK4g5oQ==
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 4hzT3K4qSNzxKd
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:25 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 477f0
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:25 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: a078bf6669da - stable/15 - ufshci: correct the crypto/config register offsets and HCMID fields
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: a078bf6669da860792fd2867beba5f5076b78bcd
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:25 +0000
Message-Id: <6ac4a87d.477f0.1fc977c1@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=a078bf6669da860792fd2867beba5f5076b78bcd

commit a078bf6669da860792fd2867beba5f5076b78bcd
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-18 05:06:54 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:03 +0000

    ufshci: correct the crypto/config register offsets and HCMID fields
    
    The reserved array after CCAP must be 508, but it was 511.
    This pushed the config, MCQ config, and ESI registers from 0x300 and
    0x380 up to 0x900. None of these registers are used yet, so nothing
    broke.
    
    Also fix the HCMID bank index field. The spec places it at bits
    [23:16], but it was defined on top of the manufacturer code at [15:0].
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58819
    
    (cherry picked from commit 34518292a3e077efe239b61f64b9d860bbfb2960)
---
 sys/dev/ufshci/ufshci_reg.h | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_reg.h b/sys/dev/ufshci/ufshci_reg.h
index 6d5768505102..87b4bee64b0a 100644
--- a/sys/dev/ufshci/ufshci_reg.h
+++ b/sys/dev/ufshci/ufshci_reg.h
@@ -61,7 +61,7 @@ struct ufshci_registers {
 	uint8_t vendor[64]; /* Vendor Specific Registers */
 	/* Crypto (100h) */
 	uint32_t ccap; /* Crypto Capability */
-	uint32_t reserved7[511];
+	uint8_t reserved7[508];
 	/* Config (300h) */
 	uint32_t config; /* Global Configuration */
 	uint8_t reserved9[124];
@@ -74,6 +74,23 @@ struct ufshci_registers {
 	/* TODO: Need to define SQ/CQ registers */
 };
 
+_Static_assert(__offsetof(struct ufshci_registers, is) == 0x20,
+    "operation and runtime section must start at 20h");
+_Static_assert(__offsetof(struct ufshci_registers, utrlba) == 0x50,
+    "UTP transfer section must start at 50h");
+_Static_assert(__offsetof(struct ufshci_registers, utmrlba) == 0x70,
+    "UTP task management section must start at 70h");
+_Static_assert(__offsetof(struct ufshci_registers, uiccmd) == 0x90,
+    "UIC command section must start at 90h");
+_Static_assert(__offsetof(struct ufshci_registers, vendor) == 0xC0,
+    "vendor specific section must start at C0h");
+_Static_assert(__offsetof(struct ufshci_registers, ccap) == 0x100,
+    "crypto section must start at 100h");
+_Static_assert(__offsetof(struct ufshci_registers, config) == 0x300,
+    "config section must start at 300h");
+_Static_assert(__offsetof(struct ufshci_registers, mcqconfig) == 0x380,
+    "MCQ configuration section must start at 380h");
+
 /* Register field definitions */
 #define UFSHCI__REG__SHIFT (0)
 #define UFSHCI__REG__MASK  (0)
@@ -155,8 +172,8 @@ struct ufshci_registers {
  */
 #define UFSHCI_HCMID_REG_MIC_SHIFT (0)
 #define UFSHCI_HCMID_REG_MIC_MASK  (0xFFFF)
-#define UFSHCI_HCMID_REG_BI_SHIFT  (8)
-#define UFSHCI_HCMID_REG_BI_MASK   (0xFFFF)
+#define UFSHCI_HCMID_REG_BI_SHIFT  (16)
+#define UFSHCI_HCMID_REG_BI_MASK   (0xFF)
 
 /*
  * UFSHCI 4.1, section 5.2.7, Offset 18h: AHIT

From nobody Tue Oct  6 07:51:27 2026
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 4hzT3N3Bb9z6cWGQ
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:28 +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 4hzT3N062Gz4HDV
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:28 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273088;
	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=e5JD5uvLLyw+bLeOVrvNRsIqytqP7tXnylqRAFHPO7A=;
	b=Aaxc2EZ80ThcMdVODDbYUUxJVsSzabFz9fs6Pk8R0x4mESGosTCT5WtoOF5zgL/vqOdq1a
	Hkcgk+Rw+iL2OowHL/taUQhxwIY05pdSBNQ/4xkZEn/UhpxwJmsp8ODBt5A9BLOGIU/y0N
	LMEb03aIgnzukkte5QKoVEWlXzvgfdQY2nYz+pVFvBumq7YJLRQbtD02t5sXU6nX+tIpj9
	3U3v/wknyHiXmgtIylvzLyZr4ZICIM+gnL1S7TTGnEMquLZd/qoEIgYWRkg6AxFP07Ecm1
	S++Mm6YwVLjQXTS11l5Qf5pTBBnup9+dH3Hd9LE4yy88IdTHFBTwQpVLq4dnIA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273088;
	b=xJ6gwvP0T84bj+HUNtWcg7eU1DbNfhKhtPuNNOYYDGKvS1Czs1bEPOQRa5aYUga/mfWk01
	azMgKdhY1iuKuh19DqH32WJ4lTMZg57HxNRyLHPyJBwDlgoVbQIj3jeXevgruEe6xBygMZ
	/BKTlewHUzPAX+tGxhTNnEo9f58Fv7XomxUWMy4df+Hk0Tl7DxfN8ysddCxljpb0jsRK2u
	SnRGg7ygoaBViHJI6emWn7dV93nCzd90oaveyv3JdR2tM+VazResj6djIKrkNgPK42Nfwi
	qwxQIUQsd9Uxn6XsGwHfqGisPk9z4xxA43zhmMfw8Ni+xJhPTRVm12wYaIBp0A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273088;
	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=e5JD5uvLLyw+bLeOVrvNRsIqytqP7tXnylqRAFHPO7A=;
	b=hzb3iTsvdJ7F23MClVOfxC7hu75FzPDNWsdlp5lldQDZboNsCgPhvB+4k8k2zSHjdXw4rm
	3hjc8FvTeOqfikqGEWRARiWNKQzG5KA2ei+xvCtelFFOn9fjJO1tAwkCvRbvvhTtxm2knV
	Ev7UlIR+MqnCmnR8B2BQKGmEv6b4ySNoA4Mc6TYpr9HqYp78dvI62gATMV6gpWKiTZ6luU
	D3HyVMWSV7M9+AsDQ34kVdyRjTYIMjELmL0sbAfjQYmAXKXxcD2PCjRqjVbLmWlcYwjGWZ
	9pOnA6Mvjr4vprmZadPRNJ7YhnhK3vIYaQBgr9HSZX+CkLHG8CIrDxeHtybiPw==
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 4hzT3M6Hr2zwwj
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:27 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18aa7
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:27 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 94e28f979a84 - stable/15 - ufshci: run the controller fail path only once
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 94e28f979a84251f7108c10db7efc8ccdf424b2e
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:27 +0000
Message-Id: <6ac4a87f.18aa7.39ac9949@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=94e28f979a84251f7108c10db7efc8ccdf424b2e

commit 94e28f979a84251f7108c10db7efc8ccdf424b2e
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-27 04:58:21 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:04 +0000

    ufshci: run the controller fail path only once
    
    Two threads could run ufshci_ctrlr_fail() at the same time.
    Each one walked the queues and completed the same trackers
    again, which caused a double free and a panic.
    
    Turn is_failed into an atomic gate, so only the first caller
    walks the queues. The reset task now returns early on a failed
    controller instead of re-enabling it.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58944
    
    (cherry picked from commit 1258ae2bcb559854c966e425f4c5c48668d3cf7b)
---
 sys/dev/ufshci/ufshci_ctrlr.c   | 12 +++++++++++-
 sys/dev/ufshci/ufshci_private.h |  2 +-
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index bb07ad5f76da..2f930d55a295 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -15,7 +15,13 @@
 static void
 ufshci_ctrlr_fail(struct ufshci_controller *ctrlr)
 {
-	ctrlr->is_failed = true;
+	/*
+	 * The attach thread and the reset task can both fail the
+	 * controller. A second queue walk would complete the same
+	 * trackers again.
+	 */
+	if (atomic_swap_32(&ctrlr->is_failed, 1) != 0)
+		return;
 
 	ufshci_req_queue_fail(ctrlr, &ctrlr->task_mgmt_req_queue);
 	ufshci_req_queue_fail(ctrlr, &ctrlr->transfer_req_queue);
@@ -312,6 +318,10 @@ ufshci_ctrlr_reset_task(void *arg, int pending)
 	struct ufshci_controller *ctrlr = arg;
 	int error;
 
+	/* A failed controller must not be re-enabled. */
+	if (ctrlr->is_failed)
+		return;
+
 	/* Release resources */
 	ufshci_utmr_req_queue_disable(ctrlr);
 	ufshci_utr_req_queue_disable(ctrlr);
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index c738e246e96c..7b74faf95c53 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -423,7 +423,7 @@ struct ufshci_controller {
 	uint32_t max_tx_lanes;
 	uint32_t max_rx_lanes;
 
-	bool is_failed;
+	uint32_t is_failed;
 };
 
 #define ufshci_mmio_offsetof(reg) offsetof(struct ufshci_registers, reg)

From nobody Tue Oct  6 07:51:26 2026
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 4hzT3M11Tgz6cWQm
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:27 +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 4hzT3L6R7Vz4H8H
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:26 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273086;
	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=Bxsp9Oz9oYlyVZpf8ZmCaO9ECq/oJK2Fl/rWAfKLvNw=;
	b=e8kCwagdWEnYmEkck9xQXPO08LZNh6/8oNQZUxgSFIzqgDm8ch7HKQOnfnyq7LI0DwQSGI
	KiIT2pyoll76iwLBBoU316Zvht5Ip+VuwJnNrfj8RN2o8TP/GzfUXrxbd+eZwGqeXxH+6g
	cRRmOz+zpgRO9ol6gtiDNDhU04JCUfGqrgADMkCZcvHuEyl/VaESU+/3hJZdC/8wrOGd4E
	Wn5S7Sda6Aun2jpNyTwISaPJTw/b6mHerW6V9YNgQqdTogmEnvC2UGCc3chDrW6bKn06FZ
	4S/5oZJcVVTQsYYQmX8zzzZ37Q6Ny+lXz7JBwPU6FYjCVdTo4fcK4SfXUQz8YA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273086;
	b=mykb2VutZmaFvj0YOxieGjujXZGFyqxgwKoxj3veSl3SaXIKVT3ukKunxJe9sENLCQuU4A
	K1Dq8q/JXtwKKypi7yoWPBVq6gw6x5QApc7ui6ZtLDFM2ot3ObqC6BnmDE3hKGD1TP2MkG
	k1Zkpu31rdo53ATyai6FDss1FeUUo8T5PRudJKyTovHNhvEi1ztHMKMSYrdXUqvtQYmchq
	z+WGjml7dEdOHEJXG6PFw0L7PXRXMFzIrZlrKIigGEpenHvy8LlcelZeAgSIucYChQEwNN
	DWOq9jZ7kcUOun54ve7vCmUxVGqNuBnNuq+nBzE3ISKvIkRhCI/4biQrK7jkxg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273086;
	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=Bxsp9Oz9oYlyVZpf8ZmCaO9ECq/oJK2Fl/rWAfKLvNw=;
	b=UVZko8Q+TeW8yCmNCf3BKHnDtU128hwi2QD05tUMZG1lxt+mCZgxL5gLp+xwLMdvnccYlF
	w6KYJTAdamlX7WQbbvDn51hL89z8VtywBtY4Ewl8J5hAz+fcUjI+Bv/1cFZpsGQghfp8fu
	zbTLiP7A8Ngz1HOroU0DqvhhZ7Z+RIjqZOYI/3Z8DpIzD6VcS3frFDMmDlpLcTEhcBs3cH
	LpvEFOHMT7QME5a33nhT9RgKY2z0OHZsbSHeFP7b7JbTORbyymsebYjiJNqq1f7W3x3BEe
	QMkC9iF8vK5E9Owx5iaPCYupdsbnKkADazw1VaxSUSoSGkq4TiHj0ABPdXRNFQ==
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 4hzT3L5WjGzxpM
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:26 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18529
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:26 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 5f607128c9fb - stable/15 - ufshci: report the highest LUN number in the path inquiry
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 5f607128c9fb20d487b8b040a65172a9bd83387e
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:26 +0000
Message-Id: <6ac4a87e.18529.4cf18efc@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=5f607128c9fb20d487b8b040a65172a9bd83387e

commit 5f607128c9fb20d487b8b040a65172a9bd83387e
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-18 05:09:21 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:04 +0000

    ufshci: report the highest LUN number in the path inquiry
    
    cpi->max_lun is an inclusive upper bound, but the driver reported the
    LUN count (8 or 32), so CAM probed one nonexistent LUN past the end.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58820
    
    (cherry picked from commit 68091ebf0a72b58424e6b57d6ff9687af9043003)
---
 sys/dev/ufshci/ufshci_sim.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 8ac47fc4a2dc..2d9a425f6439 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -271,7 +271,7 @@ ufshci_cam_action(struct cam_sim *sim, union ccb *ccb)
 		cpi->hba_misc = need_scan_wluns | PIM_UNMAPPED | PIM_NO_6_BYTE;
 		cpi->hba_eng_cnt = 0;
 		cpi->max_target = 0;
-		cpi->max_lun = ctrlr->max_lun_count;
+		cpi->max_lun = ctrlr->max_lun_count - 1;
 		cpi->async_flags = 0;
 		cpi->maxio = ctrlr->max_xfer_size;
 		cpi->initiator_id = 1;

From nobody Tue Oct  6 07:51:28 2026
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 4hzT3Q1bsjz6cWc9
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:30 +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 4hzT3P0wXSz4H8c
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:29 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273089;
	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=LM5J9NAxK0viWrg7+pM3UG+F6FttroJ2db9itq0yGRQ=;
	b=yddRkLlVjihe3YHMZzSOoZFJReVh0h/SPfbUdCOFyWAN0J7KnJ9ANK2ObwENg69UBJ5a/h
	RMxbXIRTO/M2eqqqyoweHnVKMBbspgeCsB2vVjzZF+HbT4M/DnmSzHFSk//GQrcJuHUYBM
	HJ1ZvP1b5DC7HziYtPKpVEcSQjNUi0fGY1dCH3CJs6UQ9Frfy8t8NlQF9ml/bO/Yr6JGIq
	Md3gs3GVZnwqW8VZqThd5F6moCeiNG8MDWI8aEIVPyrX1ELa0T4mLGe4iv1aRGFnjPFvLA
	bzP/h068wmGdepDiW1uWYssr2Mtdd05OZNea0qdG2ZCB5ZV3WNfOoPiKckIRTg==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273089;
	b=lFk24OHdC7PjcH60NdcEDPoW7to/QjSk3vp2rNs+ISAb0lUUxTv1KtrBB4SIR+CKdF0rW8
	58te4ox7bFo3hIWQJbGFwEUBGLH0hr3jCPfPkgXf/xmVq4ojOZSlssjOTpW7YdHBuv7lE2
	iVCpBI3bAj2/VrE0iG4Lpmmp2F4Zm0GzEqhoBNcI4+7mKw0H5YznO1aguKUc9KxfziydPb
	YXjWjNT6QwgsjZZr6mwTKYNH19pGdqx5aI9qfR3mGuFbdurfF+Xf3brcZHCeu5rktCRbvL
	ITLi2i+Wg6Xcu1kADNe1Dbu7CVWQ+XbdT8Xde+BuAeSI4PC2uV6xsUxs8GlQDQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273089;
	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=LM5J9NAxK0viWrg7+pM3UG+F6FttroJ2db9itq0yGRQ=;
	b=YxajNJx7x8cY2oKFewsqeIEGRTJHicoTBjl8jrYmMucjcteWguODwn/Gj0dunDVA714DD5
	uoInAQ7vNcwTOJdGNztkXiGN4nsglNhSiYmuS23TotQkKke75wjMSFCFPP2vYeMQLeA6jA
	QXyo5h/6E3Voaj2t82rOxcvRWeJNb6b8/ZnRoWldzzyk3SFsm0lHwXGkMmKJQF7a59HaS6
	m3157UDeDdVKNj+M2qZBKH8oqNx76sr+dLtjzMYZmU525/I23SVulsPuVGZdG0UvSfyhGn
	W03Ew2emuquwbqXpOp3qRNQnVQuey/2f7COmsG9C0cnR7U8jpLKrPKFTegA+1A==
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 4hzT3N722Vzxr2
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:28 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18f1b
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:28 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: d4e7c457a762 - stable/15 - ufshci: claim trackers before failing them
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: d4e7c457a762403faab9bb1c71844353fda7b275
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:28 +0000
Message-Id: <6ac4a880.18f1b.6d24723b@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=d4e7c457a762403faab9bb1c71844353fda7b275

commit d4e7c457a762403faab9bb1c71844353fda7b275
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-27 05:00:41 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:05 +0000

    ufshci: claim trackers before failing them
    
    ufshci_req_queue_fail() drops the queue lock to complete each
    tracker. In that window the completion path could complete the
    same tracker again.
    
    Claim the slot before dropping the lock, so the completion scan
    skips it. Reserved slots are left to their submit thread, which
    completes them itself. The manual request completion helper
    lost its only caller, so drop it.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58945
    
    (cherry picked from commit 7682b8f37669671844fedd94a382ec0c459b9b2c)
---
 sys/dev/ufshci/ufshci_req_queue.c | 60 +++++++++++++--------------------------
 1 file changed, 20 insertions(+), 40 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index db96d13fad24..97eccd082176 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -182,29 +182,6 @@ ufshci_req_queue_manual_complete_tracker(struct ufshci_tracker *tr, uint8_t ocs,
 	ufshci_req_queue_complete_tracker(tr);
 }
 
-static void
-ufshci_req_queue_manual_complete_request(struct ufshci_req_queue *req_queue,
-    struct ufshci_request *req, uint8_t ocs, uint8_t rc)
-{
-	struct ufshci_completion cpl;
-	bool error;
-
-	memset(&cpl, 0, sizeof(cpl));
-	cpl.response_upiu.header.response = rc;
-	error = ufshci_req_queue_response_is_error(req_queue, ocs,
-	    &cpl.response_upiu);
-
-	if (error) {
-		ufshci_printf(req_queue->ctrlr,
-		    "Manual complete request error:0x%x", error);
-	}
-
-	if (req->cb_fn)
-		req->cb_fn(req->cb_arg, &cpl, error);
-
-	ufshci_free_request(req);
-}
-
 void
 ufshci_req_queue_fail(struct ufshci_controller *ctrlr,
     struct ufshci_req_queue *req_queue)
@@ -221,23 +198,26 @@ ufshci_req_queue_fail(struct ufshci_controller *ctrlr,
 	for (i = 0; i < req_queue->num_trackers; i++) {
 		tr = hwq->act_tr[i];
 
-		if (tr->slot_state == UFSHCI_SLOT_STATE_RESERVED) {
-			mtx_unlock(&hwq->qlock);
-			ufshci_req_queue_manual_complete_request(req_queue,
-			    tr->req, UFSHCI_DESC_ABORTED,
-			    UFSHCI_RESPONSE_CODE_GENERAL_FAILURE);
-			mtx_lock(&hwq->qlock);
-		} else if (tr->slot_state == UFSHCI_SLOT_STATE_SCHEDULED) {
-			/*
-			 * Do not remove the tracker. The abort_tracker path
-			 * will do that for us.
-			 */
-			mtx_unlock(&hwq->qlock);
-			ufshci_req_queue_manual_complete_tracker(tr,
-			    UFSHCI_DESC_ABORTED,
-			    UFSHCI_RESPONSE_CODE_GENERAL_FAILURE);
-			mtx_lock(&hwq->qlock);
-		}
+		/*
+		 * A slot in UFSHCI_SLOT_STATE_RESERVED is visible here
+		 * only while its submit thread is failing a PRDT setup.
+		 * That thread completes the request, so leave the slot
+		 * alone.
+		 */
+		if (tr->slot_state != UFSHCI_SLOT_STATE_SCHEDULED)
+			continue;
+
+		/*
+		 * Claim the tracker under the lock. The completion
+		 * scan only completes SCHEDULED slots, so it will
+		 * skip this one while the lock is dropped.
+		 */
+		tr->slot_state = UFSHCI_SLOT_STATE_NEED_ERROR_HANDLING;
+		mtx_unlock(&hwq->qlock);
+		ufshci_req_queue_manual_complete_tracker(tr,
+		    UFSHCI_DESC_ABORTED,
+		    UFSHCI_RESPONSE_CODE_GENERAL_FAILURE);
+		mtx_lock(&hwq->qlock);
 	}
 
 	mtx_unlock(&hwq->qlock);

From nobody Tue Oct  6 07:51:30 2026
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 4hzT3Q4M0lz6cWcC
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:30 +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 4hzT3Q1xpXz4HH8
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:30 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273090;
	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=SCj2Yr1N3+kopTH1WyK3P3ucgoHilyuMAsViq9WNtFI=;
	b=fdOpDlZE7zji3IX4MZ1/WPaNYJ2JE9O5ZwjJkED50tczmEvp24vAq8nKC4IZ68Ckcualn5
	rDacPJTLw5zd+UQbHYTEIEDO2TBdu7kcQBvj011ksJNzj43OH/IolxO5B7mdddBBeNcf5g
	vEKztG5L5mZa/VRtS6H03uOdq3pHzZ6mpNKA7d92CEFgA5l7XgSEEcJ5mAYBKVYQSNTMxy
	t20cl+w8EppEIk07yHfDZ8WAdIa+lsxbFPGNzwlB3iAV69IV3zeUQqWdTAc5pA7f8+fyvz
	I4sNTxhsixVXmJXuTezSjKd7Y/DK298yDL7ORfkM8gO/7GWq7u3EEjGINzp0Rw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273090;
	b=IAfaSF2kEBWqOP1KEx3CwL8aEkOKQqf1dgPrv5Q9hyAuyROk+M5n306+HhNiae03VrDPg+
	Wuam29yImplrkoei7v64/6zRcl6U0czeehW5cglgSjKEvvlrexwTGwuK9TE5vGxKkrO1e6
	PQvyeh9fI4cF6HARglSRCyvxxb1qHLQBahNosTiYbGCaWklHiF8WaGP3hZC/sb1ptxIKnR
	365c8IwWKv+JKXipXFgepzX6cC9BN1cERl4ZDmCt+pRY25xW6ALP2LAR5FfLOknI/TrNLf
	7Ns2x0LUihvzH2zQdQSsqaEMplpOIZ+nt4q2fy9pUvuLAvrkorloja3YnmkqTA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273090;
	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=SCj2Yr1N3+kopTH1WyK3P3ucgoHilyuMAsViq9WNtFI=;
	b=NcQu5TWuUU7e+zK2BnA2pRmWa+PVTL60ruQC8coskxsxATLuFm5RHGQCEWccJ+pjOufaLh
	fdmGw9AiDu9ya8rHp8B+vVFtaZhDEZki3uPJLEIkslvj9wRKCHZpQPE4AeJ4YaiXsuNCAU
	xDFmYHFto+DKd2aFMO22eEwVYcuWJop89J91PrmM61OZMoS5a3m0LKcaap4PzO5YtDw8QO
	LPULfejFLYm4fqtp4byCqEa5y47hG/EeAhSjBAMevAI0961u/W/VphoT+sP9Gb/KGAL77R
	LNlTQFMWwbffkbrjQjd8DQGkRQ9iw1/LX3/ezhbIQWTeM4E0/cXVnK9qvVqzvA==
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 4hzT3Q0kpYzxKg
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:30 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18a43
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:30 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: c8095bbcad86 - stable/15 - ufshci: build valid fake responses for manual completion
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: c8095bbcad867e6342ab1cd498318a7276a52484
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:30 +0000
Message-Id: <6ac4a882.18a43.40300310@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=c8095bbcad867e6342ab1cd498318a7276a52484

commit c8095bbcad867e6342ab1cd498318a7276a52484
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-27 05:02:10 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:05 +0000

    ufshci: build valid fake responses for manual completion
    
    The manual completion wrote the fake response to the wrong
    descriptor for task management slots. It also left the task tag
    at zero, which tripped the task tag check under INVARIANTS.
    
    Write the fake response where the completion path reads it.
    Copy the task tag from the request.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58946
    
    (cherry picked from commit 746278a6ddc80a98001f875cd975283d7c99b960)
---
 sys/dev/ufshci/ufshci_req_queue.c | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index 97eccd082176..2e13d244daef 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -168,16 +168,30 @@ static void
 ufshci_req_queue_manual_complete_tracker(struct ufshci_tracker *tr, uint8_t ocs,
     uint8_t rc)
 {
-	struct ufshci_utp_xfer_req_desc *desc;
+	struct ufshci_req_queue *req_queue = tr->req_queue;
+	struct ufshci_hw_queue *hwq = tr->hwq;
 	struct ufshci_upiu_header *resp_header;
 
-	mtx_assert(&tr->hwq->qlock, MA_NOTOWNED);
+	mtx_assert(&hwq->qlock, MA_NOTOWNED);
 
-	resp_header = (struct ufshci_upiu_header *)tr->ucd->response_upiu;
+	/*
+	 * Write the fake response where the completion path reads it.
+	 */
+	if (req_queue->is_task_mgmt) {
+		resp_header = (struct ufshci_upiu_header *)
+		    hwq->utmrd[tr->slot_num].response_upiu;
+		hwq->utmrd[tr->slot_num].overall_command_status = ocs;
+	} else {
+		resp_header = (struct ufshci_upiu_header *)
+		    tr->ucd->response_upiu;
+		hwq->utrd[tr->slot_num].overall_command_status = ocs;
+	}
 	resp_header->response = rc;
-
-	desc = &tr->hwq->utrd[tr->slot_num];
-	desc->overall_command_status = ocs;
+	/*
+	 * The hardware never wrote a response. Copy the task tag from
+	 * the request so the completion checks pass.
+	 */
+	resp_header->task_tag = tr->req->request_upiu.header.task_tag;
 
 	ufshci_req_queue_complete_tracker(tr);
 }

From nobody Tue Oct  6 07:51:32 2026
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 4hzT3S6xt5z6cWcL
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:32 +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 4hzT3S3VSPz4HCN
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:32 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273092;
	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=jwdTYawxyby3Hk9R0f+L4NR3DCM1lut0ZGC72tMh9BU=;
	b=mpmn0OJtY4+aT9z9nCfw7kJga2aD+5O82080H6TJyHGIQeh4qeYrEgcr7uShV0n1qcK+Sc
	XBdGSC9JlNLzwCJepXn4qx4TnXKk+o9x5g8iXDMsqbIt9PTkgyBHQg7foDDBb1YMeZMCuE
	UXqCUi68XtRGGMVcFFcZophf/KrV/vJ9W6dXItRbjeqidU2VU/FeeVaTcPFd5N+AU5xwSO
	eW7Ou10j3P/WqumxMHMj7yBRI8pPF1IxZ6bJ7/apmvADjpcleZYU1oFIKJJgDxAc1PBAsG
	AczsEfDmaGSbyDjd051Rf36wdi6zilJrqI6mbqC/VGNHXCie/VObNImbE1lfRw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273092;
	b=jKput8/YfI3kWYqC3mNtDxStZsP8k46uEgRUmSOvt/uZdNPripVLw0S7s5mVGlaSnRHcDh
	VaAPSQ5TzMkskS5ph65aG8u+FJy44hO8YRa3Q7HnOJdQ488OoF9X6ymxc+Td+W5Gm8Ps6Y
	reodBUr3l7mF6V3I2fAbWBBA5uyhRdEqY0VFFmiAywgy1hDBDWHAI30v0zGeOaF8oEzso0
	G7szxQ87rCw3hMmFpAllSA0IysMk0EYp+IQdS0TxFJ3NZ2esbo8QLnTAEyfnFfaqEqBGqL
	Fmi7VXuWn1itizb+sM2QbGa7rGQrS01xfXh0UtOYoP2azVL1liO2bcwZLu7wmg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273092;
	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=jwdTYawxyby3Hk9R0f+L4NR3DCM1lut0ZGC72tMh9BU=;
	b=yYZuUlxi3O+saH5X7yuWhVFjIBCUaRAmGEvXtbDDOQiTSyB3/Lr2mr5C7b3yC89RfHpTrk
	grh8xFuV4U28X3zJb8H5x2QxiBAFrKH40WaUCkvEbf/QZbdSONo+YbnM0qYTIdqIbLaHJj
	J52E1GiyJnhoXt21Hyt7qf7jtpqUX67Q30srF2YdZ4noKSmud6yNFywZRy8vribeN5B2XB
	qetrFqDE4Y4Iesd06CV899hxtHH3vJ7nZJA9Ud1/ELRqiCkHerm+4SFWYTAWR7M5akqEOU
	wWm25x80v9RGgrsJmgA9RkDFtbn85SQ8IwsbmkVzNnnpRzF1NnP1pabpaHBvIQ==
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 4hzT3S2S6hzxcf
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:32 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 1879c
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:32 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 3e6ff534b634 - stable/15 - ufshci: reject new requests on a failed controller
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 3e6ff534b634831cbc5faeda22cb3bbe77979fcb
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:32 +0000
Message-Id: <6ac4a884.1879c.4ec64527@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=3e6ff534b634831cbc5faeda22cb3bbe77979fcb

commit 3e6ff534b634831cbc5faeda22cb3bbe77979fcb
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-27 05:04:11 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:06 +0000

    ufshci: reject new requests on a failed controller
    
    A failed controller accepted new requests, but nothing ever
    completed them, so the caller waited forever. The admin retry
    path could also resubmit a request to a dead queue.
    
    Reject new submits and admin retries on a failed controller.
    The submit check runs under the queue lock, so it cannot race
    with the queue walk in the fail path.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58948
    
    (cherry picked from commit 3ecee9314d88e2bb277b365d9413e219fd9a1283)
---
 sys/dev/ufshci/ufshci_req_queue.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index 2e13d244daef..886cf9aff77f 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -270,8 +270,8 @@ ufshci_req_queue_complete_tracker(struct ufshci_tracker *tr)
 	error = ufshci_req_queue_response_is_error(req_queue, ocs,
 	    &cpl.response_upiu);
 
-	/* Retry for admin commands */
-	retriable = req->is_admin;
+	/* Retry for admin commands. A failed controller must not retry. */
+	retriable = req->is_admin && !req_queue->ctrlr->is_failed;
 	retry = error && retriable &&
 	    req->retries < req_queue->ctrlr->retry_count;
 	if (retry)
@@ -765,6 +765,9 @@ _ufshci_req_queue_submit_request(struct ufshci_req_queue *req_queue,
 
 	mtx_assert(&req_queue->qops.get_hw_queue(req_queue)->qlock, MA_OWNED);
 
+	if (req_queue->ctrlr->is_failed)
+		return (ENXIO);
+
 	error = req_queue->qops.reserve_slot(req_queue, &tr);
 	if (error != 0) {
 		ufshci_printf(req_queue->ctrlr, "Failed to get tracker");

From nobody Tue Oct  6 07:51:31 2026
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 4hzT3S0Yv6z6cWJS
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:32 +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 4hzT3R2tJLz4H8w
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:31 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273091;
	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=+QYWwj72jT+nSVHm7tV8MhdQKminfT87Aq445YS9PQY=;
	b=oD54u2rsQ8hADVQUxCV0DilzsXaWV3jbP2eSa0VFIA8INqNskKgNWnilTTXDNRm/ipzHTZ
	+k/1PAliCm19/JDR3CYZgPxdDgJJNNKY5ojQbgeCOuGi6nnUNPviqZgad9sQrznweIchEJ
	YYN8YbGVuDChdWc7yDRlZIwUTR46nRjrNW2c1YpettvUz0S1O9ti2l2xCn8R6wUFsNxJwT
	Xi4rtQN74cEDiwO/qSGbB0WTb9ZY9Rpci6fCUlQOkTuCLS9SduwVT1j4nGF6pP9NihRqVN
	N0X1JJ+faZgE1CbjkGowmK8Rttvf/ub6LfB+gqr+nIX0WCtJfpJwCT6ybe4YLQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273091;
	b=JesAZUMGXGMxfMq5o4N7P6hNieWmJLFftVhezdD2Hew/AimeBZnl5lzUf53yo0huzlWv64
	A4wIuWgNNHrgmBK+TveUIHUJG4eTB8qmkJu84Yhm+/xjRwwH8UIqrbnxdicUeBKhAFXrKW
	7AaFGgy4pT+Gg9KWkybRddUsACMTgm2VfwYXM97TWj9tuUf29sW8qp2G2BA3AZTBYJ/Wor
	cn4HQ3dNt6eINKTZokhpq2NamCDEqLxbJevi/y4faJFFx4qnXMzIazMIGI0U7SqOrh2M38
	+svVY+mF4k8nJ6IkGarQSxqkZvIyNyQXjFetvNiy2K/Y7lCvgKh9z8mcvumPbQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273091;
	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=+QYWwj72jT+nSVHm7tV8MhdQKminfT87Aq445YS9PQY=;
	b=qXAfYKvu52F4VB77spuj9IMQLzf/rj5fv54Kc73oP16imutolGJDRI2E2DpFF7QFfonqLW
	M0xTSiN9G0VO4p2KR2hkzldKhYugYlV+iK30cfIABfH2R93x6bz8/jEMHX5fcGUFGnjXeo
	bTnnmn59ljYKZsFobEQWAipWRFN3WJGIiFDi6oxR6rFUzTIdVkz5mhV/MBIvXbqAo30WE8
	PKq9o7ts+GJ0BpejCO739UKbmmtnG5XmCK+i52ShVYeoz2IQQ913ENXgiACCQJxEd0/gvi
	Xzct9guG3AgMrAUlN95/jFUZ1lN8hH1S2d9II9uSUKLznUoKb7GH0CGZ1wfSLg==
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 4hzT3R1lWwzx0C
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:31 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18932
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:31 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 36e915b5eacb - stable/15 - ufshci: handle a recovery reset before the SIM attach
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 36e915b5eacb667a7f65aa6b89083022cf675bff
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:31 +0000
Message-Id: <6ac4a883.18932.4cdf3a9c@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=36e915b5eacb667a7f65aa6b89083022cf675bff

commit 36e915b5eacb667a7f65aa6b89083022cf675bff
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-27 05:03:02 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:06 +0000

    ufshci: handle a recovery reset before the SIM attach
    
    When the first start attempt fails early, the recovery reset
    runs the start sequence again without a SIM. That pass still
    looked up the WLUN, so it dereferenced a NULL SIM and panicked.
    
    Attach the SIM whenever it does not exist yet. Also make the
    WLUN lookup return NULL when there is no SIM.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58947
    
    (cherry picked from commit e59d4ec66fcab3da813f593f52bb8f1577cbb403)
---
 sys/dev/ufshci/ufshci_ctrlr.c | 7 ++++---
 sys/dev/ufshci/ufshci_sim.c   | 4 ++++
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index 2f930d55a295..69b6869e98e2 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -151,10 +151,11 @@ ufshci_ctrlr_start(struct ufshci_controller *ctrlr, bool resetting)
 	/* TODO: Configure Background Operations */
 
 	/*
-	 * If the reset is due to a timeout, it is already attached to the SIM
-	 * and does not need to be attached again.
+	 * A reset normally arrives after the SIM is attached. But if the
+	 * first start attempt failed early, the reset path runs without a
+	 * SIM. Attach it whenever it does not exist yet.
 	 */
-	if (!resetting && ufshci_sim_attach(ctrlr) != 0) {
+	if (ctrlr->ufshci_sim == NULL && ufshci_sim_attach(ctrlr) != 0) {
 		ufshci_ctrlr_fail(ctrlr);
 		return;
 	}
diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
index 2d9a425f6439..d9ea84961879 100644
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -454,6 +454,10 @@ ufshci_sim_find_periph(struct ufshci_controller *ctrlr, uint8_t wlun)
 	uint64_t scsi_lun;
 	uint64_t timeout;
 
+	/* The reset path can get here before the SIM is attached. */
+	if (ctrlr->ufshci_sim == NULL)
+		return (NULL);
+
 	scsi_lun = ufshci_sim_translate_ufs_to_scsi_lun(wlun);
 
 	if (xpt_create_path(&path, /*periph*/ NULL,

From nobody Tue Oct  6 07:51:33 2026
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 4hzT3V2x8kz6cWZD
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:34 +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 4hzT3T49jdz4H1v
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:33 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273093;
	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=P8pRFrKA2R4bJtel1HVjlwZ6f1YxR3UUQl226jJIdUo=;
	b=wv7gu+H2ZnllO5DOIX5tVf6QOU/paiF710E5Ark9mFQzFkP5P8VGA1XF0u8vPC4qJwiDEi
	GtLueUWEaECUmPoo1S7ID80LJkConqCw88Nt8y7t0NcTTXAjzjwi7HhqQ7qAeYXwTjE6Ge
	hxG0r6RXRCH/wDn6DXuwomGIitgNunxhWkCAB090jUDVXHkeV00J1QF8hDru5GyWgDQr6c
	F+ebpRMFF1iiEGXEfTaaX6KgkbgJfDeeInt6H6brIojsv18YNZ85tp8TGHVf80MfyPN71G
	SxnX6lDTAfkofqZLy3R0yy3aJHmEJ99rsto4SygmcRPUcHVE7NAYOpqe9NU6MA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273093;
	b=JLMnIRkkqKtSr5d4eU6uQ02VmhqON4sYPuveVFbsvE+JgM0uRL9Eg1yBxAR9vPCFSOn23M
	FPxzhJJcaIEhqE6wORdz19NjR4MgFO8Clux+40adWoCj9c2IUgborsOHDd6Zt3ptiK/VzN
	cSvSaCvvB9TXb/6TlpAYWfz3M+b+py9yFBpFV0fvnbifSuA7HT+GRZCH70MWLyY5eTp6EQ
	RlmsjPJN6EPhSffTGgDOGbQkaatirXok6nqbUaBS20gxzd+iOT3SrwP9PcDpiyxiA0RqyK
	89TOY4MdGUbO5oe6KUZheexTyXwFaJJtN0WkuHHSDOl9xhoZRG+0C89Dw0DIyw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273093;
	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=P8pRFrKA2R4bJtel1HVjlwZ6f1YxR3UUQl226jJIdUo=;
	b=vRwKlx2zlHYVI+Tpbv7PqgQEwIeatqB8uESF8XCOG/Wn57w6S1BwHiTUfWdBqHl7c5GH4v
	bjJHBsrZVFT4rc4GKExLQwDNf9ET7Wy9kC8aNLg6n8DTKdPXnekhMPk5VI5BJLz1j45l+Q
	26nG5VIlsBGhz1sLnRrJeARwtcZs4de6wiT/6wstYjTn25qrimfxIL7/u3vWU72k8UZ9R4
	iuEPeRgGjt9G2bBQ6Utr/PEoYbeh3ybpaf2nYw0/cfaiSjosbe5G2iyuKkQzpmRbkKYpnJ
	Ree/Z4lOntqe0s5wCdTOPOqpKnPxDp7GOS87ulFXWiAY9gpl45VWToJZ7ArLCQ==
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 4hzT3T34mzzxcg
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:33 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18a47
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:33 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 8dcd02bdf8a6 - stable/15 - ufshci: fix the Snapdragon X Elite reference clock
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 8dcd02bdf8a6f25fd541a4f0df9131395bfefc47
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:33 +0000
Message-Id: <6ac4a885.18a47.5515fb5e@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=8dcd02bdf8a6f25fd541a4f0df9131395bfefc47

commit 8dcd02bdf8a6f25fd541a4f0df9131395bfefc47
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-09-02 01:47:18 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:07 +0000

    ufshci: fix the Snapdragon X Elite reference clock
    
    The driver's ACPI table set bRefClkFreq to 19.2 MHz. The
    Snapdragon X Elite feeds the device 38.4 MHz from its CXO. The
    firmware has no property for it. The device ran its PLL from
    the wrong base. Every HS mode failed. PWM still worked. The
    attribute is persistent. The wrong value survived reboots.
    
    Set 38.4 MHz in the table. Read the attribute first. Write it
    only when the value differs or the read fails. Log a changed
    value and a failed read. Verified on the Galaxy Book 4 Edge.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D59297
    
    (cherry picked from commit 973783515e7db6e19550c57c8f9d94d907e3bd0e)
---
 sys/dev/ufshci/ufshci_acpi.c |  6 +++++-
 sys/dev/ufshci/ufshci_dev.c  | 17 +++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/sys/dev/ufshci/ufshci_acpi.c b/sys/dev/ufshci/ufshci_acpi.c
index 94da0d3cb411..f96a4c29e15e 100644
--- a/sys/dev/ufshci/ufshci_acpi.c
+++ b/sys/dev/ufshci/ufshci_acpi.c
@@ -51,8 +51,12 @@ static struct ufshci_acpi_device {
 	uint32_t ref_clk;
 	uint32_t quirks;
 } ufshci_acpi_devices[] = {
+	/*
+	 * The SoC feeds the device 38.4 MHz from its CXO. The firmware
+	 * has no property for it. Verified on the Galaxy Book 4 Edge.
+	 */
 	{ "QCOM24A5", "Qualcomm Snapdragon X Elite UFS Host Controller",
-	    UFSHCI_REF_CLK_19_2MHz,
+	    UFSHCI_REF_CLK_38_4MHz,
 	    UFSHCI_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH |
 			UFSHCI_QUIRK_BROKEN_LSDBS_MCQS_CAP },
 	{ 0x00000000, NULL, 0, 0 }
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 063b65aaf579..dd467f85c795 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -242,10 +242,27 @@ ufshci_dev_init_reference_clock(struct ufshci_controller *ctrlr)
 {
 	int error;
 	uint8_t index, selector;
+	uint64_t value;
 
 	index = 0;    /* bRefClkFreq is device type attribute */
 	selector = 0; /* bRefClkFreq is device type attribute */
 
+	/*
+	 * bRefClkFreq is a persistent attribute. Skip the write when
+	 * the device already holds the wanted value.
+	 */
+	error = ufshci_dev_read_attribute(ctrlr, UFSHCI_ATTR_B_REF_CLK_FREQ,
+	    index, selector, &value);
+	if (error != 0) {
+		ufshci_printf(ctrlr, "bRefClkFreq read failed, writing %u\n",
+		    ctrlr->ref_clk);
+	} else if ((uint32_t)value == ctrlr->ref_clk) {
+		return (0);
+	} else {
+		ufshci_printf(ctrlr, "changing bRefClkFreq from %u to %u\n",
+		    (uint32_t)value, ctrlr->ref_clk);
+	}
+
 	error = ufshci_dev_write_attribute(ctrlr, UFSHCI_ATTR_B_REF_CLK_FREQ,
 	    index, selector, ctrlr->ref_clk);
 	if (error)

From nobody Tue Oct  6 07:51:35 2026
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 4hzT3X0npcz6cWYT
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51: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
	 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 4hzT3W6Cmtz4HSj
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:35 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273095;
	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=JTWFQcgl70he4fwpLLl5LJRgJJYvM5s3qdIjR3xd7hU=;
	b=j+0A9cVOJ/FZMemjQNo2TnrcWHSjwambalfTCxALodvLzcBJS5CFSuMVnCBvLl4/jq94nK
	+xQNdaiVRnVfv8CM4JFB821lZwCzI4oB3X7D7YXqqYjoIenLGrNlw7Sze80prnOni0s4v/
	wi4Xt1H2Pyoji7n20fzILcZZeRyZRdmVEtnhKf8kFNEXM1TVjJO6O7nKNILSB+3c8p2UnL
	QSOKHb18ObBAcqdY0nnyn5rKhxgun3NiLlV7VF27/N3E26GTFLChpLyCvDct6oJP+Qmyk2
	jtT2chQeI5JRDhQt16pfw3MlqaWKnA+CuQrPVuUebVuzkEJjf8rYxrZJ8Ti0IA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273095;
	b=srj7p2qoQvqnuHW3YDaDl4AvdWu9fOjuzRQwzm9vau/JJt8Dbs1acU4Iurfsx8Dz6YmTLm
	EX4x07VmjVbYXV8OUVmKgYX4Tb/1QxT2ArtwXROPK2eU6vDJ+o4jkaA/RV+PGOTG6bgQzU
	WaqBstJSRxcM6/5ajiqylT0lBCKzCqKkP62fPy2nDnLFw6WHYZJR2p4hNrIK8IqohBDZSg
	inv6Lrb5uaQ3e4eFOV38g3es4Kp22xE2wor/igxt5dnrDEA5Ew/IJKSnHwkw3s1cKOZ+9M
	rhAHC8PJKp46jt/obxqdHppDlVnYZG5g3DNYl1K2gcAR/L/gDpPWdHbxEtWwtQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273095;
	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=JTWFQcgl70he4fwpLLl5LJRgJJYvM5s3qdIjR3xd7hU=;
	b=IpTyWukA27XmjXcDv8c2CdxG35GBbJnCkXoTMtbZjACnwpZDtOmdYYj46V3m0SRQYXEdX2
	MjmSlW2X5e3HkGRMlF0uYzIFBdyb8XeUxTuy0tJ8cZWoDazTx3psBI6eeJYDbBgIvuMgUE
	LtEy1M8voj4+UPF0BXJAvRMjtjg+jdgvTlvaz4JllNMollrU2HI6ZE/ca1WVXK8vaYLe+j
	UonnejqHw4hGS29BcOspjLuQzrzYn0v3OJClnDlMmsuYFCjfLGzEU/Da+nPS6JZC3EL5CH
	pw/2PQJMY/5tbv3FMZpJ+f9EesgyoCRFvFm5XGRDz6lSw0LIYQCerG05cGMhaw==
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 4hzT3W4c4szxcl
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:35 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18834
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:35 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 6f162827ada7 - stable/15 - ufshci: skip the reinit when the new link works
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 6f162827ada7e1cf8cb038a03a26a346bb71ffe6
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:35 +0000
Message-Id: <6ac4a887.18834.344ba8b8@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=6f162827ada7e1cf8cb038a03a26a346bb71ffe6

commit 6f162827ada7e1cf8cb038a03a26a346bb71ffe6
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-09-02 01:52:48 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:08 +0000

    ufshci: skip the reinit when the new link works
    
    UFSHCI_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH always rebuilt the
    link after the gear switch. It threw away a working HS link and
    ended up in PWM. The reinit is only needed for a dead link.
    There the local side reports HS and the peer never answers. A
    local readback cannot tell the two apart. Peer traffic can.
    
    Probe the peer with DME_PEER_GET after the switch. Skip the
    reinit when the probe succeeds. Log it when the probe fails.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D59299
    
    (cherry picked from commit 9930150214d1ca4ad21561d2e0afce9ebf2cdf6c)
---
 sys/dev/ufshci/ufshci_ctrlr.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index b3b9abbe867c..480bbfd43d81 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -127,10 +127,25 @@ ufshci_ctrlr_start(struct ufshci_controller *ctrlr, bool resetting)
 
 	ufshci_dev_init_uic_link_state(ctrlr);
 
-	if ((ctrlr->quirks & UFSHCI_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH) &&
-	    ufshci_ctrlr_reinit_after_max_gear_switch(ctrlr) != 0) {
-		ufshci_ctrlr_fail(ctrlr);
-		return;
+	if (ctrlr->quirks & UFSHCI_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH) {
+		uint32_t probe;
+
+		/*
+		 * The reinit is only needed when the link did not survive
+		 * the gear switch. A local readback still shows HS when the
+		 * peer is dead. Only peer traffic proves the link works.
+		 */
+		if (ufshci_uic_send_dme_peer_get(ctrlr, PA_Granularity,
+		    &probe) != 0) {
+			ufshci_printf(ctrlr,
+			    "link probe failed after the gear switch, "
+			    "reinitializing\n");
+			if (ufshci_ctrlr_reinit_after_max_gear_switch(
+			    ctrlr) != 0) {
+				ufshci_ctrlr_fail(ctrlr);
+				return;
+			}
+		}
 	}
 
 	/* Read Controller Descriptor (Device, Geometry) */

From nobody Tue Oct  6 07:51:34 2026
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 4hzT3W256Rz6cWJd
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:35 +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 4hzT3V60qXz4H9Y
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:34 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273094;
	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=932dkggmn3uZpbZ7ard5Y0JwPPOccf8zQ66o2qxbuKc=;
	b=auie2Fxl0VT9aGgzJKoudAstpOwg7/KecpuC1eUlvd7mhiGdIHc0OsQXO5j0EawxpNISpb
	PPSdczvyWfWyBRnSARHy2oHcgVC0vV/nsjrkaKNMEoxsZzcjZGsgskgpItsxqBENAtCHAE
	SEALF0TYBbKCqH0I/PmUZBKP+YqqKgfiUs8Xc/GPvUERzzOVb3YX4Jfta1lMKNmqoY5Dlm
	0EtMVnWiMbjuNBiVfXQG/HfcH79RATsj5HL/oQs/n/uXJDAneZdiLmN3FF5kUVCEsUIGSF
	ds3UyQ88R/OxTWJCqgeC8XyC95sODqKDxFVTiQihHPlKP7aB/5YVhBp/F45ylA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273094;
	b=a+EEIb5pCEnuAG17qt0C58ngGdFxw36yYUBSQrb6AheNBsKLgpixwco8jHURpa/UxzPctj
	m3P2GUxcKdRlkBCigpkJAIsFHdS9Dx6lplCECMFUA6RKFAl547pEvfh6hotnoQ+kxhM/hP
	ngy9xogqCwiBhh6u6mv9NwU9qhIfaUuM42TnnF8BRrkOrHfOI7+0bvsTbiM4Cq/kgY9O3l
	vrwhkabZPkQ5K+kI9B+MRXqixBLY3bTJdv7rgoQjuXXQGON+YRcAzahDaZUjqABU8SjN82
	Z26QlJk8EBMBsrtBk+PN8capwCgZthv4x5ZXoZGR5fPaovDZuuMDiU83/lgJ1A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273094;
	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=932dkggmn3uZpbZ7ard5Y0JwPPOccf8zQ66o2qxbuKc=;
	b=Qb3yio1R12Q/XDBHbeafOM9hbHdcvG1vr9w3ZBqZMae+ipSHfpWVfy6l29XVqSk4wKprzV
	JpI3g8dq4IuvU/nckSq7l4dzT8f2oHfVUPts4aAKKj41dyVNhqfSQ5wmHguMTAL05thiRN
	zsSueNjpzRB8YFRe1LHy1qVI9Ih73mLL1c25Qrtw19siiDaeKshX9EhdhNVJbNoOHN0IZl
	SnT0/FmWCbx6tJHa4iabDF91cAmMcqW9t7Ez8U68dVai7nthIyqUZ8FMjm2GS6mTkJedjB
	wihVaXVqsrODKLjLEzCGjJYOq0OYxOQDtjLy1AmOvlWx1m9UnZH7ZwRIDZdpKQ==
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 4hzT3V3vyWzxcj
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:34 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 47b66
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:34 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 1aaad60ae89a - stable/15 - ufshci: set HS series per platform and adapt type per gear
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 1aaad60ae89a132bbca0b1f1af85a5eb0f65f7b1
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:34 +0000
Message-Id: <6ac4a886.47b66.35fc3845@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=1aaad60ae89a132bbca0b1f1af85a5eb0f65f7b1

commit 1aaad60ae89a132bbca0b1f1af85a5eb0f65f7b1
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-09-02 01:50:09 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:07 +0000

    ufshci: set HS series per platform and adapt type per gear
    
    The driver always asked for Rate-B. It never set the adaptation
    type. The Snapdragon X Elite firmware tunes the PHY for Rate-A.
    A Rate-B link dies at every gear there. HS-G4 and above need
    initial adaptation. This is a UniPro rule. It applies to
    every host.
    
    Add an hs_series field to the device tables. Use Rate-A on the
    Snapdragon X Elite. Keep Rate-B on the PCI hosts. A table entry
    without an HS series fails to attach. Set PA_TxHsAdaptType to
    initial adaptation at HS-G4 and above. Leave it alone below
    that. Hosts before UniPro 1.8 do not have it. The Galaxy Book
    4 Edge now links at HS-G5 Rate-A.
    
    fio results (128k sequential, 4k random, posixaio):
    
    QD  | SEQ_R(MiB/s) | SEQ_W(MiB/s) | RND_R(kIOPS) | RND_W(kIOPS)
    ----+--------------+--------------+--------------+-------------
    1   |         1357 |         1221 |         12.1 |         27.2
    4   |         3103 |         3234 |         46.5 |         92.9
    32  |         3508 |         3238 |        176.4 |        125.0
    
    Sequential writes land in the WriteBooster buffer. Sustained
    writes drop to 556 MiB/s once the buffer runs out.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D59298
    
    (cherry picked from commit c09daa33d6ffbbd1956bfe4dcd9ca746192d6940)
---
 sys/dev/ufshci/ufshci.h         |  4 ++++
 sys/dev/ufshci/ufshci_acpi.c    |  9 +++++++--
 sys/dev/ufshci/ufshci_ctrlr.c   |  7 +++++++
 sys/dev/ufshci/ufshci_dev.c     | 11 +++++++----
 sys/dev/ufshci/ufshci_pci.c     | 10 +++++++---
 sys/dev/ufshci/ufshci_private.h |  1 +
 6 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/sys/dev/ufshci/ufshci.h b/sys/dev/ufshci/ufshci.h
index c2bef5c9a807..ab55c0af938f 100644
--- a/sys/dev/ufshci/ufshci.h
+++ b/sys/dev/ufshci/ufshci.h
@@ -41,6 +41,8 @@
 #define PA_TxTermination		 0x1569
 #define PA_RxTermination		 0x1584
 #define PA_HSSeries			 0x156A
+#define   UFSHCI_HS_SERIES_A		 1
+#define   UFSHCI_HS_SERIES_B		 2
 #define PA_PWRModeUserData0		 0x15B0
 #define PA_PWRModeUserData1		 0x15B1
 #define PA_PWRModeUserData2		 0x15B2
@@ -49,6 +51,8 @@
 #define PA_PWRModeUserData5		 0x15B5
 
 #define PA_TxHsAdaptType		 0x15D4
+#define   PA_INITIAL_ADAPT		 1
+#define   PA_NO_ADAPT			 3
 #define PA_PWRMode			 0x1571
 
 #define DME_LocalFC0ProtectionTimeOutVal 0xD041
diff --git a/sys/dev/ufshci/ufshci_acpi.c b/sys/dev/ufshci/ufshci_acpi.c
index f96a4c29e15e..00078a47dec3 100644
--- a/sys/dev/ufshci/ufshci_acpi.c
+++ b/sys/dev/ufshci/ufshci_acpi.c
@@ -49,17 +49,21 @@ static struct ufshci_acpi_device {
 	const char *hid;
 	const char *desc;
 	uint32_t ref_clk;
+	uint32_t hs_series;
 	uint32_t quirks;
 } ufshci_acpi_devices[] = {
 	/*
 	 * The SoC feeds the device 38.4 MHz from its CXO. The firmware
 	 * has no property for it. Verified on the Galaxy Book 4 Edge.
+	 *
+	 * The firmware calibrates the PHY for Rate-A. A Rate-B link
+	 * comes up dead at every gear.
 	 */
 	{ "QCOM24A5", "Qualcomm Snapdragon X Elite UFS Host Controller",
-	    UFSHCI_REF_CLK_38_4MHz,
+	    UFSHCI_REF_CLK_38_4MHz, UFSHCI_HS_SERIES_A,
 	    UFSHCI_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH |
 			UFSHCI_QUIRK_BROKEN_LSDBS_MCQS_CAP },
-	{ 0x00000000, NULL, 0, 0 }
+	{ 0x00000000, NULL, 0, 0, 0 }
 };
 
 static char *ufshci_acpi_ids[] = { "QCOM24A5", NULL };
@@ -97,6 +101,7 @@ ufshci_acpi_probe(device_t dev)
 	if (acpi_dev->hid) {
 		ctrlr->quirks = acpi_dev->quirks;
 		ctrlr->ref_clk = acpi_dev->ref_clk;
+		ctrlr->hs_series = acpi_dev->hs_series;
 	}
 
 	if (acpi_dev->desc) {
diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index 69b6869e98e2..b3b9abbe867c 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -375,6 +375,13 @@ ufshci_ctrlr_construct(struct ufshci_controller *ctrlr, device_t dev)
 	if (!(ctrlr->is_single_db_supported || ctrlr->is_mcq_supported))
 		return (ENXIO);
 
+	/* Every device table entry must name the HS series. */
+	if (ctrlr->hs_series == 0) {
+		ufshci_printf(ctrlr,
+		    "hs_series is missing from the device table\n");
+		return (ENXIO);
+	}
+
 	/*
 	 * The maximum transfer size supported by UFSHCI spec is 65535 * 256 KiB
 	 * However, we limit the maximum transfer size to 1MiB(256 * 4KiB) for
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index dd467f85c795..28c91828a925 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -320,8 +320,6 @@ ufshci_dev_init_unipro(struct ufshci_controller *ctrlr)
 int
 ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr)
 {
-	/* HSSerise: A = 1, B = 2 */
-	const uint32_t hs_series = 2;
 	/*
 	 * TX/RX PWRMode:
 	 * - TX[3:0], RX[7:4]
@@ -386,8 +384,13 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr)
 	if (ufshci_uic_send_dme_set(ctrlr, PA_RxTermination, true))
 		return (ENXIO);
 
-	/* Set HSSerise (A = 1, B = 2) */
-	if (ufshci_uic_send_dme_set(ctrlr, PA_HSSeries, hs_series))
+	/* Set HSSeries */
+	if (ufshci_uic_send_dme_set(ctrlr, PA_HSSeries, ctrlr->hs_series))
+		return (ENXIO);
+
+	/* HS-G4 and above need initial adaptation. */
+	if (ctrlr->hs_gear >= 4 &&
+	    ufshci_uic_send_dme_set(ctrlr, PA_TxHsAdaptType, PA_INITIAL_ADAPT))
 		return (ENXIO);
 
 	/* Set Timeout values */
diff --git a/sys/dev/ufshci/ufshci_pci.c b/sys/dev/ufshci/ufshci_pci.c
index b6b8124bc3a6..3cc184bef714 100644
--- a/sys/dev/ufshci/ufshci_pci.c
+++ b/sys/dev/ufshci/ufshci_pci.c
@@ -49,20 +49,23 @@ static struct _pcsid {
 	uint32_t devid;
 	const char *desc;
 	uint32_t ref_clk;
+	uint32_t hs_series;
 	uint32_t quirks;
 } pci_ids[] = { { 0x131b36, "QEMU UFS Host Controller", UFSHCI_REF_CLK_19_2MHz,
+		    UFSHCI_HS_SERIES_B,
 		    UFSHCI_QUIRK_IGNORE_UIC_POWER_MODE |
 			UFSHCI_QUIRK_NOT_SUPPORT_ABORT_TASK |
 			UFSHCI_QUIRK_SKIP_WELL_KNOWN_LUNS },
 	{ 0x98fa8086, "Intel Lakefield UFS Host Controller",
-	    UFSHCI_REF_CLK_19_2MHz,
+	    UFSHCI_REF_CLK_19_2MHz, UFSHCI_HS_SERIES_B,
 	    UFSHCI_QUIRK_LONG_PEER_PA_TACTIVATE |
 		UFSHCI_QUIRK_WAIT_AFTER_POWER_MODE_CHANGE |
 		UFSHCI_QUIRK_CHANGE_LANE_AND_GEAR_SEPARATELY |
 		UFSHCI_QUIRK_BROKEN_AUTO_HIBERNATE },
 	{ 0x54ff8086, "Intel Alder Lake-N UFS Host Controller",
-	    UFSHCI_REF_CLK_19_2MHz, UFSHCI_QUIRK_BROKEN_AUTO_HIBERNATE },
-	{ 0x00000000, NULL } };
+	    UFSHCI_REF_CLK_19_2MHz, UFSHCI_HS_SERIES_B,
+	    UFSHCI_QUIRK_BROKEN_AUTO_HIBERNATE },
+	{ 0x00000000, NULL, 0, 0, 0 } };
 
 static int
 ufshci_pci_probe(device_t device)
@@ -77,6 +80,7 @@ ufshci_pci_probe(device_t device)
 	if (ep->devid) {
 		ctrlr->quirks = ep->quirks;
 		ctrlr->ref_clk = ep->ref_clk;
+		ctrlr->hs_series = ep->hs_series;
 	}
 
 	if (ep->desc) {
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index 7b74faf95c53..221abb9a9892 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -340,6 +340,7 @@ struct ufshci_controller {
 	256 /* Some controllers have their LSDB and MCQS fields reset to 0. */
 
 	uint32_t ref_clk;
+	uint32_t hs_series;
 
 	struct cam_sim *ufshci_sim;
 	struct cam_path *ufshci_path;

From nobody Tue Oct  6 07:51:36 2026
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 4hzT3Y3gJFz6cWcc
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:37 +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 4hzT3X6DlHz4HL3
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:36 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273096;
	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=5q5zBR7JKANFjBWPWxJbkgInriKK4wOLTU6EjCzLhH8=;
	b=REXPbIeKDdsnh3JrMl7fuqHfphrvNqq4z7tItTAd87fovyjRlgZ/sBghmzEImcrLPQuffo
	5V1pt0dya6guPj2YYYpbfsCIeLEU+QBL3N8uPvfqjL09OXd0PgKyoFFqBk3UVxrODtH1NG
	pwwStsMHTqy+h3S3F89WpCuIu395tejtjcMVfhkQWJjsV/bU2r8owCVdHtcS4jvzNcC5r+
	VPEbgZOa5+4nytmh3WAii1hrVMdxEsTZ7kxjQsXsqcnRxagtsLc5TQ02WqGa1O9z0b7BKD
	uzh+1QeQ9y2vDkbCIW7FjFoLB0z/8apRjL44gcpkdZCrAUGrPbz9v15TcB8leA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273096;
	b=tZi8xmOIFB8AhJfPydzNNgnguja/nIYHmGKidGDPf8e3WeD43+6KH0iaPGBAeN60gqP/Kr
	7/t9YlGbxDhHcTb022HVT3bWzSAV33qgVM3wqJeJt3TiwGM0x8WCxlgv4HaFEn+Skn3yqS
	Wk4E4CMar6Tg/A/ca+J/d4eGZL3oGa4L5ZQVDiu2tXd0T4gcw2i4J90M/whIZQFUVChb0D
	x+OchWG+L+18P3u+O4238k9lwxFPaU4MMTRF53ZXZA2m3ZSzVQC3Hwc4NPZlQgRHBswPqN
	nR48flH8EnZQuNauvyzZaunMp2tfFVulMGohYD1hWopWmJnMc4GumwZXswdSHA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273096;
	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=5q5zBR7JKANFjBWPWxJbkgInriKK4wOLTU6EjCzLhH8=;
	b=DF0g3JgGt7QnjwXnEhqFbxWcmSaqiZV0QJRm9AZxHiuuzJdW9IfuZ/g9KDOZYy0wUMmJEG
	hPLnmom9Igk68Bc19wqvZbim9qmwrK6gjj9TpAVeK+g4/icnqRV6APznUaRVg31vsL2fJ/
	+J4ag89PHxsi/m8tmnFXw1A3qvGIfi30UQPFXqn3uIFcQD5/R/5sQCA9eGaslN1Opi3cLJ
	GC7+7P0uJZVKDLOZBB5qssX1BIyP4DAsKxv5o68hkDoMHZKyA9gKJZLqLXFdLzWd+Rtqx3
	KQalv6gudcsFd0Fds7fQ/ox9rwejWAh8Oqi98XG0jElvMrjN5KpogzX+hz82Uw==
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 4hzT3X5CLhzx0G
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:36 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 1852d
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:36 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: ac1ad37b7d84 - stable/15 - ufshci: tell the controller how long the EHS is
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: ac1ad37b7d84d19625c887d89034d6291a3e03d4
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:36 +0000
Message-Id: <6ac4a888.1852d.775233d3@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=ac1ad37b7d84d19625c887d89034d6291a3e03d4

commit ac1ad37b7d84d19625c887d89034d6291a3e03d4
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-09-15 01:37:30 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:08 +0000

    ufshci: tell the controller how long the EHS is
    
    The transfer request descriptor has a field for the total Extra Header
    Segment length. The driver left it at zero. A request that carried an
    EHS went out as the bare command UPIU, and the device answered a request
    it had only seen part of.
    
    Fill the field from the request UPIU header, which already carries the
    same length. Every other path sets it to zero, so nothing else changes.
    An EHS is the first thing that makes a request vary in size, so assert
    that the request and the response still fit in the command descriptor.
    
    Reviewed by:    imp (mentor)
    Sponsored by:   Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D59557
    
    (cherry picked from commit d3e5082ce4dcb154cbf50cba05d8f1dbbd55a5fc)
---
 sys/dev/ufshci/ufshci_req_queue.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
index 886cf9aff77f..f1b145f9791b 100644
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -425,7 +425,7 @@ static void
 ufshci_req_queue_fill_utr_descriptor(struct ufshci_utp_xfer_req_desc *desc,
     uint8_t data_direction, const uint64_t paddr, const uint16_t response_off,
     const uint16_t response_len, const uint16_t prdt_off,
-    const uint16_t prdt_entry_cnt)
+    const uint16_t prdt_entry_cnt, const uint8_t total_ehs_length)
 {
 	uint8_t command_type;
 	/* Value to convert bytes to dwords */
@@ -441,6 +441,7 @@ ufshci_req_queue_fill_utr_descriptor(struct ufshci_utp_xfer_req_desc *desc,
 	desc->command_type = command_type;
 	desc->data_direction = data_direction;
 	desc->interrupt = true;
+	desc->total_ehs_length = total_ehs_length;
 	/* Set the initial value to Invalid. */
 	desc->overall_command_status = UFSHCI_UTR_OCS_INVALID;
 	desc->utp_command_descriptor_base_address = (uint32_t)(paddr &
@@ -719,6 +720,9 @@ ufshci_req_queue_submit_tracker(struct ufshci_req_queue *req_queue,
 		ufshci_req_queue_fill_utmr_descriptor(&tr->hwq->utmrd[slot_num],
 		    req);
 	} else {
+		KASSERT(req->request_size <= UFSHCI_UTP_XFER_REQ_SIZE &&
+		    req->response_size <= UFSHCI_UTP_XFER_RESP_SIZE,
+		    ("UPIU does not fit in the UTP command descriptor"));
 		request_len = req->request_size;
 		response_off = UFSHCI_UTP_XFER_REQ_SIZE;
 		response_len = req->response_size;
@@ -741,7 +745,8 @@ ufshci_req_queue_submit_tracker(struct ufshci_req_queue *req_queue,
 		ucd_paddr = tr->ucd_bus_addr;
 		ufshci_req_queue_fill_utr_descriptor(&tr->hwq->utrd[slot_num],
 		    data_direction, ucd_paddr, response_off, response_len,
-		    tr->prdt_off, tr->prdt_entry_cnt);
+		    tr->prdt_off, tr->prdt_entry_cnt,
+		    req->request_upiu.header.ehs_length);
 
 		bus_dmamap_sync(req_queue->dma_tag_ucd, req_queue->ucdmem_map,
 		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);

From nobody Tue Oct  6 07:51:37 2026
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 4hzT3Z2ktgz6cWcg
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:38 +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 4hzT3Z0RFyz4HN6
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:38 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273098;
	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=X5uvuQpJCCkzpkF2JWXgBVmodBt2LPXJmoSm5Owo24I=;
	b=f1b4pnbYs5Nip9gTgK0dNLTBPkLaNV1r/H2cL/+BGNnumetF05vaArdSjAXnAhm9QzeMym
	1YHK19Sh3DZarx7ajpt6axBF5ayA1RjGK1Wo0aFrUCGYrYxVcZ8eiQUSd5iBVyJlgZ4eLL
	CQNE2jB5hzJaOXwa6FMCuJYqRIM7NpsxxQ6e+nXRk506QMbrQxyetqP4UvKC9dejVXbVzJ
	qZ7x6ka9qEPEFYUAssy7oOwzIedWhIADZrwQwkSWTCXR753ev5PRTi9Q3WLRqs7kT8OiYA
	zxM4NqIrK7jZ6mlAj5k1vWOh5m9vyNqxkefUEbdGgICvBABM/R+PhcOMfhsQYQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273098;
	b=sdd1vSMdPCdZm0mOp1Zpde7tOvgXEbRh+oerCTvU3InKx5Y9N1Fxzy4oRbXxka45x/AM08
	K7SmoKeZw7OXmtAwCWUpNTQSc/5FLFefpiP6Ea5uKUEAXEqlLYWl6bhqSfhHR4aIceKFTt
	TbrK7wY+cJoLw0wnScUkyQvymlOfIEs91yUvb/FawcNp4NeKm1vNJ6vAs8kMAy+MC3mVeQ
	6OAqF2QmAkFPm9/hxk1Z9xxwX5mrQDMJ2IXHp+s3Jcn9eq3cLAahiOserCmwcsqfYbDsRm
	vTP1G9i2llN4Hmq2Lcj85KvtN+Wof7+Ce8wv3frnkYWaQRw5JhbF4Rq5MVLjuw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273098;
	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=X5uvuQpJCCkzpkF2JWXgBVmodBt2LPXJmoSm5Owo24I=;
	b=av26GUWi+in233q6kQBWRsIsmIOoNw3qFcwNIqeN3IoBQZl4//3XOnrQbjxt8MeWf+WyPL
	jseiEvdLWkxSer+29siyPNJIihFeMifoXlN8W5vSqVnATYspN5AWL9g1QbWac46cjKzR01
	oBba+Wt1X/RYHpLwIQtgwuo6vzwqFGjJsAdCelHWvgB6qjdHakPQDCL9IvNDqvqKnCpXDx
	0bofYoGvN/XwOj/1LKS7rytQUfEclINd96Xn1Fejl7kn5bikC2uvTUR6Q67Cr8+xGR2uVM
	GEmTSBDLGA+mMRELhaV6eK10ol+UfwIAIHO8bY/BmravqUKtJHXybSA4af/89w==
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 4hzT3Y66ZBzxZW
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:37 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 187a0
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:37 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 4392fed5c8ee - stable/15 - ufshci: add a control device node
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 4392fed5c8ee699d22ac833e649b6abacd4afa18
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:37 +0000
Message-Id: <6ac4a889.187a0.21ff91fb@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=4392fed5c8ee699d22ac833e649b6abacd4afa18

commit 4392fed5c8ee699d22ac833e649b6abacd4afa18
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-09-15 01:39:41 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:09 +0000

    ufshci: add a control device node
    
    The driver only exposed a CAM SIM. Userland had no way to reach the
    device for anything that is not a SCSI command, so reading a descriptor
    or an attribute was impossible.
    
    Add /dev/ufshci%d as a root only node and the ioctl ABI header for it.
    The node answers no ioctl yet. The header pulls in ufshci.h, which
    declares bool only under _KERNEL, so include stdbool.h for userland the
    way nvme.h already does.
    
    Reviewed by:    imp (mentor)
    Sponsored by:   Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D59558
    
    (cherry picked from commit 28fefc441e3b701acc2888892a518774394255c7)
---
 sys/dev/ufshci/ufshci.h         |  3 ++
 sys/dev/ufshci/ufshci_ctrlr.c   |  6 ++++
 sys/dev/ufshci/ufshci_ioctl.c   | 67 +++++++++++++++++++++++++++++++++++++++++
 sys/dev/ufshci/ufshci_ioctl.h   | 54 +++++++++++++++++++++++++++++++++
 sys/dev/ufshci/ufshci_private.h |  6 ++++
 sys/modules/ufshci/Makefile     |  1 +
 6 files changed, 137 insertions(+)

diff --git a/sys/dev/ufshci/ufshci.h b/sys/dev/ufshci/ufshci.h
index ab55c0af938f..aaf98cc70d37 100644
--- a/sys/dev/ufshci/ufshci.h
+++ b/sys/dev/ufshci/ufshci.h
@@ -9,6 +9,9 @@
 #define __UFSHCI_H__
 
 #include <sys/param.h>
+#ifndef _KERNEL
+#include <stdbool.h>
+#endif
 #include <sys/endian.h>
 
 /*
diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
index 480bbfd43d81..58f101ea27f6 100644
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -459,12 +459,18 @@ ufshci_ctrlr_construct(struct ufshci_controller *ctrlr, device_t dev)
 
 	TASK_INIT(&ctrlr->reset_task, 0, ufshci_ctrlr_reset_task, ctrlr);
 
+	error = ufshci_ioctl_construct(ctrlr, dev);
+	if (error)
+		return (error);
+
 	return (0);
 }
 
 void
 ufshci_ctrlr_destruct(struct ufshci_controller *ctrlr, device_t dev)
 {
+	ufshci_ioctl_destruct(ctrlr);
+
 	if (ctrlr->resource == NULL)
 		goto nores;
 
diff --git a/sys/dev/ufshci/ufshci_ioctl.c b/sys/dev/ufshci/ufshci_ioctl.c
new file mode 100644
index 000000000000..976b28de4cf5
--- /dev/null
+++ b/sys/dev/ufshci/ufshci_ioctl.c
@@ -0,0 +1,67 @@
+/*-
+ * Copyright (c) 2026, Samsung Electronics Co., Ltd.
+ * Written by Jaeyoon Choi
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <sys/param.h>
+#include <sys/conf.h>
+#include <sys/ioccom.h>
+
+#include "ufshci_private.h"
+#include "ufshci_ioctl.h"
+
+static d_ioctl_t ufshci_ioctl;
+
+static struct cdevsw ufshci_cdevsw = {
+	.d_version = D_VERSION,
+	.d_ioctl = ufshci_ioctl,
+	.d_name = "ufshci",
+};
+
+static int
+ufshci_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int flag,
+    struct thread *td)
+{
+	switch (cmd) {
+	default:
+		return (ENOTTY);
+	}
+}
+
+int
+ufshci_ioctl_construct(struct ufshci_controller *ctrlr, device_t dev)
+{
+	struct make_dev_args md_args;
+	int error;
+
+	/*
+	 * Set si_drv1 as the node is created. A separate assignment after
+	 * make_dev leaves a window where an open that races the attach finds
+	 * it unset.
+	 */
+	make_dev_args_init(&md_args);
+	md_args.mda_devsw = &ufshci_cdevsw;
+	md_args.mda_uid = UID_ROOT;
+	md_args.mda_gid = GID_WHEEL;
+	md_args.mda_mode = 0600;
+	md_args.mda_unit = device_get_unit(dev);
+	md_args.mda_si_drv1 = ctrlr;
+
+	error = make_dev_s(&md_args, &ctrlr->cdev, "ufshci%d",
+	    device_get_unit(dev));
+	if (error != 0)
+		return (error);
+
+	return (0);
+}
+
+void
+ufshci_ioctl_destruct(struct ufshci_controller *ctrlr)
+{
+	if (ctrlr->cdev != NULL) {
+		destroy_dev(ctrlr->cdev);
+		ctrlr->cdev = NULL;
+	}
+}
diff --git a/sys/dev/ufshci/ufshci_ioctl.h b/sys/dev/ufshci/ufshci_ioctl.h
new file mode 100644
index 000000000000..57e1ce6fa869
--- /dev/null
+++ b/sys/dev/ufshci/ufshci_ioctl.h
@@ -0,0 +1,54 @@
+/*-
+ * Copyright (c) 2026, Samsung Electronics Co., Ltd.
+ * Written by Jaeyoon Choi
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#ifndef __UFSHCI_IOCTL_H__
+#define __UFSHCI_IOCTL_H__
+
+#include <sys/ioccom.h>
+
+#include <dev/ufshci/ufshci.h>
+
+#define UFSHCI_PT_FLAG_DATA_IN	0x01 /* device -> host */
+#define UFSHCI_PT_FLAG_DATA_OUT	0x02 /* host -> device */
+
+/*
+ * Largest data buffer a single passthrough request may carry. A transfer
+ * this long covers 256 pages of 4096 bytes, and one more when the buffer
+ * does not start on a page boundary, which is what the PRDT holds.
+ */
+#define UFSHCI_PT_MAX_XFER	(1024 * 1024)
+
+/*
+ * req_upiu and resp_upiu carry the UPIU whole, including its EHS and its
+ * data segment. A query request keeps its descriptor bytes in that data
+ * segment, so such a request leaves buf NULL and len zero.
+ *
+ * buf is the separate buffer a command UPIU moves through the PRDT. Only
+ * a command UPIU uses it.
+ */
+struct ufshci_pt_command {
+	struct ufshci_upiu req_upiu;  /* [in] */
+	struct ufshci_upiu resp_upiu; /* [out] */
+	void *buf;		      /* [in] PRDT payload, may be NULL */
+	uint32_t len;		      /* [in] length of buf */
+	uint32_t flags;		      /* [in] UFSHCI_PT_FLAG_* */
+	uint32_t timeout_ms;	      /* [in] 0 means the driver default */
+	uint32_t xfer_len;	      /* [out] bytes actually moved */
+	uint8_t ocs;		      /* [out] overall command status */
+	uint8_t reserved[7];
+};
+
+struct ufshci_pt_uic_command {
+	struct ufshci_uic_cmd cmd; /* [in/out] opcode and argument1..3 */
+	uint32_t timeout_ms;	   /* [in] */
+	uint32_t result;	   /* [out] UICCMDARG2 result code */
+};
+
+#define UFSHCI_PASSTHROUGH_CMD	_IOWR('u', 0, struct ufshci_pt_command)
+#define UFSHCI_PASSTHROUGH_UIC	_IOWR('u', 1, struct ufshci_pt_uic_command)
+
+#endif /* __UFSHCI_IOCTL_H__ */
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index 221abb9a9892..dd02c7311599 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -316,6 +316,7 @@ struct ufshci_device {
  */
 struct ufshci_controller {
 	device_t dev;
+	struct cdev *cdev;
 
 	uint32_t quirks;
 #define UFSHCI_QUIRK_IGNORE_UIC_POWER_MODE \
@@ -471,6 +472,11 @@ void ufshci_ctrlr_poll(struct ufshci_controller *ctrlr);
 
 int ufshci_ctrlr_submit_task_mgmt_request(struct ufshci_controller *ctrlr,
     struct ufshci_request *req);
+/* ioctl */
+int ufshci_ioctl_construct(struct ufshci_controller *ctrlr,
+    device_t dev);
+void ufshci_ioctl_destruct(struct ufshci_controller *ctrlr);
+
 int ufshci_ctrlr_submit_transfer_request(struct ufshci_controller *ctrlr,
     struct ufshci_request *req);
 int ufshci_ctrlr_send_nop(struct ufshci_controller *ctrlr);
diff --git a/sys/modules/ufshci/Makefile b/sys/modules/ufshci/Makefile
index aa0419d3a6d6..8b07766bd6fc 100644
--- a/sys/modules/ufshci/Makefile
+++ b/sys/modules/ufshci/Makefile
@@ -12,6 +12,7 @@ SRCS =	ufshci.c	\
 	ufshci_req_queue.c	\
 	ufshci_req_sdb.c	\
 	ufshci_sim.c		\
+	ufshci_ioctl.c		\
 	ufshci_sysctl.c		\
 	acpi_if.h		\
 	bus_if.h		\

From nobody Tue Oct  6 07:51:38 2026
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 4hzT3b5ScLz6cWYb
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:39 +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 4hzT3b1J5Nz4HQv
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:39 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273099;
	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=KPaoUxLSwv+aq2coY1/n3dL2xweyuhAVk952rfx6VWc=;
	b=YCqq+S8vFOnYf09wNCgPi6Nr5UeGDohb7xWOQR1RMHxK8l4B8hjqzDYQ1MAUi9vM3reV5W
	XKo5m/RBu/GULUpk6Lbc3fnrpDHE5xQvTXJSE/IKch0LHWA74h2Fbrmk/28ce9pMNrAIj0
	he4htYZKUooLojVAngSv1Yd6ehWU9L6uDL7T14U4jNu9NREQrnvOwPLiIo/NmLC5d2FSKv
	qPOtpZVyEza/+y+qg5+L4I5F2tdDwXBGHiDvY62BRzNX7oa9y6exguQAtqYEcEGSW1C+gu
	c23kwc5M6zFQhhoqjr7JuZvYaL6LzGwznl2TycfqA2OmHaSxCMPqc97YPmkGIg==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273099;
	b=XTPdf232AvOkRU83XLMQilIk0RJh7MGKCuKVSdZavG8cmOjf6n1Svp6S57ao9cMyfZj8z7
	EejTIuUX2Y8dGVwUU+H5yaBgLt4pn4Gsog12DyRfOWAjHSO5UjA1/5fz9uv7UYn66q1RMo
	cLW16B9Ehuq76WigrAmWJ7JfK0qfms+Ya5r/xkIEjKppP/FggUPyx4/t8YZqtlgC+qY5pK
	Um68YkOyIqsy45dWbI5/3+FrnhXA5+OFeZMdKOnI0RJeXm9UOjFILvb83islEshrHsLsu5
	xG82fNaPpvY+XzLOLq1GEWASMGJn+FWt+M5ic1gBWIKKvgDbSJJj9VdZANFV3w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273099;
	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=KPaoUxLSwv+aq2coY1/n3dL2xweyuhAVk952rfx6VWc=;
	b=dDbJq0nUvMKdACyoN/Uq5VmNHemijYXpIJbzgZNSrBrzOUUJ+k3z+2ywHYF7A34Il6E8fw
	Yc0eM+jYPmDe3khdk6SovaEzh407XIADuRBL7BE+WkCYA3TOc4etZwugHnF5APoNaEuBlq
	/em5MNlN3BH4NukQXO/QdJIaSc9RnkmcPTd5iAqP0OFFv6jhxMUTKQWQoK9NZwg97vIw4y
	WZ3E/SFa5EJpYyq1DGldpklNfA5QkNZeQ8zY+lqRdUNL5vWICiCmVB8QI02GlwsjNhfQKS
	w3nL45iTxdSdVm1GbqErxR53H8AA+Emg0L3WEBeDl4UZ7wd6UV87ZCgWHmGuwA==
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 4hzT3Z6gGTzwwp
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:38 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 47b6a
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:38 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 26ca0a15a8bd - stable/15 - ufshci: add a passthrough ioctl
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 26ca0a15a8bd09843a7df0a3d8f0ace80f291a8b
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:38 +0000
Message-Id: <6ac4a88a.47b6a.74b99121@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=26ca0a15a8bd09843a7df0a3d8f0ace80f291a8b

commit 26ca0a15a8bd09843a7df0a3d8f0ace80f291a8b
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-09-15 01:40:33 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:09 +0000

    ufshci: add a passthrough ioctl
    
    This ioctl is for a port of ufs-utils:
    https://github.com/SanDisk-Open-Source/ufs-utils
    
    The driver only exposed a CAM SIM. Reading a descriptor, an attribute
    or a flag needs a query request, and a UniPro attribute needs a DME
    command. The driver built both only for its own setup, so userland
    could reach neither.
    
    Add two ioctls on the control node. UFSHCI_PASSTHROUGH_CMD sends a
    UPIU the caller built, sizes the request from its transaction code,
    and copies the response UPIU back. UFSHCI_PASSTHROUGH_UIC carries the
    four attribute commands and refuses the rest, which can drop the link
    or power the device off. It keeps the raw argument2 so the caller can
    read the result code the device reported, not just a failure.
    
    Validate the input and bound it by what the controller can map. The
    descriptor has no request length, so the controller reads it from the
    UPIU header, and a header that declares more than was copied in would
    reach past the descriptor. The ioctl layer copies output back only on
    a zero return. So a command that reached the device is a success even
    when it was refused. The caller reads the reason from the response
    header, and an answerless failure comes back as EIO. Clear the
    response before use so no stale bytes read as a device answer.
    
    Reviewed by:    imp (mentor)
    Sponsored by:   Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D59559
    
    (cherry picked from commit ae31f2928596f8c6efc8f136559562d864968dcc)
---
 sys/dev/ufshci/ufshci.h         |  10 +-
 sys/dev/ufshci/ufshci_ioctl.c   | 236 ++++++++++++++++++++++++++++++++++++++++
 sys/dev/ufshci/ufshci_ioctl.h   |  14 ++-
 sys/dev/ufshci/ufshci_private.h |   2 +
 sys/dev/ufshci/ufshci_uic_cmd.c |   5 +-
 5 files changed, 259 insertions(+), 8 deletions(-)

diff --git a/sys/dev/ufshci/ufshci.h b/sys/dev/ufshci/ufshci.h
index aaf98cc70d37..3a225d92cb60 100644
--- a/sys/dev/ufshci/ufshci.h
+++ b/sys/dev/ufshci/ufshci.h
@@ -366,6 +366,9 @@ _Static_assert(sizeof(struct ufshci_upiu_header) == 12,
 #define UFSHCI_MAX_UPIU_SIZE  512
 #define UFSHCI_UPIU_ALIGNMENT 8 /* UPIU requires 64-bit alignment. */
 
+/* UFS Spec 4.1, section 10.6.1: Total EHS Length counts 32 byte units. */
+#define UFSHCI_EHS_UNIT_SIZE 32
+
 struct ufshci_upiu {
 	/* dword 0-2 */
 	struct ufshci_upiu_header header;
@@ -517,6 +520,9 @@ struct ufshci_query_param {
 	size_t desc_size;
 };
 
+/* The data segment of a query UPIU, where a descriptor is carried. */
+#define UFSHCI_QUERY_DATA_SEGMENT_SIZE 256
+
 struct ufshci_query_request_upiu {
 	/* dword 0-2 */
 	struct ufshci_upiu_header header;
@@ -543,7 +549,7 @@ struct ufshci_query_request_upiu {
 	/* dword 7 */
 	uint32_t reserved3;
 
-	uint8_t command_data[256];
+	uint8_t command_data[UFSHCI_QUERY_DATA_SEGMENT_SIZE];
 } __packed __aligned(4);
 
 _Static_assert(sizeof(struct ufshci_query_request_upiu) == 288,
@@ -603,7 +609,7 @@ struct ufshci_query_response_upiu {
 	/* dword 7 */
 	uint8_t reserved4[4];
 
-	uint8_t command_data[256];
+	uint8_t command_data[UFSHCI_QUERY_DATA_SEGMENT_SIZE];
 } __packed __aligned(4);
 
 _Static_assert(sizeof(struct ufshci_query_response_upiu) == 288,
diff --git a/sys/dev/ufshci/ufshci_ioctl.c b/sys/dev/ufshci/ufshci_ioctl.c
index 976b28de4cf5..ead404baea8e 100644
--- a/sys/dev/ufshci/ufshci_ioctl.c
+++ b/sys/dev/ufshci/ufshci_ioctl.c
@@ -8,9 +8,12 @@
 #include <sys/param.h>
 #include <sys/conf.h>
 #include <sys/ioccom.h>
+#include <sys/malloc.h>
+#include <sys/systm.h>
 
 #include "ufshci_private.h"
 #include "ufshci_ioctl.h"
+#include "ufshci_reg.h"
 
 static d_ioctl_t ufshci_ioctl;
 
@@ -20,11 +23,244 @@ static struct cdevsw ufshci_cdevsw = {
 	.d_name = "ufshci",
 };
 
+/*
+ * Work out how much of the UPIU the controller has to read and how much
+ * it may write back.
+ */
+static int
+ufshci_passthrough_upiu_sizes(const struct ufshci_pt_command *pt,
+    size_t *req_size, size_t *resp_size, bool *is_admin)
+{
+	const struct ufshci_upiu_header *header = &pt->req_upiu.header;
+	size_t ehs_bytes = header->ehs_length * UFSHCI_EHS_UNIT_SIZE;
+	size_t max_data_len;
+
+	switch (header->trans_code) {
+	case UFSHCI_UPIU_TRANSACTION_CODE_QUERY_REQUEST:
+		/* Only a command UPIU has room for an EHS. */
+		if (header->ehs_length != 0)
+			return (EINVAL);
+		*req_size = sizeof(struct ufshci_query_request_upiu);
+		*resp_size = sizeof(struct ufshci_query_response_upiu);
+		*is_admin = true;
+		max_data_len = UFSHCI_QUERY_DATA_SEGMENT_SIZE;
+		break;
+	case UFSHCI_UPIU_TRANSACTION_CODE_NOP_OUT:
+		if (header->ehs_length != 0)
+			return (EINVAL);
+		*req_size = sizeof(struct ufshci_nop_out_upiu);
+		*resp_size = sizeof(struct ufshci_nop_in_upiu);
+		*is_admin = true;
+		max_data_len = 0;
+		break;
+	case UFSHCI_UPIU_TRANSACTION_CODE_COMMAND:
+		*req_size = sizeof(struct ufshci_cmd_command_upiu) + ehs_bytes;
+		/* The response carries an EHS too, for advanced RPMB. */
+		*resp_size = sizeof(struct ufshci_cmd_response_upiu) +
+		    ehs_bytes;
+		*is_admin = false;
+		/* A command UPIU moves its payload through the PRDT. */
+		max_data_len = 0;
+		break;
+	default:
+		return (EINVAL);
+	}
+
+	/*
+	 * The descriptor has no request length, so the controller takes it
+	 * from the UPIU header. A header that declares more than the UPIU
+	 * has room for would read past the command descriptor.
+	 */
+	if (be16toh(header->data_segment_length) > max_data_len)
+		return (EINVAL);
+
+	return (0);
+}
+
+static int
+ufshci_passthrough_cmd(struct ufshci_controller *ctrlr,
+    struct ufshci_pt_command *pt)
+{
+	struct ufshci_completion_poll_status status;
+	struct ufshci_request *req;
+	size_t req_size, resp_size;
+	void *buf = NULL;
+	bool is_admin;
+	int error;
+
+	/*
+	 * An aborted request is completed by hand and may leave cpl
+	 * unfilled, so stack bytes would go back to userland.
+	 */
+	memset(&status, 0, sizeof(status));
+
+	if (pt->timeout_ms != 0)
+		return (EINVAL);
+
+	/*
+	 * The response copy below is shorter than this field, so without
+	 * clearing it the tail would hold the caller's own input.
+	 */
+	memset(&pt->resp_upiu, 0, sizeof(pt->resp_upiu));
+
+	/*
+	 * The ABI cap is fixed. What a controller can actually map is not,
+	 * so check both.
+	 */
+	if (pt->len > UFSHCI_PT_MAX_XFER || pt->len > ctrlr->max_xfer_size)
+		return (EINVAL);
+	if (pt->len != 0 && pt->buf == NULL)
+		return (EINVAL);
+
+	/* A buffer with no direction would build a PRDT nothing reads. */
+	if (pt->len != 0 && (pt->flags &
+	    (UFSHCI_PT_FLAG_DATA_IN | UFSHCI_PT_FLAG_DATA_OUT)) == 0)
+		return (EINVAL);
+
+	if ((pt->flags & (UFSHCI_PT_FLAG_DATA_IN | UFSHCI_PT_FLAG_DATA_OUT)) ==
+	    (UFSHCI_PT_FLAG_DATA_IN | UFSHCI_PT_FLAG_DATA_OUT))
+		return (EINVAL);
+
+	error = ufshci_passthrough_upiu_sizes(pt, &req_size, &resp_size,
+	    &is_admin);
+	if (error)
+		return (error);
+	if (req_size > sizeof(struct ufshci_upiu))
+		return (EINVAL);
+	/*
+	 * The completion union is smaller than a UPIU. An EHS must not
+	 * push the response past it.
+	 */
+	if (resp_size > sizeof(status.cpl.response_upiu))
+		return (EINVAL);
+	/*
+	 * Without EHSLUTRDS the controller cannot carry the EHS, so the
+	 * device would answer a partial request.
+	 */
+	if (pt->req_upiu.header.ehs_length != 0 &&
+	    UFSHCIV(UFSHCI_CAP_REG_EHSLUTRDS, ctrlr->cap) == 0)
+		return (EOPNOTSUPP);
+
+	if (pt->len != 0) {
+		buf = malloc(pt->len, M_UFSHCI, M_WAITOK | M_ZERO);
+		if (pt->flags & UFSHCI_PT_FLAG_DATA_OUT) {
+			error = copyin(pt->buf, buf, pt->len);
+			if (error)
+				goto out;
+		}
+	}
+
+	req = ufshci_allocate_request_vaddr(buf, pt->len, M_WAITOK,
+	    ufshci_completion_poll_cb, &status);
+
+	memcpy(&req->request_upiu, &pt->req_upiu, sizeof(req->request_upiu));
+	req->request_size = req_size;
+	req->response_size = resp_size;
+	req->is_admin = is_admin;
+
+	if (pt->flags & UFSHCI_PT_FLAG_DATA_OUT)
+		req->data_direction = UFSHCI_DATA_DIRECTION_FROM_SYS_TO_TGT;
+	else if (pt->flags & UFSHCI_PT_FLAG_DATA_IN)
+		req->data_direction = UFSHCI_DATA_DIRECTION_FROM_TGT_TO_SYS;
+	else
+		req->data_direction = UFSHCI_DATA_DIRECTION_NO_DATA_TRANSFER;
+
+	error = ufshci_ctrlr_submit_transfer_request(ctrlr, req);
+	if (error) {
+		ufshci_free_request(req);
+		goto out;
+	}
+
+	ufshci_completion_poll(&status);
+
+	memcpy(&pt->resp_upiu, &status.cpl.response_upiu,
+	    min(sizeof(pt->resp_upiu), sizeof(status.cpl.response_upiu)));
+	pt->xfer_len = pt->len;
+	/* The completion does not carry the overall command status yet. */
+	pt->ocs = 0;
+
+	/*
+	 * A refused command still answered, so let the caller read the
+	 * response. A failure that left the response zeroed had no answer.
+	 */
+	if (status.error && pt->resp_upiu.header.response == 0) {
+		error = EIO;
+		goto out;
+	}
+
+	if (pt->len != 0 && (pt->flags & UFSHCI_PT_FLAG_DATA_IN))
+		error = copyout(buf, pt->buf, pt->len);
+
+out:
+	free(buf, M_UFSHCI);
+	return (error);
+}
+
+static int
+ufshci_passthrough_uic_cmd(struct ufshci_controller *ctrlr,
+    struct ufshci_pt_uic_command *pt)
+{
+	uint32_t return_value = 0;
+	int error;
+
+	if (pt->timeout_ms != 0)
+		return (EINVAL);
+
+	/*
+	 * Only the four attribute commands. The rest can drop the link or
+	 * power the device off.
+	 */
+	switch (pt->cmd.opcode) {
+	case UFSHCI_DME_GET:
+	case UFSHCI_DME_SET:
+	case UFSHCI_DME_PEER_GET:
+	case UFSHCI_DME_PEER_SET:
+		break;
+	default:
+		return (EINVAL);
+	}
+
+	/*
+	 * On a path that never reads the register, a value the caller left
+	 * here would read as an answer.
+	 */
+	pt->cmd.argument2 &= ~(UFSHCI_UICCMDARG2_REG_ERROR_CODE_MASK <<
+	    UFSHCI_UICCMDARG2_REG_ERROR_CODE_SHIFT);
+
+	error = ufshci_uic_send_cmd(ctrlr, &pt->cmd, &return_value);
+
+	pt->result = UFSHCIV(UFSHCI_UICCMDARG2_REG_ERROR_CODE,
+	    pt->cmd.argument2);
+	if (pt->result != 0) {
+		/*
+		 * A refusal is a result, not a transport failure. There is no
+		 * attribute value to go with it, and the caller's own input
+		 * would read like one.
+		 */
+		pt->cmd.argument3 = 0;
+		return (0);
+	}
+	if (error)
+		return (error);
+
+	pt->cmd.argument3 = return_value;
+
+	return (0);
+}
+
 static int
 ufshci_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int flag,
     struct thread *td)
 {
+	struct ufshci_controller *ctrlr = cdev->si_drv1;
+
 	switch (cmd) {
+	case UFSHCI_PASSTHROUGH_CMD:
+		return (ufshci_passthrough_cmd(ctrlr,
+		    (struct ufshci_pt_command *)arg));
+	case UFSHCI_PASSTHROUGH_UIC:
+		return (ufshci_passthrough_uic_cmd(ctrlr,
+		    (struct ufshci_pt_uic_command *)arg));
 	default:
 		return (ENOTTY);
 	}
diff --git a/sys/dev/ufshci/ufshci_ioctl.h b/sys/dev/ufshci/ufshci_ioctl.h
index 57e1ce6fa869..c545c073fc0a 100644
--- a/sys/dev/ufshci/ufshci_ioctl.h
+++ b/sys/dev/ufshci/ufshci_ioctl.h
@@ -31,23 +31,29 @@
  * a command UPIU uses it.
  */
 struct ufshci_pt_command {
+	/* The driver overwrites task_tag. */
 	struct ufshci_upiu req_upiu;  /* [in] */
 	struct ufshci_upiu resp_upiu; /* [out] */
 	void *buf;		      /* [in] PRDT payload, may be NULL */
 	uint32_t len;		      /* [in] length of buf */
 	uint32_t flags;		      /* [in] UFSHCI_PT_FLAG_* */
-	uint32_t timeout_ms;	      /* [in] 0 means the driver default */
-	uint32_t xfer_len;	      /* [out] bytes actually moved */
-	uint8_t ocs;		      /* [out] overall command status */
+	uint32_t timeout_ms;	      /* [in] reserved, must be 0 */
+	uint32_t xfer_len;	      /* [out] bytes the request carried */
+	uint8_t ocs;		      /* [out] reserved, always 0 for now */
 	uint8_t reserved[7];
 };
 
 struct ufshci_pt_uic_command {
 	struct ufshci_uic_cmd cmd; /* [in/out] opcode and argument1..3 */
-	uint32_t timeout_ms;	   /* [in] */
+	uint32_t timeout_ms;	   /* [in] reserved, must be 0 */
 	uint32_t result;	   /* [out] UICCMDARG2 result code */
 };
 
+/*
+ * A zero return means the command reached the device, not that the device
+ * accepted it. The response field in the response UPIU header carries
+ * that. On an errno no output field is filled.
+ */
 #define UFSHCI_PASSTHROUGH_CMD	_IOWR('u', 0, struct ufshci_pt_command)
 #define UFSHCI_PASSTHROUGH_UIC	_IOWR('u', 1, struct ufshci_pt_uic_command)
 
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
index dd02c7311599..cc0b491d7137 100644
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -561,6 +561,8 @@ int ufshci_req_sdb_get_inflight_io(struct ufshci_controller *ctrlr);
 int ufshci_uic_power_mode_ready(struct ufshci_controller *ctrlr);
 int ufshci_uic_hibernation_ready(struct ufshci_controller *ctrlr);
 int ufshci_uic_cmd_ready(struct ufshci_controller *ctrlr);
+int ufshci_uic_send_cmd(struct ufshci_controller *ctrlr,
+    struct ufshci_uic_cmd *uic_cmd, uint32_t *return_value);
 int ufshci_uic_send_dme_link_startup(struct ufshci_controller *ctrlr);
 int ufshci_uic_send_dme_get(struct ufshci_controller *ctrlr, uint16_t attribute,
     uint32_t *return_value);
diff --git a/sys/dev/ufshci/ufshci_uic_cmd.c b/sys/dev/ufshci/ufshci_uic_cmd.c
index 45ded2a120c6..54e90253ec0b 100644
--- a/sys/dev/ufshci/ufshci_uic_cmd.c
+++ b/sys/dev/ufshci/ufshci_uic_cmd.c
@@ -165,7 +165,7 @@ ufshci_uic_wait_cmd(struct ufshci_controller *ctrlr,
 	return (0);
 }
 
-static int
+int
 ufshci_uic_send_cmd(struct ufshci_controller *ctrlr,
     struct ufshci_uic_cmd *uic_cmd, uint32_t *return_value)
 {
@@ -190,8 +190,9 @@ ufshci_uic_send_cmd(struct ufshci_controller *ctrlr,
 
 	/* The result registers stay valid only until the next command. */
 	if (error == 0) {
+		uic_cmd->argument2 = ufshci_mmio_read_4(ctrlr, ucmdarg2);
 		config_result_code = UFSHCIV(UFSHCI_UICCMDARG2_REG_ERROR_CODE,
-		    ufshci_mmio_read_4(ctrlr, ucmdarg2));
+		    uic_cmd->argument2);
 		result_value = ufshci_mmio_read_4(ctrlr, ucmdarg3);
 	}
 

From nobody Tue Oct  6 07:51:40 2026
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 4hzT3c4pX6z6cWCf
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:40 +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 4hzT3c1cd5z4HR8
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:40 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273100;
	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=ENiymume8G5KZQcfLqy64d1BEpDyHRCG7jRNcJaa21o=;
	b=V5wsSFxF/VjTUfT+c+NgCHqsDp8pgp+aQDNl/LGA3iQU8l/VAtRR/UUV3MsJP4qP9TXch7
	/Pz3X9CYYNJXoC5I/BLcJzGoQPIc+F/PERWmP9OneMop8B5s3TGDOy8ovLCxBtvxcAf3ap
	FPuMRaMdOkehVOr9VKh2cxAQsBTo/S6cTfx2RZ2Tov8i9MBciflroaeyqv1QHlnW7309LC
	atokc3FEt7a6XF/kJ7nVW/4Pi2MPhnehfo2kGD8w7g0ji84MaUkA02xAMTabOXVeidjQh4
	TmdckrvsYYW0+/GbF7GYaWpYBXGS/9iC2S+p45eyjNhn/oQuW5pvTNEzV1gPFw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273100;
	b=FbkxX4iTNCQUoqj0ZAQ9L6O4iANO5XB3ZsyBTlRCbxSxpWBNCkRUIa6pXJp70dzjP4XMJS
	R6qwNmbRZds1rNIEauQAsmlcj3cOEa52G6OsVhYpy1nxQyPxZi07W8TfX0cCifWelBNXol
	PwSEQ4L4FbP9omOkNb9dzC3TkWeI0v7UPpaQEYmhutagJW/2acRc+EKYrW7j5blaFsEUZc
	vEHgjybi0DjskeqDkTV321rDzSYKHSytCfZ51nuOYlZ23jy6xEpDIIWyEQZhebU/MVzl/9
	U5BT6oNo+TjXIcNW85k1dJI/6UBjbh++YkXsqQTJOUtDXf7GHYhCU+1+PiEWZA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273100;
	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=ENiymume8G5KZQcfLqy64d1BEpDyHRCG7jRNcJaa21o=;
	b=TZG0737nA/AJsnnPFUtMGWjHd9A1AdCcvpkQC2aIrAAvaCQnqKSG1CnUvHsOt2p0Itvk8B
	iLHaTpPbM7ejqU5Sx1w4P3CY+7hqW4ubj8pO0BwldFTKZSv5nBKsiLN16gD1FZ0rSy2WVv
	XivShwyz8IXMg8kz9pEeBVThbzBk9oQewfsoE3Znhzu4Yj9BpgOXIlYdjcwQbHsGjdaqkm
	98QR3uf++qMtyRgiR9+4W0hqKnyXerWv6OWNJF+aslbWxAwc6SUZdY+gy/mT7xYYZsVEwe
	6RpFFnMtNlh19Nw9orVBo4E13X54f0DAbZl4usx1U34B5UcMJpyEcz3FHhin7g==
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 4hzT3c0PfVzxr5
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:40 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 18aab
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:40 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: d815ad742011 - stable/15 - ufshci: install the ioctl header
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: d815ad7420115f8e453c42e8e0b94ab2049b53ee
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:40 +0000
Message-Id: <6ac4a88c.18aab.66b64c93@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=d815ad7420115f8e453c42e8e0b94ab2049b53ee

commit d815ad7420115f8e453c42e8e0b94ab2049b53ee
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-09-15 01:42:17 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:09 +0000

    ufshci: install the ioctl header
    
    The passthrough ioctl has a userland ABI header, but nothing installed
    it. A program that wanted to use the ioctl had to copy the headers out
    of the source tree by hand.
    
    Install ufshci.h and ufshci_ioctl.h under /usr/include/dev/ufshci, the
    way nvme installs nvme.h. The ioctl header pulls in ufshci.h, so both
    go. Add the directory to the include mtree so installworld creates it.
    
    Reviewed by:    imp (mentor)
    Sponsored by:   Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D59560
    
    (cherry picked from commit 8895b1348f3d21e2db16a06f31d555be0471e36d)
---
 etc/mtree/BSD.include.dist | 2 ++
 include/Makefile           | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/etc/mtree/BSD.include.dist b/etc/mtree/BSD.include.dist
index 81ea0842035c..a039538a85b8 100644
--- a/etc/mtree/BSD.include.dist
+++ b/etc/mtree/BSD.include.dist
@@ -259,6 +259,8 @@
         ..
         tcp_log
         ..
+        ufshci
+        ..
         usb
         ..
         veriexec
diff --git a/include/Makefile b/include/Makefile
index 80a776d89b12..e7f65adf02ba 100644
--- a/include/Makefile
+++ b/include/Makefile
@@ -192,6 +192,11 @@ NVMFDIR=	${INCLUDEDIR}/dev/nvmf
 PCI=		pcireg.h
 PCIDIR=		${INCLUDEDIR}/dev/pci
 
+.PATH: ${SRCTOP}/sys/dev/ufshci
+UFSHCI=		ufshci.h \
+		ufshci_ioctl.h
+UFSHCIDIR=	${INCLUDEDIR}/dev/ufshci
+
 .PATH: ${SRCTOP}/sys/dev/veriexec
 VERIEXEC=	veriexec_ioctl.h
 VERIEXECDIR=	${INCLUDEDIR}/dev/veriexec
@@ -266,6 +271,7 @@ INCSGROUPS=	INCS \
 		RPC \
 		SECAUDIT \
 		TEKEN \
+		UFSHCI \
 		VERIEXEC \
 		WG
 

From nobody Tue Oct  6 07:51:41 2026
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 4hzT3d5qmwz6cWNv
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 07:51:41 +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 4hzT3d2765z4HJh
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:41 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791273101;
	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=BjQqsopkLjZDeT1SRqQWW4T2A8JRoKe87VXsa5qqrnM=;
	b=ZmZgXDpHsWKol5u0KSOqq/A2+zVZvjELro8kJW9Y282BgyLSCjWZS7T+XjjFU8+/vPxAUX
	3dq4vvopo9uZftKPw+4bOXWVWIesryahD2L98RHk8pSxLm7cvG0r+TMdwtn/lKO9mxDPTS
	3YBSaAgr4pCF2xIaJWAy8GYKDwAwCvJALCPj+kkXphLcs09hCrS/sjaNpEGpRHil6YPEUM
	nUKjLqM7TCyprMMfszPa4cUvUb/6czrEy5rUSHrz+UY2H0IbswoShtTgnKQ/QER3oX+fjP
	BYoeBb/JPKWMs8bvvR6gevklz9rVjGe8VoE6RNdXJtEIPHN4OAVI7eP5fqPt5A==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273101;
	b=wl9a27LnQVDVE93tKD+3q8MFfcOW4i089hrIVxXZrdSZliJIFDGljRaC8f0GkD7x9UgufJ
	HM3i4vpb0M8hugXYLpJ77YllByucJJj757oxw26UBJEPdmqUa8UiPPdpz2T7u+IwJnzqcP
	I9vXzzHQPtqQIM7cNivY0Is1u2NDNJ/VBmg8Li3In1eF9MP9hTIZSEcVBVA++rLRbWqbfJ
	ct4R4rFQD8N23tyZf6dAFfY0wzoQ0Q4sk8Xje6D1J3gYeX5ZHfIYFDZQzE6eohMs0hxvdB
	f+m0OBUZkTR/y6kOEbg+OVhgFYEq8+jKUnrLvxPfZIf7zgk6TR173IjPZfT5jA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791273101;
	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=BjQqsopkLjZDeT1SRqQWW4T2A8JRoKe87VXsa5qqrnM=;
	b=OGDu4TcylJRkpItNYYwp0E1aAN7YTxeLCniAb5DOrT62zELy92cAHH0H+AmoMlkSBfM1eK
	fKLWJiPGPB6VFGfb3h4r9h1MKTfZd0JG6REAHMgPVn6I3s8hZUuFykuMsFs1MgduGnQdOY
	/3CcefBAhk3v3UeiZlofTzNfTiors7stqn4FTxC2W9KvkU9z01mIq9VMyXZGgi2bmgQQU4
	8Nkn0TLQLBsUgtNj7btfMGhWTOsQHJm1/nBHYf1OC2flOKjFOWq06ljCM5RMtrp6e1kgfi
	Zk4YDH4V83LEpbaC+yKNaNCrD8/E0Lo3yiaSyXHzA/kRwehO7lRQ26yW439viA==
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 4hzT3d127Wzx0K
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 07:51:41 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 477f4
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 07:51:41 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Jaeyoon Choi <jaeyoon@FreeBSD.org>
Subject: git: 7c66df657e16 - stable/15 - ufshci: build the ioctl file into the kernel
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: jaeyoon
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 7c66df657e167d1e1759d0e4e8c11d5cc3ed6835
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 07:51:41 +0000
Message-Id: <6ac4a88d.477f4.1e190f41@gitrepo.freebsd.org>

The branch stable/15 has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=7c66df657e167d1e1759d0e4e8c11d5cc3ed6835

commit 7c66df657e167d1e1759d0e4e8c11d5cc3ed6835
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-09-15 03:02:38 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-10-06 06:28:10 +0000

    ufshci: build the ioctl file into the kernel
    
    The passthrough ioctl went into the module build only. A kernel with
    device ufshci then failed to link, because ufshci_ctrlr.c calls
    ufshci_ioctl_construct() and ufshci_ioctl_destruct() and neither was
    compiled in.
    
    Add the file to sys/conf/files.
    
    Fixes:          28fefc441e3b ("ufshci: add a control device node")
    Sponsored by:   Samsung Electronics
    
    (cherry picked from commit d435248a2196bc78f626850a7ae700aaeace1c13)
---
 sys/conf/files | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sys/conf/files b/sys/conf/files
index b64b0c1355fa..07d94ab61547 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -3292,6 +3292,7 @@ dev/ufshci/ufshci_acpi.c	optional ufshci acpi
 dev/ufshci/ufshci_ctrlr.c	optional ufshci
 dev/ufshci/ufshci_ctrlr_cmd.c	optional ufshci
 dev/ufshci/ufshci_dev.c		optional ufshci
+dev/ufshci/ufshci_ioctl.c	optional ufshci
 dev/ufshci/ufshci_pci.c		optional ufshci pci
 dev/ufshci/ufshci_req_queue.c	optional ufshci
 dev/ufshci/ufshci_req_sdb.c	optional ufshci

From nobody Tue Oct  6 08:53:33 2026
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 4hzVR12tvvz6ccKW
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 08:53:33 +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 4hzVR12PFCz4h7J
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 08:53:33 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791276813;
	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=v/WB550Hi5AU4HNE7yEq0XxrWRhid3op3I/9l8+rsXY=;
	b=ZIdexb+MrOf4AYnlZXM8TiCNjRqJuZKAn550VUaH6KmZfXNTYFu63j80vLqjPnNPSRkTJa
	MhLbVqnldqwPHGnstmnOzR+lV9orFlrsDn/PTSyYdWOr7/JdIxpQZGoIoJasF8Fp0uW4AW
	ku5vma8FsSvajJh9KoTaaqmWtnhbWuWm4YLbkEUkAwz9zJnqKT5JzCA2iaMo0Z9Bidt09C
	9QScqDWGK2Hf6KuRaDYrIjba3PGrs7is4u8ZLUCBMMBGJwCl6lnuaEo7m74lRFzYsgItgN
	Wfefak2xGq4+E5gLRFumj8RdSGadY6bZlQLBRywTElsEVONzcE2R+DFr4KObYA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791276813;
	b=NyyNM22P/z9avxu51CZzAdMZLHKseutLKNm6Svzj/r0VSN/pe1DG6sCyHujuRk9bRlL9xJ
	0Z6SGuNOJPdPyPOWEh6XNixf37IITfBP9dTFHCCbuugay2kRZ4ZmeBb2MGPFEeHZzLO5dH
	qbhr7n2/iBXj0VpcOKaNT8IMkesrDZT0I6k/UUpQPPcYwWNHERJWNkSArVXWhdEleybOZJ
	C5YqqvW0lVoi3ef7A1R9R4om+SsrYzXjTAbGCcLAxD7fJ2jJAqYZNYAWr19vdzDI9l4W5S
	VMKciAeC2T1VtNYVmtOAta35CV0cBVlA10HcwVBAYrE+G5j6YAGYkxoR3xqNYw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791276813;
	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=v/WB550Hi5AU4HNE7yEq0XxrWRhid3op3I/9l8+rsXY=;
	b=nAS9CWSNmDEPxfiORHtMNLqK4zUqjRPp0n8CCy7HHUqnwyhNe9wVvGD1n2U4QIzPr61Ky7
	BeuRLSsVYMXiPF1R9Su0uPtAZocSr5QbssADPWxQtZPnbKQ4r8+nRk18WkYVZI57VEhaAV
	5ZhF2CjBWk19kOT/wtNC3xXEia0zA3hi++a+gAJ+oKIP58QWD1xvBPSJq5HYg2ZpcuKDdC
	xNEfhaLI8Y6sG8Bn0iqy5B2HBbmtNi9Jv+S6gF5UrRoOZSZpqdZQ/+vf5NMlLAXs00dBHa
	8egIjeNUhnB+PXOawIV6LxVVl+hvuPdPqIzq7JgM0tbHddXeW9btaogll5beJw==
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 4hzVR118NNz10Sv
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 08:53:33 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 1fe21
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 08:53:33 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Roman Bogorodskiy <novel@FreeBSD.org>
Subject: git: 35aeff778dc9 - stable/15 - bhyveload: validate character disk devices
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: novel
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 35aeff778dc976fa48b3a165dd80a92eb452f5e2
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 08:53:33 +0000
Message-Id: <6ac4b70d.1fe21.7f8ce6cd@gitrepo.freebsd.org>

The branch stable/15 has been updated by novel:

URL: https://cgit.FreeBSD.org/src/commit/?id=35aeff778dc976fa48b3a165dd80a92eb452f5e2

commit 35aeff778dc976fa48b3a165dd80a92eb452f5e2
Author:     Roman Bogorodskiy <novel@FreeBSD.org>
AuthorDate: 2026-08-28 17:51:31 +0000
Commit:     Roman Bogorodskiy <novel@FreeBSD.org>
CommitDate: 2026-10-06 08:16:43 +0000

    bhyveload: validate character disk devices
    
    Currently, bhyveload(8) does not validate the supplied disk
    image path. For example, it allows passing the /dev/null
    device, which later fails in userboot because it does not
    support DIOCGSECTORSIZE and DIOCGMEDIASIZE ioctls (see
    userdisk_init() in stand/userboot/userboot/userboot_disk.c).
    
    Fix that by checking DIOCGSECTORSIZE and DIOCGMEDIASIZE ioctls early.
    A similar check already exists in bhyve(8). While here, make
    cb_diskioctl() report the obtained sector size instead of
    hard-coding 512.
    
    Reviewed by:    markj
    MFC after:      2 weeks
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D59253
    
    (cherry picked from commit 51234535ddd6ec0afe9dd4e3f34a31b92d5cdd78)
---
 usr.sbin/bhyveload/bhyveload.c | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/usr.sbin/bhyveload/bhyveload.c b/usr.sbin/bhyveload/bhyveload.c
index 3ee5f7ac7129..3f29d642461d 100644
--- a/usr.sbin/bhyveload/bhyveload.c
+++ b/usr.sbin/bhyveload/bhyveload.c
@@ -364,7 +364,14 @@ cb_diskioctl(void *arg __unused, int unit, u_long cmd, void *data)
 
 	switch (cmd) {
 	case DIOCGSECTORSIZE:
-		*(u_int *)data = 512;
+		if (fstat(disk_fd[unit], &sb) != 0)
+			return (ENOTTY);
+		if (S_ISCHR(sb.st_mode)) {
+			if (ioctl(disk_fd[unit], DIOCGSECTORSIZE, data) != 0)
+				return (ENOTTY);
+		} else {
+			*(u_int *)data = 512;
+		}
 		break;
 	case DIOCGMEDIASIZE:
 		if (fstat(disk_fd[unit], &sb) != 0)
@@ -718,7 +725,9 @@ altcons_open(char *path)
 static int
 disk_open(char *path)
 {
-	int fd;
+	struct stat sbuf;
+	off_t size;
+	int fd, ret, sectsz;
 
 	if (ndisks >= NDISKS)
 		return (ERANGE);
@@ -726,11 +735,30 @@ disk_open(char *path)
 	fd = open(path, O_RDWR);
 	if (fd < 0)
 		return (errno);
+	if (fstat(fd, &sbuf) < 0) {
+		ret = errno;
+		goto err;
+	}
+
+	size = sbuf.st_size;
+	sectsz = DEV_BSIZE;
+	if (S_ISCHR(sbuf.st_mode)) {
+		if (ioctl(fd, DIOCGMEDIASIZE, &size) < 0 ||
+		    ioctl(fd, DIOCGSECTORSIZE, &sectsz) < 0) {
+			ret = errno;
+			goto err;
+		}
+		assert(size != 0);
+		assert(sectsz != 0);
+	}
 
 	disk_fd[ndisks] = fd;
 	ndisks++;
 
 	return (0);
+err:
+	close(fd);
+	return (ret);
 }
 
 static void
@@ -814,7 +842,7 @@ main(int argc, char** argv)
 		case 'd':
 			error = disk_open(optarg);
 			if (error != 0)
-				errx(EX_USAGE, "Could not open '%s'", optarg);
+				errc(EX_USAGE, error, "Could not open '%s'", optarg);
 			break;
 
 		case 'e':

From nobody Tue Oct  6 16:38:29 2026
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 4hzhlV3Lcnz4n9kS
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 16:38:30 +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 4hzhlV0mPhz4mYQ
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:30 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791304710;
	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=BBuRffBSN4wmBjteHG0HocO5j7HLwtvBk28/gqaaC0Q=;
	b=sRAevXLpRUXRGRel09gXxYI60uZgR3elYsdDfNk4vyCdH9V9ItKYkWwn9xsRzqRUS0FVeS
	uOm+Bx+zk6jMLug4QFtcdvi3hDuN6/sAj9/qmK7S7gNtSSwZRwrps4k6P9ud6PJ/uIFVZG
	qwykJFRiAQzkQpeWtcDhVdUh8WgF6iLvmGi5+Wb9rzwGzNLGmh+YV+rKSliIEtr9X4U7u0
	ZVv1nQyDv+CAYXKv1izQGVfXmK3iylIe+IWsPkp8JS2Ds6aWsdGaAJxGf0d5b1+OQE/MAX
	C1dZRB0K7Cqq9MWfbu8/HkZsILOVu4rmH9Z1zYje48mfvfmCDv1Sr6GsgR8toQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791304710;
	b=No5TtFZsnt09rEU2IHcpadgz9lz4sFZzk37H1fGOdO8rbdQpFPFkEAQwSWG6/pi9ICcpsh
	wQieiO/cGHoJdVMkmEv5/pUpRynWo2U+//s19/HpcWAfHu9Rxpy+UHoqxUixZ0/FwlowwC
	ivVOXUuG4PBKHWLcfE3oqOY0z4HbN6zNVwEKnfl/CXI6YlTU0F9KF7jdrD3TR0nDQL4/H9
	MJoxm9NDkgQWJ4l8C7Jwm/aOSusN4lIYvmTxnuNJO6yCcZQvNMJuD/eXOooihoIIs0PYwi
	cc6GSM9gaEkgJ7dnu9S+JLO9q2zDys+IpB4u0Wg7AygBzebb7lpSulNnFxVMjA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791304710;
	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=BBuRffBSN4wmBjteHG0HocO5j7HLwtvBk28/gqaaC0Q=;
	b=jLcLkm67/ZKfVZibKn6RNBnWD18VdB9xB9NyRBHJYW5fNmykRZhWstnDNGVbQU0LTH3aCy
	Q4SXL4WPjXW21R1C1RIX+jsyRfXlJOf9cUUJA/qMA4eit+Ggktgk/Kz1mIpe68N4Ky5RKy
	YKgZMmNvKOLbJUptKw80Gy0LvzaUF+rZGsAOVwOlI7EjkLkJu9GG/7YLv1J7RgEociF1Pu
	YO2w4+TzGH8Lk4e9nVbRTnZ5m3VoKrpShq/SS0IaY0PXsbpsNUrb1jmljNB05nQYDqAIgN
	f3HcxBi2ue6lhuvPgiaWUm2rFJYs+Ok0wAy7t6J5uPyeMnt0+TZEpAyrBweYAA==
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 4hzhlT6fFTzDn0
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:29 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 30155
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 16:38:29 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Dimitry Andric <dim@FreeBSD.org>
Subject: git: afc8c5f9fd73 - stable/15 - Merge commit 80e8c0a59189 from llvm-project (by ShengYi Hung):
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: dim
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: afc8c5f9fd73badc16d8312d86ecfd88ad01be01
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 16:38:29 +0000
Message-Id: <6ac52405.30155.57f9b8ea@gitrepo.freebsd.org>

The branch stable/15 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=afc8c5f9fd73badc16d8312d86ecfd88ad01be01

commit afc8c5f9fd73badc16d8312d86ecfd88ad01be01
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2026-10-01 12:31:42 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2026-10-06 16:34:13 +0000

    Merge commit 80e8c0a59189 from llvm-project (by ShengYi Hung):
    
      [DebugInfo] Fill Column 0 if Line is not found (#227559)
    
      It is possible that user specified line 0 as the start of the line in C
      language (using `# 0`). However, it is rejected by the Lexer as we have
      no line but still carries column information. As a result, we fill
      column to 0 if we cannot find line.
    
      Assisted-by: Claude # Test
      Fixes: #56186
    
    This fixes a fatal error when building the textproc/peg port.
    
    PR:             264853
    MFC after:      3 days
    
    (cherry picked from commit 37c9eba1644b0f9e1b5d130ccff381122f48aebe)
---
 contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp b/contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp
index ec28bd259e8e..42e38bfc2872 100644
--- a/contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -4868,9 +4868,12 @@ void CGDebugInfo::CreateLexicalBlock(SourceLocation Loc) {
   llvm::MDNode *Back = nullptr;
   if (!LexicalBlockStack.empty())
     Back = LexicalBlockStack.back().get();
+  // A #line 0 macro carried no line information but still take column
+  // information. This will finally be rejected by the lexer but is legal.
+  unsigned Line = getLineNumber(CurLoc);
+  unsigned Column = Line ? getColumnNumber(CurLoc) : 0;
   LexicalBlockStack.emplace_back(DBuilder.createLexicalBlock(
-      cast<llvm::DIScope>(Back), getOrCreateFile(CurLoc), getLineNumber(CurLoc),
-      getColumnNumber(CurLoc)));
+      cast<llvm::DIScope>(Back), getOrCreateFile(CurLoc), Line, Column));
 }
 
 void CGDebugInfo::AppendAddressSpaceXDeref(

From nobody Tue Oct  6 16:38:31 2026
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 4hzhlW3Kwbz4n9kT
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 16:38:31 +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 4hzhlW1Hwbz4mYS
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:31 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791304711;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=45AS1rSLfmzCNS17BlsDZNkQwqEPUQS07lzU+Fumj0Y=;
	b=TQoiwXF8ThMwnz3MYvxB9R0WcN7mG2pguYC3VACGqqp+TF+qE8jlTKd6FFJHRzRqkkCPhr
	Lr+ZGfvLBJyvSEv4F+1vnBl0636Et2TKd5BPIxWIXrkasYS32Brd01wGw/kVAqhpZapnRP
	yKt4KWJoVUmWVe4RYJnu2oOPY9NX3NN5HiJf/AjuoSHqPe5u0iPJV9P8K6dP5jqE8RfEWL
	AM3VFe2LZIN42fnZHqMWZp/eCjHZkz6tURmEANsIXrJeUF2ZzYPs1WbaQVnr4EUz6phR77
	htpYTKL/nk0/hdBFHkuZKJlG66GRieMoXMeunyhIqG+cZIfNQ66IWE2M4a/vWA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791304711;
	b=m5arKNOtc4murJBXHfxjNm1ppe00eqSal2VoDeNqakSwtcxBzswXYhBOrjuvE+WMcNB981
	FvLWATbPkrBXWrVd3iXadnjo3nPLykyEudNiylCpbT57hQqLSJxYmOzXWvxlB3saLrMV5F
	Sb6lrC0oI0D+TzNbNrKeF2LzO1eZWoodYav/CUPEIIk6B22Ss1kBl4TbtmEqmgbzHq8xjf
	W2BBICF1X+23rD8bgO210cAvTSPdsdq5B3k9m/8rYPWjc3GsuivR/fBnCq6vWW7+jie/Dk
	Li7/xHbVqan66DC1RkwK3D7WWqx3TfTLY6bFaE7rnza4qgESldL1PBpTW/zD8A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791304711;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=45AS1rSLfmzCNS17BlsDZNkQwqEPUQS07lzU+Fumj0Y=;
	b=UJLqGeozRxvjqluIJ4Uyv/TGsAOmhyrfMQDeyOtXbjasolUXzTl2cjMj03eJD4T0fAXKsj
	ijlMhaFo3Khyl+CKtMHomX5inGmO3wUHtD+5P0PsN9dI8XhCX0WDipAs9JQ3BFSHEJjH1g
	LX7Je6zE7TUW4hA2vS1xHhDC/1xl3aiflIQ5zcr9yzlsz9drnsMY3MQxzC+gj4RvFEiQ/c
	ZwAwxrYMtZ0ktfT3KST4lIAXrF+TnDuKXb+J0/QQ6m5Qog9OGcaGgrUPpRnBcLmg85FXDJ
	jFjuEzuK+CiW/D7NoAkUUX5ueZl/aR2Wv0KSDX7xwQAYA81sf1h+xP/b4OLumQ==
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 4hzhlW0M1hz1Chs
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:31 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 30fa9
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 16:38:31 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Cc: Xiaoqiang Zhao <zhaoxiaoqiang007@gmail.com>
From: Dimitry Andric <dim@FreeBSD.org>
Subject: git: 8b754816e803 - stable/15 - llvm: add LoongArch target support, not enabled by default
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: dim
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 8b754816e8032ceac791a9cfd5b6b9f589d81755
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 16:38:31 +0000
Message-Id: <6ac52407.30fa9.7764f8fa@gitrepo.freebsd.org>

The branch stable/15 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=8b754816e8032ceac791a9cfd5b6b9f589d81755

commit 8b754816e8032ceac791a9cfd5b6b9f589d81755
Author:     Xiaoqiang Zhao <zhaoxiaoqiang007@gmail.com>
AuthorDate: 2026-09-28 15:14:09 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2026-10-06 16:37:45 +0000

    llvm: add LoongArch target support, not enabled by default
    
    Note there is ongoing work to add LoongArch support to the base system,
    but having target support in llvm is an essential component.
    
    This must be explicitly enabled using WITH_LLVM_TARGET_LOONGARCH.
    
    Reviewed by:    dim
    MFC after:      1 week
    Differential Revision: https://reviews.freebsd.org/D59899
    
    (cherry picked from commit 2f49e40a684a4bffd8e368a6878384ec4f735ea8)
---
 lib/clang/include/llvm/Config/AsmParsers.def      |  3 ++
 lib/clang/include/llvm/Config/AsmPrinters.def     |  3 ++
 lib/clang/include/llvm/Config/Disassemblers.def   |  3 ++
 lib/clang/include/llvm/Config/Targets.def         |  3 ++
 lib/clang/libllvm/Makefile                        | 55 ++++++++++++++++++++---
 lib/clang/llvm.build.mk                           |  6 +++
 share/man/man5/src.conf.5                         |  7 ++-
 share/mk/src.opts.mk                              |  2 +-
 tools/build/options/WITHOUT_LLVM_TARGET_BPF       |  1 +
 tools/build/options/WITHOUT_LLVM_TARGET_LOONGARCH |  1 +
 tools/build/options/WITH_LLVM_TARGET_BPF          |  3 --
 tools/build/options/WITH_LLVM_TARGET_LOONGARCH    |  1 +
 12 files changed, 74 insertions(+), 14 deletions(-)

diff --git a/lib/clang/include/llvm/Config/AsmParsers.def b/lib/clang/include/llvm/Config/AsmParsers.def
index 8cf3ffd6b0d4..a10e12bb10c7 100644
--- a/lib/clang/include/llvm/Config/AsmParsers.def
+++ b/lib/clang/include/llvm/Config/AsmParsers.def
@@ -33,6 +33,9 @@ LLVM_ASM_PARSER(ARM)
 #ifdef LLVM_TARGET_ENABLE_BPF
 LLVM_ASM_PARSER(BPF)
 #endif
+#ifdef LLVM_TARGET_ENABLE_LOONGARCH
+LLVM_ASM_PARSER(LoongArch)
+#endif
 #ifdef LLVM_TARGET_ENABLE_POWERPC
 LLVM_ASM_PARSER(PowerPC)
 #endif
diff --git a/lib/clang/include/llvm/Config/AsmPrinters.def b/lib/clang/include/llvm/Config/AsmPrinters.def
index b88e60ada874..2f45fe174db7 100644
--- a/lib/clang/include/llvm/Config/AsmPrinters.def
+++ b/lib/clang/include/llvm/Config/AsmPrinters.def
@@ -33,6 +33,9 @@ LLVM_ASM_PRINTER(ARM)
 #ifdef LLVM_TARGET_ENABLE_BPF
 LLVM_ASM_PRINTER(BPF)
 #endif
+#ifdef LLVM_TARGET_ENABLE_LOONGARCH
+LLVM_ASM_PRINTER(LoongArch)
+#endif
 #ifdef LLVM_TARGET_ENABLE_POWERPC
 LLVM_ASM_PRINTER(PowerPC)
 #endif
diff --git a/lib/clang/include/llvm/Config/Disassemblers.def b/lib/clang/include/llvm/Config/Disassemblers.def
index 72c0dcab0ab3..2530e01e635f 100644
--- a/lib/clang/include/llvm/Config/Disassemblers.def
+++ b/lib/clang/include/llvm/Config/Disassemblers.def
@@ -33,6 +33,9 @@ LLVM_DISASSEMBLER(ARM)
 #ifdef LLVM_TARGET_ENABLE_BPF
 LLVM_DISASSEMBLER(BPF)
 #endif
+#ifdef LLVM_TARGET_ENABLE_LOONGARCH
+LLVM_DISASSEMBLER(LoongArch)
+#endif
 #ifdef LLVM_TARGET_ENABLE_POWERPC
 LLVM_DISASSEMBLER(PowerPC)
 #endif
diff --git a/lib/clang/include/llvm/Config/Targets.def b/lib/clang/include/llvm/Config/Targets.def
index 725efe253ced..70ef796f5d0a 100644
--- a/lib/clang/include/llvm/Config/Targets.def
+++ b/lib/clang/include/llvm/Config/Targets.def
@@ -32,6 +32,9 @@ LLVM_TARGET(ARM)
 #ifdef LLVM_TARGET_ENABLE_BPF
 LLVM_TARGET(BPF)
 #endif
+#ifdef LLVM_TARGET_ENABLE_LOONGARCH
+LLVM_TARGET(LoongArch)
+#endif
 #ifdef LLVM_TARGET_ENABLE_POWERPC
 LLVM_TARGET(PowerPC)
 #endif
diff --git a/lib/clang/libllvm/Makefile b/lib/clang/libllvm/Makefile
index e7c146d9c0bf..3553aa44d2b2 100644
--- a/lib/clang/libllvm/Makefile
+++ b/lib/clang/libllvm/Makefile
@@ -23,14 +23,15 @@ CFLAGS+=	-I${.OBJDIR}
 CFLAGS+=	-I${SRCTOP}/sys/contrib/zstd/lib
 
 .if ${MK_LLVM_TARGET_AARCH64} == "no" && ${MK_LLVM_TARGET_ARM} == "no" && \
-    ${MK_LLVM_TARGET_BPF} == "no" && ${MK_LLVM_TARGET_POWERPC} == "no" && \
-    ${MK_LLVM_TARGET_RISCV} == "no" && ${MK_LLVM_TARGET_X86} == "no"
+    ${MK_LLVM_TARGET_BPF} == "no" && ${MK_LLVM_TARGET_LOONGARCH} == "no" && \
+    ${MK_LLVM_TARGET_POWERPC} == "no" && ${MK_LLVM_TARGET_RISCV} == "no" && \
+    ${MK_LLVM_TARGET_X86} == "no"
 .error Please enable at least one of: MK_LLVM_TARGET_AARCH64,\
- MK_LLVM_TARGET_ARM, MK_LLVM_TARGET_BPF, MK_LLVM_TARGET_POWERPC,\
- MK_LLVM_TARGET_RISCV, or MK_LLVM_TARGET_X86
+ MK_LLVM_TARGET_ARM, MK_LLVM_TARGET_BPF, MK_LLVM_TARGET_LOONGARCH, \
+ MK_LLVM_TARGET_POWERPC, MK_LLVM_TARGET_RISCV, or MK_LLVM_TARGET_X86
 .endif
 
-.for arch in AArch64 ARM BPF PowerPC RISCV X86
+.for arch in AArch64 ARM BPF LoongArch PowerPC RISCV X86
 . if ${MK_LLVM_TARGET_${arch:tu}} != "no"
 CFLAGS+=	-I${LLVM_SRCS}/lib/Target/${arch}
 . endif
@@ -1754,6 +1755,36 @@ SRCS_MIN+=	Target/X86/X86VZeroUpper.cpp
 SRCS_MIN+=	Target/X86/X86WinEHState.cpp
 SRCS_MIN+=	Target/X86/X86WinEHUnwindV2.cpp
 .endif # MK_LLVM_TARGET_X86
+.if ${MK_LLVM_TARGET_LOONGARCH} != "no"
+SRCS_MIN+=	Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
+SRCS_MIN+=	Target/LoongArch/Disassembler/LoongArchDisassembler.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchAsmPrinter.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchDeadRegisterDefinitions.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchExpandAtomicPseudoInsts.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchExpandPseudoInsts.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchFrameLowering.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchISelDAGToDAG.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchISelLowering.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchInstrInfo.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchMCInstLower.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchMergeBaseOffset.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchOptWInstrs.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchRegisterInfo.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchSubtarget.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchTargetMachine.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchTargetTransformInfo.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchBaseInfo.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchELFStreamer.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchInstPrinter.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchMCAsmInfo.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchMCTargetDesc.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchMatInt.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchTargetStreamer.cpp
+SRCS_MIN+=	Target/LoongArch/TargetInfo/LoongArchTargetInfo.cpp
+.endif # MK_LLVM_TARGET_LOONGARCH
 SRCS_MIN+=	TargetParser/AArch64TargetParser.cpp
 SRCS_MIN+=	TargetParser/ARMTargetParser.cpp
 SRCS_MIN+=	TargetParser/ARMTargetParserCommon.cpp
@@ -2268,7 +2299,8 @@ beforebuild:
 
 # Note: some rules are superfluous, not every combination is valid.
 .for arch in \
-	AArch64/AArch64 ARM/ARM BPF/BPF PowerPC/PPC RISCV/RISCV X86/X86
+	AArch64/AArch64 ARM/ARM BPF/BPF LoongArch/LoongArch PowerPC/PPC \
+	RISCV/RISCV X86/X86
 . for hdr in \
 	AsmMatcher/-gen-asm-matcher \
 	AsmWriter/-gen-asm-writer \
@@ -2415,6 +2447,17 @@ TGHDRS+=	X86GenRegisterBank.inc
 TGHDRS+=	X86GenRegisterInfo.inc
 TGHDRS+=	X86GenSubtargetInfo.inc
 .endif # MK_LLVM_TARGET_X86
+.if ${MK_LLVM_TARGET_LOONGARCH} != "no"
+TGHDRS+=	LoongArchGenAsmMatcher.inc
+TGHDRS+=	LoongArchGenAsmWriter.inc
+TGHDRS+=	LoongArchGenDAGISel.inc
+TGHDRS+=	LoongArchGenDisassemblerTables.inc
+TGHDRS+=	LoongArchGenInstrInfo.inc
+TGHDRS+=	LoongArchGenMCCodeEmitter.inc
+TGHDRS+=	LoongArchGenMCPseudoLowering.inc
+TGHDRS+=	LoongArchGenRegisterInfo.inc
+TGHDRS+=	LoongArchGenSubtargetInfo.inc
+.endif # MK_LLVM_TARGET_LOONGARCH
 
 DEPENDFILES+=	${TGHDRS:C/$/.d/}
 DPSRCS+=	${TGHDRS}
diff --git a/lib/clang/llvm.build.mk b/lib/clang/llvm.build.mk
index b975b3c964a2..a1d39f6d5cb7 100644
--- a/lib/clang/llvm.build.mk
+++ b/lib/clang/llvm.build.mk
@@ -83,6 +83,12 @@ CFLAGS+=	-DLLVM_TARGET_ENABLE_RISCV
 LLVM_NATIVE_ARCH=	RISCV
 . endif
 .endif
+.if ${MK_LLVM_TARGET_LOONGARCH} != "no"
+CFLAGS+=	-DLLVM_TARGET_ENABLE_LOONGARCH
+. if ${MACHINE_CPUARCH} == "loongarch"
+LLVM_NATIVE_ARCH=	LoongArch
+. endif
+.endif
 .if ${MK_LLVM_TARGET_X86} != "no"
 CFLAGS+=	-DLLVM_TARGET_ENABLE_X86
 . if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5
index 18dc3b2f2eac..1bd7f0ca28b4 100644
--- a/share/man/man5/src.conf.5
+++ b/share/man/man5/src.conf.5
@@ -1,5 +1,5 @@
 .\" DO NOT EDIT-- this file is @generated by tools/build/options/makeman.
-.Dd October 1, 2026
+.Dd October 6, 2026
 .Dt SRC.CONF 5
 .Os
 .Sh NAME
@@ -1065,9 +1065,8 @@ The
 option should be used rather than this in most cases.
 .It Va WITH_LLVM_TARGET_BPF
 Build LLVM target support for BPF.
-The
-.Va LLVM_TARGET_ALL
-option should be used rather than this in most cases.
+.It Va WITH_LLVM_TARGET_LOONGARCH
+Build LLVM target support for LoongArch.
 .It Va WITHOUT_LLVM_TARGET_POWERPC
 Do not build LLVM target support for PowerPC.
 The
diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk
index 8e67ced5a9a6..63a1b17ea19f 100644
--- a/share/mk/src.opts.mk
+++ b/share/mk/src.opts.mk
@@ -295,7 +295,7 @@ __DEFAULT_DEPENDENT_OPTIONS+=	LLVM_TARGET_${__llt:${__LLVM_TARGET_FILT}:tu}/LLVM
 .endif
 .endfor
 
-__DEFAULT_NO_OPTIONS+=LLVM_TARGET_BPF
+__DEFAULT_NO_OPTIONS+=LLVM_TARGET_BPF LLVM_TARGET_LOONGARCH
 
 .include <bsd.compiler.mk>
 
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_BPF b/tools/build/options/WITHOUT_LLVM_TARGET_BPF
new file mode 100644
index 000000000000..392e930d8008
--- /dev/null
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_BPF
@@ -0,0 +1 @@
+Do not build LLVM target support for BPF.
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_LOONGARCH b/tools/build/options/WITHOUT_LLVM_TARGET_LOONGARCH
new file mode 100644
index 000000000000..e6d5d8be834f
--- /dev/null
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_LOONGARCH
@@ -0,0 +1 @@
+Do not build LLVM target support for LoongArch.
diff --git a/tools/build/options/WITH_LLVM_TARGET_BPF b/tools/build/options/WITH_LLVM_TARGET_BPF
index 664cc85a52b9..45811be6174d 100644
--- a/tools/build/options/WITH_LLVM_TARGET_BPF
+++ b/tools/build/options/WITH_LLVM_TARGET_BPF
@@ -1,4 +1 @@
 Build LLVM target support for BPF.
-The
-.Va LLVM_TARGET_ALL
-option should be used rather than this in most cases.
diff --git a/tools/build/options/WITH_LLVM_TARGET_LOONGARCH b/tools/build/options/WITH_LLVM_TARGET_LOONGARCH
new file mode 100644
index 000000000000..157b18a9df9a
--- /dev/null
+++ b/tools/build/options/WITH_LLVM_TARGET_LOONGARCH
@@ -0,0 +1 @@
+Build LLVM target support for LoongArch.

From nobody Tue Oct  6 16:38:32 2026
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 4hzhlX41BVz4n9kW
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 16:38:32 +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 4hzhlX25hHz4mbt
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:32 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791304712;
	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=nsMJJxOT5Erdhdo9+Mjp0IBoGKS/hMqmfQ67rBPaNbg=;
	b=xaXJWFNDXqlKE5QIf7z2KF8GBAUhrBoiqYTyuDDTJ24nshMYxFA0hHz9d8kAv2tJ48BzAr
	vNK7cUC3zPtbEoqPtlJDKvuTG/v1ZyuQle8KWUwBv1yiPGbQQvWHSVIqJXitzjmYcKS6N0
	9j4czmZ08SxUVFWReIeW93FZtC1ekio3WJCUwZ+GmoCOsll9JkuA3+GIA7dJP0XhIXu9tg
	Nkt/3YgPa8BlxeZWMZCaZd3VY1V/TGvVPLirsK1507hafTV7Ya9MwsmN/dkLudP4wsrbXm
	8BKS6o+6jhsjgPnhs/GA4tKzMOfMpLDQRvMyijLG/6Osqu8kOzba1OVvwPZISA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791304712;
	b=Y3DTgzsIbfK7KZIKM8z6q5mrzmBoOlxElvGBvWbtgF15XqSc6B6Y459CjkSd0SOHHZiNEg
	ctJ575jVfEeoH6WLjqr2piMLS5yF++SrisJa0k/KC1ghp0xYPoa3k+2U5JLCc6Usf6uKPW
	vwp6K2u9KZ529uefXu8pgOxvrbPoYod1JAyFfXHuz9OkLPPltRtkrvln/dZU7RppucFeyN
	H/IfPmvqZcgUsKyY5e0sVclJ5Ucu6wdPOXla+0z4mmmZu2fGg+xJA+lXVGBwiFVvkc+4zn
	htO56XNzoLsec2EvVirg931oP5IprFKwv4H7hjorPzzPU/z86ESb0JrUCRbf/g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791304712;
	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=nsMJJxOT5Erdhdo9+Mjp0IBoGKS/hMqmfQ67rBPaNbg=;
	b=o8zdKCo/UR/ngnuO8c8BnPgCtErUwDddMFWcQIbeKlHu1nfqypqKgeCOBX5MkJKl1yyuY2
	dMf8iJaQtVE/uNdQ/Htgqy6eZ0jXwTRm/8fTspDzXqr5AZ+sV+/gyx5t/ZNXL18CheHd/X
	I8Ohuacl6+uuN3zSKvLU06GymCef2atiyOx2pPKQIOsurC0kqQZsL51wBRs9ZFo9d1p4v0
	hwwI44b2m6x7V9EllwVp+bNVf3UuYowKiLoY9FXxbpp9BTd7uetzudefjXtcWHlERbEmoN
	YG0hilDMC1M6H4AWOCAaGSZq7zQMs26ZQIW+G76pyxoN5mPWgn2F3+cDBw3umg==
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 4hzhlX19phzDyg
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:32 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 31840
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 16:38:32 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Dimitry Andric <dim@FreeBSD.org>
Subject: git: 0c409a56237a - stable/15 - Merge commit c4ce37507537 from llvm-project (by ShengYi Hung):
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: dim
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 0c409a56237ae09be7ba491750bbbbdb25ef2e4d
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 16:38:32 +0000
Message-Id: <6ac52408.31840.2e8beebf@gitrepo.freebsd.org>

The branch stable/15 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=0c409a56237ae09be7ba491750bbbbdb25ef2e4d

commit 0c409a56237ae09be7ba491750bbbbdb25ef2e4d
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2026-10-03 11:36:42 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2026-10-06 16:38:03 +0000

    Merge commit c4ce37507537 from llvm-project (by ShengYi Hung):
    
      [Clang][Sema] Create LocalScope for Variable Template (#228280)
    
      A variable template should create its own LocalScope, as it should be
      opaque to other instantiations. This can occur when there are multiple
      instantiations in the same lexical scope. The correct behavior is that
      these instantiations should not be chained together.
    
      Assisted-by: Claude # Test ReleaseNote
      Fixes: #134148
    
    This fixes an assertion while building the devel/glaze port.
    
    PR:             276265
    MFC after:      3 days
    
    (cherry picked from commit fe9c7137871ee0b5c48d4c38b87d80f72e73379e)
---
 contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
index d2b87f2702a9..a9755bcc73fe 100644
--- a/contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -5901,6 +5901,10 @@ VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
   if (Inst.isInvalid())
     return nullptr;
 
+  // A variable template specialization is never a local declaration, so it
+  // must not see the locals of whatever instantiation we are currently in.
+  LocalInstantiationScope Local(*this);
+
   // Instantiate the first declaration of the variable template: for a partial
   // specialization of a static data member template, the first declaration may
   // or may not be the declaration in the class; if it's in the class, we want

From nobody Tue Oct  6 16:38:46 2026
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 4hzhlp5pTjz4n9Vh
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 16:38: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 4hzhlp38BHz4mxQ
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:46 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791304726;
	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=uPp4Y1ZlbwzPV8VGrrNlSkLCJIdDuhvsi+NFLqXCWDo=;
	b=CMSfUK4tBVrS2+GzhyJ0PTq8BodufMBjvTQHVRJKt4IajN1pYiS002NeqIqM5c1GAGAD8m
	y4tCM5Q9UbESOtrTbYUSFSo290FHg5k3EVCXsg7PTqBiIUXrnLzNQkOO9MQOyf/8Wuzlf5
	OxkHS3IwyDKE7bZJQhFnT7SIVlmO9NQVRlqXfhJgjV6Rvttarw+vNpb+30E7wPXezu/Dpm
	tAzcb6itashjUaN/RHOqCZhQTREdx45bCqwFkaFMjVGqK/G9Z+bobLHxIru4BmolBjmFKy
	l2ZkioOmxFY3BwKUrGSSzm9PuNvJmBDLEuUx5FS9khVnFBH9eXjAMBXPU2TBjQ==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791304726;
	b=bXx2OBOBS8UWmbq7ay+ArH5ULcQpG9L73VUtgYCS/gvLsHwvVyQ+TobLKW3qmLHYfcEqUt
	DLSiN6qJMowyG+2IKzWvwIXOwuoJoy9Q7xnspLjOfgqQ3RCAONbKQGmvsGEItd4B0A5uBH
	jUO6WSQ8rbQEIfKwQbLsG/uU9KPfdOlCW+h6CSo+PNkRrTpT2AJa6t68cfxbXhsvWG75r+
	4jKztMp7aTSNwgF3aDN/+x6cvVhqx7vg7GON0OPud2CfwzV+4AgKcLs2UsXF/0tjrxxg2A
	XM6dHPmU+cKBq1hTkwgLa7PTgH/9MHyl/vkNKlRP1Ksyx4CPC4R+0e8RBwIsuQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791304726;
	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=uPp4Y1ZlbwzPV8VGrrNlSkLCJIdDuhvsi+NFLqXCWDo=;
	b=ZJyzU1eBKw5bYKBE996OfJQ+wGYmUj9lvP3+va3rhRaZ5uD3GomlvS0+20Y4HnImKoubYg
	puvhuRxykvdIPw7T2aewcOhiz6waAOg0pzkK1GuQqmLHfUUvEsP3ocLSd7CEbxUY8c2kmI
	GfrkzMcD/JfUUUnb+bOdn24QmOgOxQD+sO/q9v6xc8xoD5mA6pYlp6tpcxiS5FWyiCrtzX
	erzH5UnfV8QPwOq6Up8S/XI5kXz7qkS/ojCk2cZH/UtcLeW1e0Uy68xo2zFsrdcfxQnJTy
	v2/x7C/h3PQ0WmD0uejYO/6o18Ti1Dp2YDMpIE8qw2CYXcOGEyKaXIt0/N370Q==
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 4hzhlp1XhKzDn6
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:46 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 30fae
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 16:38:46 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Dimitry Andric <dim@FreeBSD.org>
Subject: git: 3108ab674752 - stable/14 - Merge commit 80e8c0a59189 from llvm-project (by ShengYi Hung):
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: dim
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: 3108ab6747524117953d0f9fba511ab4d2bcc1e2
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 16:38:46 +0000
Message-Id: <6ac52416.30fae.43292c92@gitrepo.freebsd.org>

The branch stable/14 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=3108ab6747524117953d0f9fba511ab4d2bcc1e2

commit 3108ab6747524117953d0f9fba511ab4d2bcc1e2
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2026-10-01 12:31:42 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2026-10-06 16:34:23 +0000

    Merge commit 80e8c0a59189 from llvm-project (by ShengYi Hung):
    
      [DebugInfo] Fill Column 0 if Line is not found (#227559)
    
      It is possible that user specified line 0 as the start of the line in C
      language (using `# 0`). However, it is rejected by the Lexer as we have
      no line but still carries column information. As a result, we fill
      column to 0 if we cannot find line.
    
      Assisted-by: Claude # Test
      Fixes: #56186
    
    This fixes a fatal error when building the textproc/peg port.
    
    PR:             264853
    MFC after:      3 days
    
    (cherry picked from commit 37c9eba1644b0f9e1b5d130ccff381122f48aebe)
---
 contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp b/contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp
index ec28bd259e8e..42e38bfc2872 100644
--- a/contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/contrib/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -4868,9 +4868,12 @@ void CGDebugInfo::CreateLexicalBlock(SourceLocation Loc) {
   llvm::MDNode *Back = nullptr;
   if (!LexicalBlockStack.empty())
     Back = LexicalBlockStack.back().get();
+  // A #line 0 macro carried no line information but still take column
+  // information. This will finally be rejected by the lexer but is legal.
+  unsigned Line = getLineNumber(CurLoc);
+  unsigned Column = Line ? getColumnNumber(CurLoc) : 0;
   LexicalBlockStack.emplace_back(DBuilder.createLexicalBlock(
-      cast<llvm::DIScope>(Back), getOrCreateFile(CurLoc), getLineNumber(CurLoc),
-      getColumnNumber(CurLoc)));
+      cast<llvm::DIScope>(Back), getOrCreateFile(CurLoc), Line, Column));
 }
 
 void CGDebugInfo::AppendAddressSpaceXDeref(

From nobody Tue Oct  6 16:38:47 2026
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 4hzhlr02Swz4n9Vj
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 16:38:48 +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 4hzhlq32T9z4n75
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:47 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791304727;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=YTODjUFq4f6npCEyAV6z3dGxefYz6DGfX4MsoW/LQ5s=;
	b=qOO6wIGN4UYMwr05NnqGrBBwaCTXSp4o+gUa0KbC4JzPD+5EcZ2IEZ12KwfNx+QUEFOBrH
	4g+2CaKw6JCqk/LUkQgb60iiLCUUd6iISBjImy9+Hg5zkw6AONjTllcHRKoHRtbPluxf58
	woSyqxZRf9g3AbngTZ6Sxj9wf5rMivT4t1kf6FEOwt4/iDIbhEVyHGtPv7Rzaq/njQOjCq
	7AoMmzHvJRkppmBPY9Gm3UyW5tmRAYsI72lJX5Tv/cJYEiNje5RRmU+VgUEfIEzxr7av1+
	br2Wr4/tacfeb/fOrDyibgXczFXdzblprCOdYGX/lteIZ9+z+nUh0X9yYtKRzA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791304727;
	b=DN3JjeF68w+xljkUo4iiq4I0FYO8/Xin1iv2VxNBWB9o7CTSOSLilB7uRhiTLR9hJeeRb3
	YHyU8ENv/ZvG8DTRlvP0M6t+5jhRcIBa149l3ApNwWB7SY0vPPPTZODxjXKevOAEY8YStg
	5OYNT54x9yfGISqXEgIJfZIzsYZfN6qtGznvz3kugX7u/RuBFIgaQW2S/XtW++mLyzoAWH
	J+YqSX0p+o2LYTCeb/pjDAA2YRUrRn9ii48KnkbkHT0R/EliULgHLdrtLq31/tborT5mgy
	pabbdeymzXJDa64dZ67q1JIfPo83XKci36y+esSpQZk2xfXLH/8EqayUywZoDg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791304727;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=YTODjUFq4f6npCEyAV6z3dGxefYz6DGfX4MsoW/LQ5s=;
	b=B58JQETeSFh37c2OiyC7ajnbtqg56PnKjr2Yy1SnjRUUTEYRKvgXQvLTU9ACvjXSjd6tsX
	QWAcrDKC4JNXske0XIO1z/hlxbMBTQDX9PQNmIUYas0DfPQeYiEYnJP7QNQvefMLT2P26B
	C3bmU0dysw46kSUiGmcSoB+hoAYRxJQID8BJSdsraJ5sRn6ylHTzb0c4PXk1zMkDERbPqM
	+B3LejhzPeaeKFf878meOQg7u+JvRWY1FwPpduKaXUKLV2wBRe0LR+G4Nhag1xvMbE5D6H
	MON6jHV1stBDUOB2qAzJkrwrwhBX/zcvLgt9/YnNGIjwL0XenFfErUw2zqX17w==
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 4hzhlq1wlWzDn7
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:47 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 311ed
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 16:38:47 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Cc: Xiaoqiang Zhao <zhaoxiaoqiang007@gmail.com>
From: Dimitry Andric <dim@FreeBSD.org>
Subject: git: bceab8be408d - stable/14 - llvm: add LoongArch target support, not enabled by default
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: dim
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: bceab8be408d7d27637d982fecdafa916fef0f7f
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 16:38:47 +0000
Message-Id: <6ac52417.311ed.dacf6d0@gitrepo.freebsd.org>

The branch stable/14 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=bceab8be408d7d27637d982fecdafa916fef0f7f

commit bceab8be408d7d27637d982fecdafa916fef0f7f
Author:     Xiaoqiang Zhao <zhaoxiaoqiang007@gmail.com>
AuthorDate: 2026-09-28 15:14:09 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2026-10-06 16:37:49 +0000

    llvm: add LoongArch target support, not enabled by default
    
    Note there is ongoing work to add LoongArch support to the base system,
    but having target support in llvm is an essential component.
    
    This must be explicitly enabled using WITH_LLVM_TARGET_LOONGARCH.
    
    Reviewed by:    dim
    MFC after:      1 week
    Differential Revision: https://reviews.freebsd.org/D59899
    
    (cherry picked from commit 2f49e40a684a4bffd8e368a6878384ec4f735ea8)
---
 lib/clang/include/llvm/Config/AsmParsers.def      |  3 ++
 lib/clang/include/llvm/Config/AsmPrinters.def     |  3 ++
 lib/clang/include/llvm/Config/Disassemblers.def   |  3 ++
 lib/clang/include/llvm/Config/Targets.def         |  3 ++
 lib/clang/libllvm/Makefile                        | 55 ++++++++++++++++++++---
 lib/clang/llvm.build.mk                           |  6 +++
 share/man/man5/src.conf.5                         |  7 ++-
 share/mk/src.opts.mk                              |  2 +-
 tools/build/options/WITHOUT_LLVM_TARGET_BPF       |  1 +
 tools/build/options/WITHOUT_LLVM_TARGET_LOONGARCH |  1 +
 tools/build/options/WITH_LLVM_TARGET_BPF          |  3 --
 tools/build/options/WITH_LLVM_TARGET_LOONGARCH    |  1 +
 12 files changed, 74 insertions(+), 14 deletions(-)

diff --git a/lib/clang/include/llvm/Config/AsmParsers.def b/lib/clang/include/llvm/Config/AsmParsers.def
index 8cf3ffd6b0d4..a10e12bb10c7 100644
--- a/lib/clang/include/llvm/Config/AsmParsers.def
+++ b/lib/clang/include/llvm/Config/AsmParsers.def
@@ -33,6 +33,9 @@ LLVM_ASM_PARSER(ARM)
 #ifdef LLVM_TARGET_ENABLE_BPF
 LLVM_ASM_PARSER(BPF)
 #endif
+#ifdef LLVM_TARGET_ENABLE_LOONGARCH
+LLVM_ASM_PARSER(LoongArch)
+#endif
 #ifdef LLVM_TARGET_ENABLE_POWERPC
 LLVM_ASM_PARSER(PowerPC)
 #endif
diff --git a/lib/clang/include/llvm/Config/AsmPrinters.def b/lib/clang/include/llvm/Config/AsmPrinters.def
index b88e60ada874..2f45fe174db7 100644
--- a/lib/clang/include/llvm/Config/AsmPrinters.def
+++ b/lib/clang/include/llvm/Config/AsmPrinters.def
@@ -33,6 +33,9 @@ LLVM_ASM_PRINTER(ARM)
 #ifdef LLVM_TARGET_ENABLE_BPF
 LLVM_ASM_PRINTER(BPF)
 #endif
+#ifdef LLVM_TARGET_ENABLE_LOONGARCH
+LLVM_ASM_PRINTER(LoongArch)
+#endif
 #ifdef LLVM_TARGET_ENABLE_POWERPC
 LLVM_ASM_PRINTER(PowerPC)
 #endif
diff --git a/lib/clang/include/llvm/Config/Disassemblers.def b/lib/clang/include/llvm/Config/Disassemblers.def
index 72c0dcab0ab3..2530e01e635f 100644
--- a/lib/clang/include/llvm/Config/Disassemblers.def
+++ b/lib/clang/include/llvm/Config/Disassemblers.def
@@ -33,6 +33,9 @@ LLVM_DISASSEMBLER(ARM)
 #ifdef LLVM_TARGET_ENABLE_BPF
 LLVM_DISASSEMBLER(BPF)
 #endif
+#ifdef LLVM_TARGET_ENABLE_LOONGARCH
+LLVM_DISASSEMBLER(LoongArch)
+#endif
 #ifdef LLVM_TARGET_ENABLE_POWERPC
 LLVM_DISASSEMBLER(PowerPC)
 #endif
diff --git a/lib/clang/include/llvm/Config/Targets.def b/lib/clang/include/llvm/Config/Targets.def
index 725efe253ced..70ef796f5d0a 100644
--- a/lib/clang/include/llvm/Config/Targets.def
+++ b/lib/clang/include/llvm/Config/Targets.def
@@ -32,6 +32,9 @@ LLVM_TARGET(ARM)
 #ifdef LLVM_TARGET_ENABLE_BPF
 LLVM_TARGET(BPF)
 #endif
+#ifdef LLVM_TARGET_ENABLE_LOONGARCH
+LLVM_TARGET(LoongArch)
+#endif
 #ifdef LLVM_TARGET_ENABLE_POWERPC
 LLVM_TARGET(PowerPC)
 #endif
diff --git a/lib/clang/libllvm/Makefile b/lib/clang/libllvm/Makefile
index e7c146d9c0bf..3553aa44d2b2 100644
--- a/lib/clang/libllvm/Makefile
+++ b/lib/clang/libllvm/Makefile
@@ -23,14 +23,15 @@ CFLAGS+=	-I${.OBJDIR}
 CFLAGS+=	-I${SRCTOP}/sys/contrib/zstd/lib
 
 .if ${MK_LLVM_TARGET_AARCH64} == "no" && ${MK_LLVM_TARGET_ARM} == "no" && \
-    ${MK_LLVM_TARGET_BPF} == "no" && ${MK_LLVM_TARGET_POWERPC} == "no" && \
-    ${MK_LLVM_TARGET_RISCV} == "no" && ${MK_LLVM_TARGET_X86} == "no"
+    ${MK_LLVM_TARGET_BPF} == "no" && ${MK_LLVM_TARGET_LOONGARCH} == "no" && \
+    ${MK_LLVM_TARGET_POWERPC} == "no" && ${MK_LLVM_TARGET_RISCV} == "no" && \
+    ${MK_LLVM_TARGET_X86} == "no"
 .error Please enable at least one of: MK_LLVM_TARGET_AARCH64,\
- MK_LLVM_TARGET_ARM, MK_LLVM_TARGET_BPF, MK_LLVM_TARGET_POWERPC,\
- MK_LLVM_TARGET_RISCV, or MK_LLVM_TARGET_X86
+ MK_LLVM_TARGET_ARM, MK_LLVM_TARGET_BPF, MK_LLVM_TARGET_LOONGARCH, \
+ MK_LLVM_TARGET_POWERPC, MK_LLVM_TARGET_RISCV, or MK_LLVM_TARGET_X86
 .endif
 
-.for arch in AArch64 ARM BPF PowerPC RISCV X86
+.for arch in AArch64 ARM BPF LoongArch PowerPC RISCV X86
 . if ${MK_LLVM_TARGET_${arch:tu}} != "no"
 CFLAGS+=	-I${LLVM_SRCS}/lib/Target/${arch}
 . endif
@@ -1754,6 +1755,36 @@ SRCS_MIN+=	Target/X86/X86VZeroUpper.cpp
 SRCS_MIN+=	Target/X86/X86WinEHState.cpp
 SRCS_MIN+=	Target/X86/X86WinEHUnwindV2.cpp
 .endif # MK_LLVM_TARGET_X86
+.if ${MK_LLVM_TARGET_LOONGARCH} != "no"
+SRCS_MIN+=	Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
+SRCS_MIN+=	Target/LoongArch/Disassembler/LoongArchDisassembler.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchAsmPrinter.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchDeadRegisterDefinitions.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchExpandAtomicPseudoInsts.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchExpandPseudoInsts.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchFrameLowering.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchISelDAGToDAG.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchISelLowering.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchInstrInfo.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchMCInstLower.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchMergeBaseOffset.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchOptWInstrs.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchRegisterInfo.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchSubtarget.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchTargetMachine.cpp
+SRCS_MIN+=	Target/LoongArch/LoongArchTargetTransformInfo.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchBaseInfo.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchELFStreamer.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchInstPrinter.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchMCAsmInfo.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchMCTargetDesc.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchMatInt.cpp
+SRCS_MIN+=	Target/LoongArch/MCTargetDesc/LoongArchTargetStreamer.cpp
+SRCS_MIN+=	Target/LoongArch/TargetInfo/LoongArchTargetInfo.cpp
+.endif # MK_LLVM_TARGET_LOONGARCH
 SRCS_MIN+=	TargetParser/AArch64TargetParser.cpp
 SRCS_MIN+=	TargetParser/ARMTargetParser.cpp
 SRCS_MIN+=	TargetParser/ARMTargetParserCommon.cpp
@@ -2268,7 +2299,8 @@ beforebuild:
 
 # Note: some rules are superfluous, not every combination is valid.
 .for arch in \
-	AArch64/AArch64 ARM/ARM BPF/BPF PowerPC/PPC RISCV/RISCV X86/X86
+	AArch64/AArch64 ARM/ARM BPF/BPF LoongArch/LoongArch PowerPC/PPC \
+	RISCV/RISCV X86/X86
 . for hdr in \
 	AsmMatcher/-gen-asm-matcher \
 	AsmWriter/-gen-asm-writer \
@@ -2415,6 +2447,17 @@ TGHDRS+=	X86GenRegisterBank.inc
 TGHDRS+=	X86GenRegisterInfo.inc
 TGHDRS+=	X86GenSubtargetInfo.inc
 .endif # MK_LLVM_TARGET_X86
+.if ${MK_LLVM_TARGET_LOONGARCH} != "no"
+TGHDRS+=	LoongArchGenAsmMatcher.inc
+TGHDRS+=	LoongArchGenAsmWriter.inc
+TGHDRS+=	LoongArchGenDAGISel.inc
+TGHDRS+=	LoongArchGenDisassemblerTables.inc
+TGHDRS+=	LoongArchGenInstrInfo.inc
+TGHDRS+=	LoongArchGenMCCodeEmitter.inc
+TGHDRS+=	LoongArchGenMCPseudoLowering.inc
+TGHDRS+=	LoongArchGenRegisterInfo.inc
+TGHDRS+=	LoongArchGenSubtargetInfo.inc
+.endif # MK_LLVM_TARGET_LOONGARCH
 
 DEPENDFILES+=	${TGHDRS:C/$/.d/}
 DPSRCS+=	${TGHDRS}
diff --git a/lib/clang/llvm.build.mk b/lib/clang/llvm.build.mk
index e8139908935e..e06f9a2c29f6 100644
--- a/lib/clang/llvm.build.mk
+++ b/lib/clang/llvm.build.mk
@@ -83,6 +83,12 @@ CFLAGS+=	-DLLVM_TARGET_ENABLE_RISCV
 LLVM_NATIVE_ARCH=	RISCV
 . endif
 .endif
+.if ${MK_LLVM_TARGET_LOONGARCH} != "no"
+CFLAGS+=	-DLLVM_TARGET_ENABLE_LOONGARCH
+. if ${MACHINE_CPUARCH} == "loongarch"
+LLVM_NATIVE_ARCH=	LoongArch
+. endif
+.endif
 .if ${MK_LLVM_TARGET_X86} != "no"
 CFLAGS+=	-DLLVM_TARGET_ENABLE_X86
 . if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5
index 91dc67bd5b89..387278020a8b 100644
--- a/share/man/man5/src.conf.5
+++ b/share/man/man5/src.conf.5
@@ -1,5 +1,5 @@
 .\" DO NOT EDIT-- this file is @generated by tools/build/options/makeman.
-.Dd October 1, 2026
+.Dd October 6, 2026
 .Dt SRC.CONF 5
 .Os
 .Sh NAME
@@ -1021,9 +1021,8 @@ The
 option should be used rather than this in most cases.
 .It Va WITH_LLVM_TARGET_BPF
 Build LLVM target support for BPF.
-The
-.Va LLVM_TARGET_ALL
-option should be used rather than this in most cases.
+.It Va WITH_LLVM_TARGET_LOONGARCH
+Build LLVM target support for LoongArch.
 .It Va WITHOUT_LLVM_TARGET_POWERPC
 Do not build LLVM target support for PowerPC.
 The
diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk
index 3afd2df4dbff..30ff25ecb1e6 100644
--- a/share/mk/src.opts.mk
+++ b/share/mk/src.opts.mk
@@ -288,7 +288,7 @@ __DEFAULT_DEPENDENT_OPTIONS+=	LLVM_TARGET_${__llt:${__LLVM_TARGET_FILT}:tu}/LLVM
 .endif
 .endfor
 
-__DEFAULT_NO_OPTIONS+=LLVM_TARGET_BPF
+__DEFAULT_NO_OPTIONS+=LLVM_TARGET_BPF LLVM_TARGET_LOONGARCH
 
 .include <bsd.compiler.mk>
 
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_BPF b/tools/build/options/WITHOUT_LLVM_TARGET_BPF
new file mode 100644
index 000000000000..392e930d8008
--- /dev/null
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_BPF
@@ -0,0 +1 @@
+Do not build LLVM target support for BPF.
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_LOONGARCH b/tools/build/options/WITHOUT_LLVM_TARGET_LOONGARCH
new file mode 100644
index 000000000000..e6d5d8be834f
--- /dev/null
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_LOONGARCH
@@ -0,0 +1 @@
+Do not build LLVM target support for LoongArch.
diff --git a/tools/build/options/WITH_LLVM_TARGET_BPF b/tools/build/options/WITH_LLVM_TARGET_BPF
index 664cc85a52b9..45811be6174d 100644
--- a/tools/build/options/WITH_LLVM_TARGET_BPF
+++ b/tools/build/options/WITH_LLVM_TARGET_BPF
@@ -1,4 +1 @@
 Build LLVM target support for BPF.
-The
-.Va LLVM_TARGET_ALL
-option should be used rather than this in most cases.
diff --git a/tools/build/options/WITH_LLVM_TARGET_LOONGARCH b/tools/build/options/WITH_LLVM_TARGET_LOONGARCH
new file mode 100644
index 000000000000..157b18a9df9a
--- /dev/null
+++ b/tools/build/options/WITH_LLVM_TARGET_LOONGARCH
@@ -0,0 +1 @@
+Build LLVM target support for LoongArch.

From nobody Tue Oct  6 16:38:48 2026
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 4hzhlr6nxGz4n9SG
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 16:38:48 +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 4hzhlr3ssZz4n39
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:48 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791304728;
	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=x5ydXWz+tEyuxkrswT57mVnkgKh+ee/bDoUupNjUSgk=;
	b=yDlQpc2Mm8DCkUWLMquffWy1zHB9QwKbQ1VtDsgTgwlIK9L7eBtwNUR7UtbRDpjzo+H/k8
	mtyBES238yRKWlry8bK0oTVQgJr4eozpyUcOfwedZWD/CO2iAEre0Gt05ri9M9Zcr2z7fJ
	EZGi674CqX/MO9IKsJWCNayapIs0GCLA6B74wyWE8OqIXzuqMJYiJHw8GUI0oGYrIfofl4
	2/cmC0pprUR6rulEQA3iqK9D8DwHC7/A80oga6xaQGs5fJY7nca9FGHJR8Uvd9ZHYn32so
	jqTnPLdk/b5wFuGGR08bVJh1gTrnQlTp/7UVwEUY/V9ib5UP/r0PZWzPRekguA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791304728;
	b=L6ze/wIkVq8WejMYMiIIvVEFo9sCoQ9zNc53g7FAnymBJL//lr8R0vvBdwFFuVQEFAG9cG
	X6iGdaBjae9wvQk66A8CwmROoAJSkNZFWmS9g7YXyj3yN1Z9047faW2QoZSimcF6eClmhT
	YQS7QitUQqKDEmRLE+aBFTJFuLQpBKeaYL0i8FLv5ouVtLdS05XuMf5OJjfca2xYtV5ktE
	GpzlgT1c+mtEtPnfc7CXJ3B1AFUcuvS5kAM46aYN5ddjLnI87cSCdqXrM8tFEPxlViWJ3m
	jfrOS4MZH5D+Pd9Ji5z4ey44dsMBY2r80M+eTFankggV4Fgyfta0SrJClYNbWw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791304728;
	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=x5ydXWz+tEyuxkrswT57mVnkgKh+ee/bDoUupNjUSgk=;
	b=LrsCs+8/mSGNjHVawvmo7h4XOxHAkYOjyHRB3qcWAlVYGKHS7MkKPTilr6AJJTFj3xi3Mz
	vA7qfLLbPBgOqaDXHeg1HPGVrEWzgMpM+9c4ByOk6SRO4frMIMiKp5mbJOJ9AbwkA4ef1/
	aQ9T6d4BKvZ4YZb+312KDieT/rEbvVslvE7cU4btIqBB7Gm2DJMgmI+e9Af589TjkQcceY
	GUaCDGs+DF1MD1LC07JwRDQ3lf1ci+3+JLHMaYk0Roq4YasQRbFajbmIbErtC9lDA0ZZVf
	e6gxLlcy0eGKjyI1QxUS/h4FW1awdeZN6tMXZ11hMLHgtFsOj6Uu85zUuZA9+Q==
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 4hzhlr2pP8z1C9X
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:38:48 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 274d9
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 16:38:48 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Dimitry Andric <dim@FreeBSD.org>
Subject: git: fb099c133cae - stable/14 - Merge commit c4ce37507537 from llvm-project (by ShengYi Hung):
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: dim
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: fb099c133cae7bf6c7b9625a3d81d6a3e4bb5cbe
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 16:38:48 +0000
Message-Id: <6ac52418.274d9.381aff11@gitrepo.freebsd.org>

The branch stable/14 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=fb099c133cae7bf6c7b9625a3d81d6a3e4bb5cbe

commit fb099c133cae7bf6c7b9625a3d81d6a3e4bb5cbe
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2026-10-03 11:36:42 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2026-10-06 16:37:58 +0000

    Merge commit c4ce37507537 from llvm-project (by ShengYi Hung):
    
      [Clang][Sema] Create LocalScope for Variable Template (#228280)
    
      A variable template should create its own LocalScope, as it should be
      opaque to other instantiations. This can occur when there are multiple
      instantiations in the same lexical scope. The correct behavior is that
      these instantiations should not be chained together.
    
      Assisted-by: Claude # Test ReleaseNote
      Fixes: #134148
    
    This fixes an assertion while building the devel/glaze port.
    
    PR:             276265
    MFC after:      3 days
    
    (cherry picked from commit fe9c7137871ee0b5c48d4c38b87d80f72e73379e)
---
 contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
index d2b87f2702a9..a9755bcc73fe 100644
--- a/contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -5901,6 +5901,10 @@ VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
   if (Inst.isInvalid())
     return nullptr;
 
+  // A variable template specialization is never a local declaration, so it
+  // must not see the locals of whatever instantiation we are currently in.
+  LocalInstantiationScope Local(*this);
+
   // Instantiate the first declaration of the variable template: for a partial
   // specialization of a static data member template, the first declaration may
   // or may not be the declaration in the class; if it's in the class, we want

From nobody Tue Oct  6 16:40:03 2026
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 4hzhnH6TmQz4n9s7
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 16:40:03 +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 4hzhnH5scPz4ppd
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:40:03 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791304803;
	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=3tEoxgkXI44Z3MQWJ6aHBj+qNRh+XjnNXzx9EY5cu0Q=;
	b=DihJ2BzCLXyhvaZ8g6RvWdiS7RHEZkmAbLLAQ5Onrum1oeXeWOuIZ0h+ULwnQZ8Zxh5DRZ
	tP5hQmrDqKqrZTyTeSzAoFrUZyal30f89RLxr75UldwN6O5ia7bNVKg5McCjSmz7WBapGA
	xeiHa+O9MArUlvutwZNhysiMNNQUSRLi8+VrKnLF0V8Cyp/gmRvvN9k+9JTGdjuYRSJbTM
	aL/X9i3btb2OGvAUOTSzS/YyiwDuu/ChgCrCaBgEeL39HFltYG7gaDHK+pAZgG8VTiN1Gr
	Ec8xvNLk6NI3rQzPlBnRC1p7OejzUkwXdBXmOLeHSyw2Yc4dVLGuxYwieI7uOA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791304803;
	b=ce1JE/eci7Vf81FNNbVk0nAFGzzKFXdP6bAkdl69Y7WGYAfj6aLYziA6T8FVplezUVo/ah
	2Ac51v7iV5j61t3eZ4OWMI7KhjFn7mEkjOEzOKWzFcwkEsaw/azy5DaurIF312/1OSKWxT
	AyST14Yqh+gDWUuT2l2Zpk3becQnh24dkMFTM9XdxHBVMDr662Ub2GQ3OnUgiNY9yqVqMY
	S9ePc1j7iQrDtQmotdgPMdlSgk/7vH4Uob7wJJHdswVK3FeLk9iZ2Ug4DO71rYkAZK/p9e
	tgJfdLGI7lTMYZ0cn/49oPkMuOiDqd0CGTY9YZ00sNJ3Vs0gB5pF+2qwJQKdzQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791304803;
	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=3tEoxgkXI44Z3MQWJ6aHBj+qNRh+XjnNXzx9EY5cu0Q=;
	b=MPqZDHNdeeREICEMwt3QE4WZr6lRG8xNSFRpOTxTv3lgAu+tzgFjSiPwynkLNtFNuD8WQV
	gNYru6OPj7e5WEVTwiZN3dammFMc5MdiKTmv+po1U3b8oANYse+2FTWTaR8tetrF2PgkNp
	q6wYh7CVLp1Kynf2fbv9VBwBDS6t+ToT1IM2s5RIjGh8s/dSxZE942BxvquO9yd4zuVPlr
	tIz+6j6GXuAJJL9SwX0qWdW/Ibk17njvlG6pzxtn8/WIBQYjvIBxyC5UIUkeaZ9+rWGnrz
	ywQYvVWs/LUI5F2VqRiU3/f2hoZVJpEUyM8XIoZKHTRhzy2pZvkBZRAtLfGsJA==
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 4hzhnH4qMGzF2B
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 16:40:03 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 30c2f
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 16:40:03 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Roman Bogorodskiy <novel@FreeBSD.org>
Subject: git: b3b90afc9db7 - stable/14 - bhyveload: validate character disk devices
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: novel
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: b3b90afc9db7e2d2ed8a1c58a1063b5d4901e01d
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 16:40:03 +0000
Message-Id: <6ac52463.30c2f.4ea78871@gitrepo.freebsd.org>

The branch stable/14 has been updated by novel:

URL: https://cgit.FreeBSD.org/src/commit/?id=b3b90afc9db7e2d2ed8a1c58a1063b5d4901e01d

commit b3b90afc9db7e2d2ed8a1c58a1063b5d4901e01d
Author:     Roman Bogorodskiy <novel@FreeBSD.org>
AuthorDate: 2026-08-28 17:51:31 +0000
Commit:     Roman Bogorodskiy <novel@FreeBSD.org>
CommitDate: 2026-10-06 16:39:39 +0000

    bhyveload: validate character disk devices
    
    Currently, bhyveload(8) does not validate the supplied disk
    image path. For example, it allows passing the /dev/null
    device, which later fails in userboot because it does not
    support DIOCGSECTORSIZE and DIOCGMEDIASIZE ioctls (see
    userdisk_init() in stand/userboot/userboot/userboot_disk.c).
    
    Fix that by checking DIOCGSECTORSIZE and DIOCGMEDIASIZE ioctls early.
    A similar check already exists in bhyve(8). While here, make
    cb_diskioctl() report the obtained sector size instead of
    hard-coding 512.
    
    Reviewed by:    markj
    MFC after:      2 weeks
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D59253
    
    (cherry picked from commit 51234535ddd6ec0afe9dd4e3f34a31b92d5cdd78)
---
 usr.sbin/bhyveload/bhyveload.c | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/usr.sbin/bhyveload/bhyveload.c b/usr.sbin/bhyveload/bhyveload.c
index 3ee5f7ac7129..3f29d642461d 100644
--- a/usr.sbin/bhyveload/bhyveload.c
+++ b/usr.sbin/bhyveload/bhyveload.c
@@ -364,7 +364,14 @@ cb_diskioctl(void *arg __unused, int unit, u_long cmd, void *data)
 
 	switch (cmd) {
 	case DIOCGSECTORSIZE:
-		*(u_int *)data = 512;
+		if (fstat(disk_fd[unit], &sb) != 0)
+			return (ENOTTY);
+		if (S_ISCHR(sb.st_mode)) {
+			if (ioctl(disk_fd[unit], DIOCGSECTORSIZE, data) != 0)
+				return (ENOTTY);
+		} else {
+			*(u_int *)data = 512;
+		}
 		break;
 	case DIOCGMEDIASIZE:
 		if (fstat(disk_fd[unit], &sb) != 0)
@@ -718,7 +725,9 @@ altcons_open(char *path)
 static int
 disk_open(char *path)
 {
-	int fd;
+	struct stat sbuf;
+	off_t size;
+	int fd, ret, sectsz;
 
 	if (ndisks >= NDISKS)
 		return (ERANGE);
@@ -726,11 +735,30 @@ disk_open(char *path)
 	fd = open(path, O_RDWR);
 	if (fd < 0)
 		return (errno);
+	if (fstat(fd, &sbuf) < 0) {
+		ret = errno;
+		goto err;
+	}
+
+	size = sbuf.st_size;
+	sectsz = DEV_BSIZE;
+	if (S_ISCHR(sbuf.st_mode)) {
+		if (ioctl(fd, DIOCGMEDIASIZE, &size) < 0 ||
+		    ioctl(fd, DIOCGSECTORSIZE, &sectsz) < 0) {
+			ret = errno;
+			goto err;
+		}
+		assert(size != 0);
+		assert(sectsz != 0);
+	}
 
 	disk_fd[ndisks] = fd;
 	ndisks++;
 
 	return (0);
+err:
+	close(fd);
+	return (ret);
 }
 
 static void
@@ -814,7 +842,7 @@ main(int argc, char** argv)
 		case 'd':
 			error = disk_open(optarg);
 			if (error != 0)
-				errx(EX_USAGE, "Could not open '%s'", optarg);
+				errc(EX_USAGE, error, "Could not open '%s'", optarg);
 			break;
 
 		case 'e':

From nobody Tue Oct  6 17:39:24 2026
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 4hzk5n22QVz4nGX4
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 17:39:25 +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 4hzk5n1b1Nz3HYV
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 17:39:25 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791308365;
	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=SSDnYyf5JhrZeQXatn7nIv0Gjg+DkeQhiDulra2iCTs=;
	b=Qs6XF3itz0VOjkfF1J7Z7rl7Kjn7nqym32/m8Pa16r3sxVs/6CNaUFypQZSAXWZUTKvbmg
	68h4P87dNGiL4IKFe/OEfJthMsXVWaXkl6qVtNNj9dgbvVJqAbeWFEX13vsUF9tseJJumn
	TV9Gwj4eUYESD7PEBWHxkYDWlAWKCprxmnN59c1o/2jc0uKn/pLS/V77K0DVIjD8KMp4DM
	LKVonl1KSa4RCWRbOQTKEJfJ0ZVm+JoKOvkGD7EV8MIcFr5QGuLI25UlO9RaMbJ8REIj2L
	LZxv7wMnDD054ViDN3MXm9hRfcbzR6WrDPYsaYPsyw4bv3PaLfVzVVcLsTAbrw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791308365;
	b=nXz/0wG2F9aBNNpWudDjegc4TZROytXEU62zXV2wXWGhN3Mdbavx+ZpeMTL0LclqT0PiMd
	OSf/nrn1JtR31nJAYB1Tnmsn5t9JwcgiTvY1/wVeSV2FPTufzDyof80CZMFepIiN2bJBSD
	xeEfu1dse197zE2JTwCrHwKEgpprGWx6WKn3cZ+lOFu4y/vIKLfvhrIEvw5f7ozkwRF5lx
	KU/aTrlJ5gU8uw9/8zornt9QXNyaazsEyPG80FgxZwrTc6DqBv4dx2kEFlc4RKKclUAoNE
	6CAXecnoFzEVVB7kZEbpMK1AWfdkEIHQwiPDfZO5iSC26ouL5ojOOhbLx4+jTA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791308365;
	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=SSDnYyf5JhrZeQXatn7nIv0Gjg+DkeQhiDulra2iCTs=;
	b=W1U3CQwMPrPRN5Cc/T9bLBphWnEiJJtJOAmDUf9RXP+qy0wil88fNUioRGmcA10SJ+0m6d
	kS62fGQJPkvlL9t9krgwrgoZYkoqSxGtYpDLh6JcnuAU7IwMiMk+QA7TszlsVxCzEfJQE+
	b9QpiJ0PwehmcFjBpPkKVDyW8H/xNyxQhE2zJjr3up3fPx8cDvnmEtcOnJIAh9eNMLOvXJ
	+XRzJvP3RXum2O4qyQ+nVN9wlxHUzIB1gYhuaPBY19QypSy89N4MtS4khSlRDOQ1Y7efRG
	fsnQNTBAQXRDBF7VRb2uWpKq5kUvze1ef0gzChKixa1nysSbsAclGGmRrFHxYA==
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 4hzk5n0MFbzFnh
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 17:39:25 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 37025
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 17:39:24 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Maxim Konovalov <maxim@FreeBSD.org>
Subject: git: 2da109690be8 - stable/15 - dummynet: do not overflow the points[ED_MAX_SAMPLES_NO] array
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: maxim
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 2da109690be8f29f03b68150c827f47db81ad8b5
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 17:39:24 +0000
Message-Id: <6ac5324c.37025.72601dd1@gitrepo.freebsd.org>

The branch stable/15 has been updated by maxim:

URL: https://cgit.FreeBSD.org/src/commit/?id=2da109690be8f29f03b68150c827f47db81ad8b5

commit 2da109690be8f29f03b68150c827f47db81ad8b5
Author:     Maxim Konovalov <maxim@FreeBSD.org>
AuthorDate: 2026-09-21 23:32:09 +0000
Commit:     Maxim Konovalov <maxim@FreeBSD.org>
CommitDate: 2026-10-06 17:36:21 +0000

    dummynet: do not overflow the points[ED_MAX_SAMPLES_NO] array
    
    Otherwise, the following would segfault
    
    dnctl pipe 1 config bw 1Mbit/s profile 1025points.txt
    
    Found with:     Claude Code Sonnet 5
    MFC after:      2 weeks
    
    (cherry picked from commit 04fcf30961266cd77139b40774cb0d6ef6eb2be5)
---
 sbin/ipfw/dummynet.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sbin/ipfw/dummynet.c b/sbin/ipfw/dummynet.c
index a0cefcffd183..3cf9a1854365 100644
--- a/sbin/ipfw/dummynet.c
+++ b/sbin/ipfw/dummynet.c
@@ -959,6 +959,9 @@ load_extra_delays(const char *filename, struct dn_profile *p,
 		} else if (do_points) {
 		    if (!is_valid_number(name) || !is_valid_number(arg))
 			errx(ED_EFMT("invalid point found"));
+		    if (points_no >= ED_MAX_SAMPLES_NO)
+			errx(ED_EFMT("too many samples, maximum is %d"),
+			    ED_MAX_SAMPLES_NO);
 		    if (delay_first) {
 			points[points_no].delay = atof(name);
 			points[points_no].prob = atof(arg);

From nobody Tue Oct  6 17:39:26 2026
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 4hzk5p2jM0z4nGcT
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 17:39:26 +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 4hzk5p1gzvz3HDr
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 17:39:26 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791308366;
	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=dd8flugTb1ZwA1vpySlcLXvXUa1laEAbZ6PEGu8SyG0=;
	b=vRjg9GvRHVaI+Kdlg9m47xR3KqUhW7hV/D8kuSWCmVvZjscQdrP2JBp6g6Lng9DbQXZdya
	NZoSjmIk4bPbN8G64q4y8dP8ESEzRzMwOsVzinYzZeJLKmLr7gMi+28ZZ2adrIlckhpS4S
	JU22kS/wJVCYw++wxJ0FxiQpgCCBlACDWPKJzv7Lcj4X5+A18P/2FLbjkD2ht2cF/uPDkQ
	qckx3LkOrVrmnLhRF2BpekDZd7e3YNxbuV/c4z8/hnIIqyJIaFW40ulxAFkicMumhmuars
	D8vwXvRn6sZH6z+bQpjLlxV4BYT359fORkCxUjLQwZlvsX9x16Wr/DFYnb7Nzw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791308366;
	b=ZpVwNssfvfFPhKuiCHAGmk52Nty7l26E3ldWHxwgpRHOyYswcL+wFac6ktYDNpESLnWD+w
	Q2/1pr9VSPNgmZW/XzgTZqfPxVm7SIT7HgZ3MshA72JPNPDwC28LU+SfgCRBeU0N+P2f2w
	gKQLiE18ru9MdyAAaONykWPY1ccPbUtnF1AuC2IQK38qI/uQg9UByO4+R2fc2E9dvnWgWf
	gd933XpmQ8EU5RqfBwRPdNMYzYlZdsnlFmsPBVXsZH0w8vFtRDqvnp87NOvg7+E/rMS5lO
	OQNJceXxBMbyKuqx/UwzkM/EjCH9opKagMyfWF6iF7kQbbwlmCLHMhDN5b56ww==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791308366;
	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=dd8flugTb1ZwA1vpySlcLXvXUa1laEAbZ6PEGu8SyG0=;
	b=EMY+SWTagHny2C89h4l7vQp75YJu7bjcgdl0n24enBno6U2ETbPCDWDRQlYiM5XRJzBvL9
	uNqOMhrQ3LDNnXRvaYEf8aYW5JhXLWUPIqQL3ixVQUepYCUXM3kh6p1kB15sr+qahAHFFw
	x4hceUhaQAfQ79tv01Mt7HEUxlzQcmwPofJPhiPi4MHxy2xH4IJw7gNXa/ljbaTMG3EAWC
	mmbHIwz3n1tatLzcGD/jtEYSjco/0M0L5iBvK4WHQeXUn2zA/kua+gFYt7MLW8r4YqIJCN
	w30aQJXr+aAmaJ8K5u6cl6zVIoL6NH6gLp7RBEW+5BN3H4Bgx3OwoMG+poe3Jg==
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 4hzk5p0bDQzG5C
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 17:39:26 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 38305
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 17:39:26 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Maxim Konovalov <maxim@FreeBSD.org>
Subject: git: 0154a0df90c7 - stable/15 - bsnmpget: initialise the suboption value in getsubopt1()
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: maxim
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 0154a0df90c736d0c6d246b31f92c7becf71a86a
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 17:39:26 +0000
Message-Id: <6ac5324e.38305.6fad3807@gitrepo.freebsd.org>

The branch stable/15 has been updated by maxim:

URL: https://cgit.FreeBSD.org/src/commit/?id=0154a0df90c736d0c6d246b31f92c7becf71a86a

commit 0154a0df90c736d0c6d246b31f92c7becf71a86a
Author:     Maxim Konovalov <maxim@FreeBSD.org>
AuthorDate: 2026-09-22 22:49:33 +0000
Commit:     Maxim Konovalov <maxim@FreeBSD.org>
CommitDate: 2026-10-06 17:36:47 +0000

    bsnmpget: initialise the suboption value in getsubopt1()
    
    Otherwise, "bsnmpget -o verbose -I cut" crashes.
    
    Reported by:    clang static analyzer
    MFC after:      2 weeks
    
    (cherry picked from commit 5d169b5365b1f5cdf8586efa9421feaa4bfe40af)
---
 usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c b/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c
index d8fbb55290a8..4d1058629496 100644
--- a/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c
+++ b/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c
@@ -316,6 +316,7 @@ getsubopt1(char **arg, const char *const *options, char **valp, char **optp)
 	char *ptr;
 
 	*optp = NULL;
+	*valp = NULL;
 
 	/* Skip leading junk. */
 	for (ptr = *arg; *ptr != '\0'; ptr++)

From nobody Tue Oct  6 17:39:27 2026
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 4hzk5q3s7Zz4nGkj
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 17:39:27 +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 4hzk5q2PM1z3Hgc
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 17:39:27 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791308367;
	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=RKnaWUqairifMt+wH/Mp5bk+pijrngpbVMXXwzZl3As=;
	b=NJ/hJ1o7ZMBVnR3KI+HKiaK3VOYRHB33IX5zjf+jI4azjt/27KilnUTfPj0Z3REa2PE/UH
	Z77XujsqzEOkEEPiS1DkARRnqbLlcAzcSrf8XNNHe466igjRnluX5sErlj66gfKtINHFY4
	EVGJQmBgD7DV+PX2xyFq1ibc3EpW7z9+t/uS/X+RzxfrEvAX7qG00bjKeaW+mb1grnSxEH
	lqud/2B88j0j66Te1Q9h8wKBpHV6NyebPGkhhMYjDJrTuydnjR04p+GEER5DjtJsurolJF
	WBbCEgBd96e0OtKtIQm/R+Xx+NgtblL+2G4lv7WUArlRjSxvWY10C8x9poqk+Q==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791308367;
	b=wN5R6qjOfak4JnlvzSukc/u0cgaPoh8kD0EYTg3ToSu3BN6IQW1TeIM6lYmYQjfh9dBf/m
	+rGEx2w0kfaV9VcqxUObJbOcbey6wmIGAh1owQuW4zuxSb2neGp7mjoiPzLapP+4ZuNAcK
	99F9N6YbXHHAuh0qpoLVWLp9lM0/M3Tgp5Lu8nbNcHLJ326NTVlqdWqYAAuASy1gP259HW
	KFZCGEqGcGWXQjBlfueuG7ah5MjL3huF2oV29/TyjOFW5KWvL6el2OWTEKfNwfQRvdP334
	1ogiLcEf6p9Z4siHPsN636JizM0ogaQbwwE59tOfC6JpWXoReZ4GQVH7KfyuOw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791308367;
	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=RKnaWUqairifMt+wH/Mp5bk+pijrngpbVMXXwzZl3As=;
	b=kmNG9ggJiq+dwgDKG0CeSRmMahO0Vds/YR9C9bo2KUsh4O65Mp9I5b9yRtHsN2MGLm/qhW
	hgrVGFRPNuPWBZ2W3WuyV73Ef5V/uR9MaZ3JoS8G1oC6zYXWTpjjf2I+FDDRdtGWV0fVsi
	JnKsFlI9SgjwlQZ2/W49IA7vwEBLPIMD7h0eURmzMfmqpErHZkyf++9m+A6XVCFO8NVUdm
	Mge2Qrcla+qaziBotftylDaFEVkIR7x7yJiHkB8tR/7FPHD93YLrP2RaBdCi640kefzvbT
	/SsZTxxRnZat4gjYJicrIt4clHc12yffaknetSHZeFT7raxSGkDxNbFql6DYhg==
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 4hzk5q1MZ4zG5G
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 17:39:27 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 38176
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 17:39:27 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Maxim Konovalov <maxim@FreeBSD.org>
Subject: git: de5689d1e6ea - stable/15 - bsnmp: validate the lower bound of error_index in responses
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: maxim
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: de5689d1e6ea621249e1ef44db3c2d3ee8431ba5
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 17:39:27 +0000
Message-Id: <6ac5324f.38176.36b47706@gitrepo.freebsd.org>

The branch stable/15 has been updated by maxim:

URL: https://cgit.FreeBSD.org/src/commit/?id=de5689d1e6ea621249e1ef44db3c2d3ee8431ba5

commit de5689d1e6ea621249e1ef44db3c2d3ee8431ba5
Author:     Maxim Konovalov <maxim@FreeBSD.org>
AuthorDate: 2026-09-22 21:32:43 +0000
Commit:     Maxim Konovalov <maxim@FreeBSD.org>
CommitDate: 2026-10-06 17:37:11 +0000

    bsnmp: validate the lower bound of error_index in responses
    
    Check if the response's error_index is within a sane interval.
    Otherwise, a rogue peer could crash us.
    
    PR:             298222
    Reported by:    Robert Morris
    Reviewed by:    markj
    Discussed with: secteam (markj)
    MFC after:      2 weeks
    Analyzed with:  Claude Code Opus 5
    
    (cherry picked from commit 296e3fd54ca8972fa6696974097a2f2705f8dfc4)
---
 usr.sbin/bsnmpd/tools/bsnmptools/bsnmpget.c      | 8 ++++++--
 usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c | 3 ++-
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/usr.sbin/bsnmpd/tools/bsnmptools/bsnmpget.c b/usr.sbin/bsnmpd/tools/bsnmptools/bsnmpget.c
index 9252e63749bb..25129567ee92 100644
--- a/usr.sbin/bsnmpd/tools/bsnmptools/bsnmpget.c
+++ b/usr.sbin/bsnmpd/tools/bsnmptools/bsnmpget.c
@@ -413,7 +413,9 @@ snmptool_get(struct snmp_toolinfo *snmptoolctx)
 		 * Loop through the object list and set object->error to the
 		 * varbinding that caused the error.
 		 */
-		if (snmp_object_seterror(snmptoolctx,
+		if (resp.error_index < 1 ||
+		    resp.error_index > (int32_t)resp.nbindings ||
+		    snmp_object_seterror(snmptoolctx,
 		    &(resp.bindings[resp.error_index - 1]),
 		    resp.error_status) <= 0) {
 			snmp_pdu_free(&resp);
@@ -1107,7 +1109,9 @@ snmptool_set(struct snmp_toolinfo *snmptoolctx)
 			break;
 		}
 
-		if (snmp_object_seterror(snmptoolctx,
+		if (resp.error_index < 1 ||
+		    resp.error_index > (int32_t)resp.nbindings ||
+		    snmp_object_seterror(snmptoolctx,
 		    &(resp.bindings[resp.error_index - 1]),
 		    resp.error_status) <= 0) {
 			snmp_pdu_free(&resp);
diff --git a/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c b/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c
index 4d1058629496..857bb205b9b4 100644
--- a/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c
+++ b/usr.sbin/bsnmpd/tools/libbsnmptools/bsnmptools.c
@@ -1994,7 +1994,8 @@ snmp_output_err_resp(struct snmp_toolinfo *snmptoolctx, struct snmp_pdu *pdu)
 	struct snmp_object *object;
 	char buf[ASN_OIDSTRLEN];
 
-	if (pdu == NULL || (pdu->error_index > (int32_t) pdu->nbindings)) {
+	if (pdu == NULL || pdu->error_index < 1 ||
+	    (pdu->error_index > (int32_t) pdu->nbindings)) {
 		fprintf(stdout, "Invalid error index in PDU\n");
 		return;
 	}

From nobody Tue Oct  6 18:43:33 2026
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 4hzlWn49JPz6Z256
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 18:43:33 +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 4hzlWn3KGfz4Fr2
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 18:43:33 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791312213;
	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=lw4+/AjK0r7GgadHR1XQotzrP0Y1/qscNiucxP3iKVQ=;
	b=jPzNXF5av044ALg2XxuEmD8UPotlyKK/HCVfYqUrQwy4s5xi2TJAEH2+9WLRtgO9kSuHYr
	gwQ2yp33APZBbDluymgyhmfLs3EX8yUrC/DM/YDpNq71bjZj60V/NWTyr+2rKYSZMVHp5h
	dKho3ROcN6dVsJGNClwnso1l3pjmQkc79XAudajBQYVvkhBkyCWIVhQWN9+LPzq+4eAMvM
	HFhpBc/HoPAU8TBqrIwsay8M2beKvtbzDX0bukWMerR0/BnIzBHGad0Q2BgUiX5arJqaYe
	1xnSZuopejMAi1PphoQqBjIFFWMyP1uShwxd2obTpuxFTC2lt6hhs2yctNDj2w==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791312213;
	b=D4uO7wRBMoW9vLwavGtUac9rY/uS9KC1AWdbAktdDJl81kkEOAdXsLbd8i5wfvA6HmZVqm
	szD8Xwjs0JIMXuIMTxKee5/HdOvySdOixPGOFTKjTnMNWY1dUK7FvULGkyP2cxF7138eFJ
	yn2OeE1o9cKzVFoab/778Vgx2GyftN9+dQtDCtxcCYWkd8/FPOBR75dJjEJ7TdTcAT8SmX
	N8MMepp2OIcx9/7vlI7mTraqeG9HwT7cXRYgc64BT8pLVOwOw3l90yCjVW4YX6S+/H1moO
	G4DezApzTcUEcAHGd3nCBGGDSD5xTnLiGmsVMkDiBTkNVyVApv/7680MK93+4w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791312213;
	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=lw4+/AjK0r7GgadHR1XQotzrP0Y1/qscNiucxP3iKVQ=;
	b=ZMiA+hmX20oqtx6P/WtPxA9K2UW84fHq3WKZHvtEa2wOWtP2IzJymK6k6EdUX1qc09q4VG
	icGjZ5RHzYkVCPDzB/RrJYJ7vZXVavB+KV0JUigVPk1pd12SrTiElRIRGyiAd24wF3k0kH
	XXqbhjCu0GTUIdx5wkIIV8ua5NuPnT1GKUgFdO915onRgsIXsvdL8xfbY0niMasD4tU6OI
	0xOGZwU1lAeq08/tHmE8xvob8TQwQur8rc3PQwxMM/Z6DRUAoYk0kcT+Ls1xJrxTcVI/Se
	7/mFHJhe4jOvxng9Cl3r6uIY2xYvVtD+5LSgxBEzqnJPRQ7Es61n7gUteiiFqg==
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 4hzlWn2NYXzJNx
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 18:43:33 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 3e34c
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 18:43:33 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Mitchell Horne <mhorne@FreeBSD.org>
Subject: git: 04aa36c01c68 - stable/15 - pmc.h: bump PMC_VERSION_MINOR
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: mhorne
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 04aa36c01c68c3ba93cdcb62f1f13f05b9b96da7
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 18:43:33 +0000
Message-Id: <6ac54155.3e34c.21307102@gitrepo.freebsd.org>

The branch stable/15 has been updated by mhorne:

URL: https://cgit.FreeBSD.org/src/commit/?id=04aa36c01c68c3ba93cdcb62f1f13f05b9b96da7

commit 04aa36c01c68c3ba93cdcb62f1f13f05b9b96da7
Author:     Mitchell Horne <mhorne@FreeBSD.org>
AuthorDate: 2026-03-16 23:35:35 +0000
Commit:     Mitchell Horne <mhorne@FreeBSD.org>
CommitDate: 2026-10-06 18:29:17 +0000

    pmc.h: bump PMC_VERSION_MINOR
    
    Bump for the addition of PMC_OP_GETCAPS and the recently added Intel
    CPUs.
    
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit e39d3a6b32331437da6c13a4aeb67e5bcca67625)
---
 sys/sys/pmc.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/sys/pmc.h b/sys/sys/pmc.h
index 7ac6eafdac4d..2630a5326aba 100644
--- a/sys/sys/pmc.h
+++ b/sys/sys/pmc.h
@@ -60,7 +60,7 @@
  * The patch version is incremented for every bug fix.
  */
 #define	PMC_VERSION_MAJOR	0x0A
-#define	PMC_VERSION_MINOR	0x00
+#define	PMC_VERSION_MINOR	0x01
 #define	PMC_VERSION_PATCH	0x0000
 
 #define	PMC_VERSION		(PMC_VERSION_MAJOR << 24 |		\

From nobody Tue Oct  6 18:43:32 2026
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 4hzlWt05jjz6Z1tl
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 18:43:38 +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 4hzlWs4vxVz4FNs
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 18:43:37 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791312217;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=ZXJLV0Sj7DxfQz7dBxdmLsMNDFzdV+E7T1O4ZD4G51Y=;
	b=PX2kBFV3AyxXi7f7NI7f2OkuXeiKsaVdemX9ZS8CcbTWpzGV4Xt6PEP+OWmAxd/Zj8tWKN
	xTsUWW7z6eALcQytn/CCITAhtfLiTF/gW8GijzRgb/Bh2Refrkr83sHM+SFvD4HWKlTNIg
	r57Ru7oaBa1swy8Hh88bovgd/tbajQRX3iJSnMSnZoGmF7gFGLBoX///GsTwzv5+tYAMUt
	Y2FoLVcgcVei1Q2U7g3FaoAolY9tuZ8RiMGFwxDj3IRyg0fm/qaq1roDBSjksfQcn59cPw
	KYpaMNUPOuQhpQsnu014qvhADoytQSZtEdRW4WdkF8quS+F2ye1cgBpoe9Vktw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791312217;
	b=M+WRHxo+lMWqiu8hrQIwAy0RsvDSVU1zr6cFvTbjWFa+5oAWkXLNr94blN5INX1UY1A4Hs
	o5HsYC2yqx3fjIexBEIW/VzEqQmRkSKw3ZrJzX7xyhLfyH6z2k/EGkW6R1JEC/wPeSSloR
	eGrciq6MuonpfS2/PGou08rJU/638S5IiKyVbhKZ8QCdWlqfYzOa7/DEYDMOmHyBFoxqnd
	8I85phPSp8LWbH3PyiwN4y+MnFdSP0rzg7+e6/+OnQF84mDNBOb5Iszt0uR1RV+4NU5E7H
	thWl1GU54R5qalw/4gA7WckC9ZJuogPM09dEQj2pRxnlSS4mp2UOVozwB9Q4YA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791312217;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=ZXJLV0Sj7DxfQz7dBxdmLsMNDFzdV+E7T1O4ZD4G51Y=;
	b=X5hMWQ82CK6+Zpc2FVaeBrOn9XTVv4HAPEMnQMsuc6118VLuo9gju94A90skqogkNVP21n
	rLKozBRcE5p9ClTyV0WmDt8IbJ7mFrc0jxOGqDPy83ufMUx1FDEu+WgZVdu5BrgrSvaGDU
	XkweXWbVqXT8l4Z+CAN3zWmVnQVMLFb9ZxJxPenopUW/tGkvL1B6CoOMOs7/RP/VMhthDO
	t28FBb7LlpKfZJh0FH865RL82592SvextruWxMIQVmKkKcOTs5iqcJaxcTTg0Cymt1Ixmw
	8b0jlLBZRK1abhZE9LYSfH+YJDoNLFCpQAxkbbNBc+Qaiq6Fm6NsJkC8w2sJ0Q==
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 4hzlWs3fBszJ6f
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 18:43:37 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 3fb1f
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 18:43:32 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Cc: Ali Mashtizadeh <mashti@uwaterloo.ca>
From: Mitchell Horne <mhorne@FreeBSD.org>
Subject: git: 7c5caf70b6e9 - stable/15 - libpmc: Query hwpmc for caps
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: mhorne
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: 7c5caf70b6e9ec9de608480b841fb1d091f1d3ff
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 18:43:32 +0000
Message-Id: <6ac54154.3fb1f.25850f91@gitrepo.freebsd.org>

The branch stable/15 has been updated by mhorne:

URL: https://cgit.FreeBSD.org/src/commit/?id=7c5caf70b6e9ec9de608480b841fb1d091f1d3ff

commit 7c5caf70b6e9ec9de608480b841fb1d091f1d3ff
Author:     Ali Mashtizadeh <mashti@uwaterloo.ca>
AuthorDate: 2026-03-01 22:08:30 +0000
Commit:     Mitchell Horne <mhorne@FreeBSD.org>
CommitDate: 2026-10-06 18:27:57 +0000

    libpmc: Query hwpmc for caps
    
    This change allows for fine-grained capabilities per counter index. This
    is particularly useful for AMD where subclasses are not exposed to the
    general PMC code, but other architectures also have asymmetric behaviors
    when it comes to specific counter indices.
    
    A new PMC_OP_GETCAPS op is added to the hwpmc(4) ioctl interface.
    
    Reviewed by:    mhorne
    Sponsored by:   Netflix
    Pull Request:   https://github.com/freebsd/freebsd-src/pull/2058
    
    (cherry picked from commit 44a983d249d05d932b6cff333f130baf70febc22)
---
 lib/libpmc/libpmc.c       | 19 +++++++++----------
 share/man/man4/hwpmc.4    |  4 ++++
 sys/dev/hwpmc/hwpmc_amd.c | 15 +++++++++++++++
 sys/dev/hwpmc/hwpmc_mod.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
 sys/sys/pmc.h             | 15 ++++++++++++++-
 5 files changed, 87 insertions(+), 11 deletions(-)

diff --git a/lib/libpmc/libpmc.c b/lib/libpmc/libpmc.c
index 10e357f55935..aad9c2dff737 100644
--- a/lib/libpmc/libpmc.c
+++ b/lib/libpmc/libpmc.c
@@ -1168,17 +1168,16 @@ pmc_attach(pmc_id_t pmc, pid_t pid)
 int
 pmc_capabilities(pmc_id_t pmcid, uint32_t *caps)
 {
-	unsigned int i;
-	enum pmc_class cl;
+	struct pmc_op_caps args;
+	int status;
 
-	cl = PMC_ID_TO_CLASS(pmcid);
-	for (i = 0; i < cpu_info.pm_nclass; i++)
-		if (cpu_info.pm_classes[i].pm_class == cl) {
-			*caps = cpu_info.pm_classes[i].pm_caps;
-			return (0);
-		}
-	errno = EINVAL;
-	return (-1);
+	args.pm_pmcid = pmcid;
+	args.pm_caps = 0;
+
+	status = PMC_CALL(PMC_OP_GETCAPS, &args);
+	*caps = args.pm_caps;
+
+	return (status);
 }
 
 int
diff --git a/share/man/man4/hwpmc.4 b/share/man/man4/hwpmc.4
index 8bb1cb96f694..5b3e9a195b8c 100644
--- a/share/man/man4/hwpmc.4
+++ b/share/man/man4/hwpmc.4
@@ -325,6 +325,10 @@ This operation returns to the caller after the write operation
 has returned.
 The returned error code reflects any pending error state inside
 .Nm .
+.It Dv PMC_OP_GETCAPS
+Retrieve the capabilities associated with a specific PMC counter.
+Some capabilities may be limited to specific indices (i.e., not available
+across all counters within a class).
 .It Dv PMC_OP_GETCPUINFO
 Retrieve information about the highest possible CPU number for the system,
 and the number of hardware performance monitoring counters available per CPU.
diff --git a/sys/dev/hwpmc/hwpmc_amd.c b/sys/dev/hwpmc/hwpmc_amd.c
index 82d1a4c6180c..1ecea9dd28d0 100644
--- a/sys/dev/hwpmc/hwpmc_amd.c
+++ b/sys/dev/hwpmc/hwpmc_amd.c
@@ -695,6 +695,20 @@ amd_get_msr(int ri, uint32_t *msr)
 	return (0);
 }
 
+/*
+ * Return the capabilities of the given PMC.
+ */
+static int
+amd_get_caps(int ri, uint32_t *caps)
+{
+	KASSERT(ri >= 0 && ri < amd_npmcs,
+	    ("[amd,%d] ri %d out of range", __LINE__, ri));
+
+	*caps = amd_pmcdesc[ri].pm_descr.pd_caps;
+
+	return (0);
+}
+
 /*
  * Processor-dependent initialization.
  */
@@ -1022,6 +1036,7 @@ pmc_amd_initialize(void)
 	pcd->pcd_start_pmc	= amd_start_pmc;
 	pcd->pcd_stop_pmc	= amd_stop_pmc;
 	pcd->pcd_write_pmc	= amd_write_pmc;
+	pcd->pcd_get_caps	= amd_get_caps;
 
 	pmc_mdep->pmd_cputype	= cputype;
 	pmc_mdep->pmd_intr	= amd_intr;
diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c
index 342b600276b0..de6beb165c66 100644
--- a/sys/dev/hwpmc/hwpmc_mod.c
+++ b/sys/dev/hwpmc/hwpmc_mod.c
@@ -4583,6 +4583,51 @@ pmc_syscall_handler(struct thread *td, void *syscall_args)
 	}
 	break;
 
+	/*
+	 * Get the PMC capabilities
+	 */
+
+	case PMC_OP_GETCAPS:
+	{
+		struct pmc_op_caps c;
+		struct pmc *pm;
+		struct pmc_classdep *pcd;
+		pmc_id_t pmcid;
+		int adjri, ri;
+
+		PMC_DOWNGRADE_SX();
+
+		if ((error = copyin(arg, &c, sizeof(c))) != 0)
+			break;
+
+		pmcid = c.pm_pmcid;
+
+		if ((error = pmc_find_pmc(pmcid, &pm)) != 0)
+			break;
+
+		KASSERT(pmcid == pm->pm_id,
+		    ("[pmc,%d] pmc id %x != pmcid %x", __LINE__,
+			pm->pm_id, pmcid));
+
+		ri = PMC_TO_ROWINDEX(pm);
+		pcd = pmc_ri_to_classdep(md, ri, &adjri);
+
+		/*
+		 * If PMC class has no GETCAPS return the class capabilities
+		 * otherwise get the per counter capabilities.
+		 */
+		if (pcd->pcd_get_caps == NULL) {
+			c.pm_caps = pcd->pcd_caps;
+		} else {
+			error = (*pcd->pcd_get_caps)(adjri, &c.pm_caps);
+			if (error < 0)
+				break;
+		}
+
+		if ((error = copyout(&c, arg, sizeof(c))) < 0)
+			break;
+	}
+	break;
 
 	default:
 		error = EINVAL;
diff --git a/sys/sys/pmc.h b/sys/sys/pmc.h
index 726a03c35502..7ac6eafdac4d 100644
--- a/sys/sys/pmc.h
+++ b/sys/sys/pmc.h
@@ -348,7 +348,8 @@ enum pmc_event {
 	__PMC_OP(PMCSTOP, "Stop a PMC")					\
 	__PMC_OP(WRITELOG, "Write a cookie to the log file")		\
 	__PMC_OP(CLOSELOG, "Close log file")				\
-	__PMC_OP(GETDYNEVENTINFO, "Get dynamic events list")
+	__PMC_OP(GETDYNEVENTINFO, "Get dynamic events list")		\
+	__PMC_OP(GETCAPS, "Get capabilities")
 
 enum pmc_ops {
 #undef	__PMC_OP
@@ -639,6 +640,17 @@ struct pmc_op_getdyneventinfo {
 	struct pmc_dyn_event_descr	pm_events[PMC_EV_DYN_COUNT];
 };
 
+/*
+ * OP GETCAPS
+ *
+ * Retrieve the PMC capabilties flags for this type of counter.
+ */
+
+struct pmc_op_caps {
+	pmc_id_t	pm_pmcid;	/* allocated pmc id */
+	uint32_t	pm_caps;	/* capabilities */
+};
+
 #ifdef _KERNEL
 
 #include <sys/malloc.h>
@@ -1031,6 +1043,7 @@ struct pmc_classdep {
 	/* description */
 	int (*pcd_describe)(int _cpu, int _ri, struct pmc_info *_pi,
 		struct pmc **_ppmc);
+	int (*pcd_get_caps)(int _ri, uint32_t *_caps);
 
 	/* class-dependent initialization & finalization */
 	int (*pcd_pcpu_init)(struct pmc_mdep *_md, int _cpu);

From nobody Tue Oct  6 18:49:04 2026
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 4hzlf84KCbz6Z2xh
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 18:49:04 +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 4hzlf812gRz4Gj6
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 18:49:04 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791312544;
	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=ThGjAoqI/UwqO0P591Kbx/UkxGMne1u3NCH22GEPUoc=;
	b=VT5XI3tZxN06XkS/wKSQBPb5YuHmlIs69p/IyumgF4AIGtQgdxLasn3EpbSI/c6zgKz1nH
	SqXrDFOmZQjCgGAeJnvzUi1OHb9typVJPa+uWreDZ1m2zRN3j0FA/Box1FptIdKUo6h8R0
	Bnt03A7i3PwFehOFsBbzwYYqNmTuDdminEZFgtUvNs+/5GkXuH1CyylT8ouTB7xLUKVLyC
	pT5FniTDtj+wkWI5DmloffNrsKiWBPPXSR75F2NRJ6gcgYjgawUfo+Ic5NjESOCgr/Iv+i
	dvlFdlqu2f4XaBWhMwkvJm9zryWxitfBJpoYSLp+VKXIuJm7Ug+hvXlZ/7cBfw==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791312544;
	b=eg/rDbsW5xSNzY8PVe9BnDvQF+y1mqiJ4KTY7kIYsc9ZlO6mtO4geTnzpu6XW7SyV1cexn
	yYpEdLA7xVovWMdfq9G/mz7eI5zUmJyCdr4M1h7yvhrDxX6q/9YylBv9VEPtY6Zc66L3PL
	2f8ty1weUgynfkz19sJKWexw3XdTU5R+8mqAQOYlfC1+B46pgil/5K0VFmS3TehY99mvcs
	7qakU18pWICsVikJXmf2KiCdBsvAnMg3dML8oplk3ChopCnPIHgj6acG68gddhh6lECIra
	ghdIn4RpmtltC3MhlwegkTST0wWSsZBeXQixQ18C5RkkZr8wJ9feJ2rgq54HbQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791312544;
	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=ThGjAoqI/UwqO0P591Kbx/UkxGMne1u3NCH22GEPUoc=;
	b=tfaZiI7F5pH5Dn/aTn7oLcXF990e1pafyrlefSIqbrBBDi6VpttEgm2Jls1Qzia/C3pku4
	XgYSXleCCBiUdnzcWoS1qcyu6GdZx2zPcdq2KcrpH8F3Yc9kSOzq81pY6K+R4BophT3MnM
	mVgJxiSYOx+/DYdzeB9W2Dnj0xhrlnfW586QGbdOKyKInE+ur1iEUKakixuNgl3x8NlXQN
	tncRzGzZnu+sZGTb3eaO4ekkR9Rvk3AcQVJgA79pqPtJdHcrxwkrG+4IjmvSY8GZK1w4Lc
	IlPReXtG+GwwVX73AVmuOuP7hYLYWg1xbtGYm/X7Vaje/CSmc0BgClQ7ygfvyA==
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 4hzlf806xqzJ6j
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 18:49:04 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 3f527
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 18:49:04 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
From: Mitchell Horne <mhorne@FreeBSD.org>
Subject: git: 3e8ce3834ad5 - stable/14 - pmc.h: bump PMC_VERSION_MINOR
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: mhorne
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: 3e8ce3834ad5d0e1c10ed9e32b721c23c991296e
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 18:49:04 +0000
Message-Id: <6ac542a0.3f527.688e7e65@gitrepo.freebsd.org>

The branch stable/14 has been updated by mhorne:

URL: https://cgit.FreeBSD.org/src/commit/?id=3e8ce3834ad5d0e1c10ed9e32b721c23c991296e

commit 3e8ce3834ad5d0e1c10ed9e32b721c23c991296e
Author:     Mitchell Horne <mhorne@FreeBSD.org>
AuthorDate: 2026-03-16 23:35:35 +0000
Commit:     Mitchell Horne <mhorne@FreeBSD.org>
CommitDate: 2026-10-06 18:48:43 +0000

    pmc.h: bump PMC_VERSION_MINOR
    
    Bump for the addition of PMC_OP_GETCAPS and the recently added Intel
    CPUs.
    
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit e39d3a6b32331437da6c13a4aeb67e5bcca67625)
---
 sys/sys/pmc.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/sys/pmc.h b/sys/sys/pmc.h
index 06987e91b942..5f6b03a028dd 100644
--- a/sys/sys/pmc.h
+++ b/sys/sys/pmc.h
@@ -60,7 +60,7 @@
  * The patch version is incremented for every bug fix.
  */
 #define	PMC_VERSION_MAJOR	0x0A
-#define	PMC_VERSION_MINOR	0x00
+#define	PMC_VERSION_MINOR	0x01
 #define	PMC_VERSION_PATCH	0x0000
 
 #define	PMC_VERSION		(PMC_VERSION_MAJOR << 24 |		\

From nobody Tue Oct  6 18:49:02 2026
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 4hzlfD5Kc5z6Z2c9
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 18:49:08 +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 4hzlfD0vg6z4GjM
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 18:49:08 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791312548;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=WJCOrpdhMg+kjOHr7IK7eyB9Usx10k7b6S88KXUK1So=;
	b=Ut8K7XeXQPOGVUyJqFakMBg8YF7PexLARQ1wLxdCLNzYWbs9LtqIfUum/VEUSzu7s4csOY
	uh7fWVFCDe2f1DeVkYoCzOIdAb6JWuy/42SdYbLds0bWYCk7iJoPG/jMyRx97DOLW8Npf+
	7IS73cOWlAI9em5/A+tViqToYH5MkkgoDXEahBPy7LnUNflO0TZZWSIpkPU7VKz2X/X3k8
	Gx0sU6lO2Mng8bSe70TujkBbpSZwkE6b6HHogZUCtyoRzy9sq5F2wQYegTfv/0pioJrGw7
	aWtcbpWALRAyFeFAk25ux55QCm0HEgefFVvTE15Om8c4YviLGMP0uKwPFOO3sA==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791312548;
	b=Yn1Iv8y4Nnt6QwD2VDTNfkK2UZFZP6xCgF4VS6NkarkdwREZnXHBgcwOU+OEKAk8Sa7IGx
	HrBGd/h7kqvRq97jX9k63GSooL3wWsvdVcIS4AkAREKpFwSikW5F4rdbY1W8RDAscaUBU/
	jpElRXsT4CrSDS687qpktdoNYmTIQWAi9Q75Cey1F5trToNF/s/LHOFOApHquziK6xyOvl
	j4CGgpg3w7Z8CKl+IvLHg1+xraaAknKkezUbfFJ5a9Fy/gwTXQytcA9L1YWWGR3Ph2h5JY
	1+B+DTIGd1G7qDjUA5fHmjmx7Z5FaQ0vNfZf8yeiFR0HVsRcnUc7RjE49UT2Gw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791312548;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=WJCOrpdhMg+kjOHr7IK7eyB9Usx10k7b6S88KXUK1So=;
	b=cYWh7IRyTB79hHdjMVonoIA8xsSQG2MLiLshEixJQ+g4/dlcryp1Vp+5BP1Ta94xBd/++N
	4+dW8O7+RWlbP3y9Z/GLc3jlh+FSyls1F7Bc8v1EjISgIVUe9mEkrqnHvKHE56O3Ygo8Pi
	FFQPhxrBsLgS7D8ybOOUP4hLl5AlPtMn8me1vu1+ePAu2/Gve6iYyw10G83q1UlQWE7Suw
	/YEpBbR5O20OobtYAt+11dTUjQVRZ4fpF5Na+nqI7hurhAioI00Ese/zsfikD61UTboD2/
	SKcSfUI2wm5zhpWooz7ZEAtuW21XjwoAMPGBdj1DUCupx2KFp75hbk+EE++vFg==
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 4hzlfC6kyTzHxc
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 18:49:07 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 3ed9c
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 18:49:02 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Cc: Ali Mashtizadeh <mashti@uwaterloo.ca>
From: Mitchell Horne <mhorne@FreeBSD.org>
Subject: git: 1cc380dbe814 - stable/14 - libpmc: Query hwpmc for caps
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: mhorne
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/14
X-Git-Reftype: branch
X-Git-Commit: 1cc380dbe8148d86ba655a92d663da0fd05fb03f
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 18:49:02 +0000
Message-Id: <6ac5429e.3ed9c.7ac1ff5@gitrepo.freebsd.org>

The branch stable/14 has been updated by mhorne:

URL: https://cgit.FreeBSD.org/src/commit/?id=1cc380dbe8148d86ba655a92d663da0fd05fb03f

commit 1cc380dbe8148d86ba655a92d663da0fd05fb03f
Author:     Ali Mashtizadeh <mashti@uwaterloo.ca>
AuthorDate: 2026-03-01 22:08:30 +0000
Commit:     Mitchell Horne <mhorne@FreeBSD.org>
CommitDate: 2026-10-06 18:48:37 +0000

    libpmc: Query hwpmc for caps
    
    This change allows for fine-grained capabilities per counter index. This
    is particularly useful for AMD where subclasses are not exposed to the
    general PMC code, but other architectures also have asymmetric behaviors
    when it comes to specific counter indices.
    
    A new PMC_OP_GETCAPS op is added to the hwpmc(4) ioctl interface.
    
    Reviewed by:    mhorne
    Sponsored by:   Netflix
    Pull Request:   https://github.com/freebsd/freebsd-src/pull/2058
    
    (cherry picked from commit 44a983d249d05d932b6cff333f130baf70febc22)
---
 lib/libpmc/libpmc.c       | 19 +++++++++----------
 share/man/man4/hwpmc.4    |  4 ++++
 sys/dev/hwpmc/hwpmc_amd.c | 15 +++++++++++++++
 sys/dev/hwpmc/hwpmc_mod.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
 sys/sys/pmc.h             | 15 ++++++++++++++-
 5 files changed, 87 insertions(+), 11 deletions(-)

diff --git a/lib/libpmc/libpmc.c b/lib/libpmc/libpmc.c
index f10a64e28cac..c6aaf5cdec16 100644
--- a/lib/libpmc/libpmc.c
+++ b/lib/libpmc/libpmc.c
@@ -1169,17 +1169,16 @@ pmc_attach(pmc_id_t pmc, pid_t pid)
 int
 pmc_capabilities(pmc_id_t pmcid, uint32_t *caps)
 {
-	unsigned int i;
-	enum pmc_class cl;
+	struct pmc_op_caps args;
+	int status;
 
-	cl = PMC_ID_TO_CLASS(pmcid);
-	for (i = 0; i < cpu_info.pm_nclass; i++)
-		if (cpu_info.pm_classes[i].pm_class == cl) {
-			*caps = cpu_info.pm_classes[i].pm_caps;
-			return (0);
-		}
-	errno = EINVAL;
-	return (-1);
+	args.pm_pmcid = pmcid;
+	args.pm_caps = 0;
+
+	status = PMC_CALL(PMC_OP_GETCAPS, &args);
+	*caps = args.pm_caps;
+
+	return (status);
 }
 
 int
diff --git a/share/man/man4/hwpmc.4 b/share/man/man4/hwpmc.4
index 54a251dcca76..1ab690e5009c 100644
--- a/share/man/man4/hwpmc.4
+++ b/share/man/man4/hwpmc.4
@@ -325,6 +325,10 @@ This operation returns to the caller after the write operation
 has returned.
 The returned error code reflects any pending error state inside
 .Nm .
+.It Dv PMC_OP_GETCAPS
+Retrieve the capabilities associated with a specific PMC counter.
+Some capabilities may be limited to specific indices (i.e., not available
+across all counters within a class).
 .It Dv PMC_OP_GETCPUINFO
 Retrieve information about the highest possible CPU number for the system,
 and the number of hardware performance monitoring counters available per CPU.
diff --git a/sys/dev/hwpmc/hwpmc_amd.c b/sys/dev/hwpmc/hwpmc_amd.c
index 8e1a6ad25be7..1e8f1421eca2 100644
--- a/sys/dev/hwpmc/hwpmc_amd.c
+++ b/sys/dev/hwpmc/hwpmc_amd.c
@@ -919,6 +919,20 @@ amd_get_msr(int ri, uint32_t *msr)
 	return (0);
 }
 
+/*
+ * Return the capabilities of the given PMC.
+ */
+static int
+amd_get_caps(int ri, uint32_t *caps)
+{
+	KASSERT(ri >= 0 && ri < amd_npmcs,
+	    ("[amd,%d] ri %d out of range", __LINE__, ri));
+
+	*caps = amd_pmcdesc[ri].pm_descr.pd_caps;
+
+	return (0);
+}
+
 /*
  * processor dependent initialization.
  */
@@ -1144,6 +1158,7 @@ pmc_amd_initialize(void)
 	pcd->pcd_start_pmc	= amd_start_pmc;
 	pcd->pcd_stop_pmc	= amd_stop_pmc;
 	pcd->pcd_write_pmc	= amd_write_pmc;
+	pcd->pcd_get_caps	= amd_get_caps;
 
 	pmc_mdep->pmd_intr	= amd_intr;
 	pmc_mdep->pmd_switch_in = amd_switch_in;
diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c
index 216430e3ef5c..0a5ee8c18e13 100644
--- a/sys/dev/hwpmc/hwpmc_mod.c
+++ b/sys/dev/hwpmc/hwpmc_mod.c
@@ -4586,6 +4586,51 @@ pmc_syscall_handler(struct thread *td, void *syscall_args)
 	}
 	break;
 
+	/*
+	 * Get the PMC capabilities
+	 */
+
+	case PMC_OP_GETCAPS:
+	{
+		struct pmc_op_caps c;
+		struct pmc *pm;
+		struct pmc_classdep *pcd;
+		pmc_id_t pmcid;
+		int adjri, ri;
+
+		PMC_DOWNGRADE_SX();
+
+		if ((error = copyin(arg, &c, sizeof(c))) != 0)
+			break;
+
+		pmcid = c.pm_pmcid;
+
+		if ((error = pmc_find_pmc(pmcid, &pm)) != 0)
+			break;
+
+		KASSERT(pmcid == pm->pm_id,
+		    ("[pmc,%d] pmc id %x != pmcid %x", __LINE__,
+			pm->pm_id, pmcid));
+
+		ri = PMC_TO_ROWINDEX(pm);
+		pcd = pmc_ri_to_classdep(md, ri, &adjri);
+
+		/*
+		 * If PMC class has no GETCAPS return the class capabilities
+		 * otherwise get the per counter capabilities.
+		 */
+		if (pcd->pcd_get_caps == NULL) {
+			c.pm_caps = pcd->pcd_caps;
+		} else {
+			error = (*pcd->pcd_get_caps)(adjri, &c.pm_caps);
+			if (error < 0)
+				break;
+		}
+
+		if ((error = copyout(&c, arg, sizeof(c))) < 0)
+			break;
+	}
+	break;
 
 	default:
 		error = EINVAL;
diff --git a/sys/sys/pmc.h b/sys/sys/pmc.h
index d190632f7a9b..06987e91b942 100644
--- a/sys/sys/pmc.h
+++ b/sys/sys/pmc.h
@@ -349,7 +349,8 @@ enum pmc_event {
 	__PMC_OP(PMCSTOP, "Stop a PMC")					\
 	__PMC_OP(WRITELOG, "Write a cookie to the log file")		\
 	__PMC_OP(CLOSELOG, "Close log file")				\
-	__PMC_OP(GETDYNEVENTINFO, "Get dynamic events list")
+	__PMC_OP(GETDYNEVENTINFO, "Get dynamic events list")		\
+	__PMC_OP(GETCAPS, "Get capabilities")
 
 enum pmc_ops {
 #undef	__PMC_OP
@@ -640,6 +641,17 @@ struct pmc_op_getdyneventinfo {
 	struct pmc_dyn_event_descr	pm_events[PMC_EV_DYN_COUNT];
 };
 
+/*
+ * OP GETCAPS
+ *
+ * Retrieve the PMC capabilties flags for this type of counter.
+ */
+
+struct pmc_op_caps {
+	pmc_id_t	pm_pmcid;	/* allocated pmc id */
+	uint32_t	pm_caps;	/* capabilities */
+};
+
 #ifdef _KERNEL
 
 #include <sys/malloc.h>
@@ -1030,6 +1042,7 @@ struct pmc_classdep {
 	/* description */
 	int (*pcd_describe)(int _cpu, int _ri, struct pmc_info *_pi,
 		struct pmc **_ppmc);
+	int (*pcd_get_caps)(int _ri, uint32_t *_caps);
 
 	/* class-dependent initialization & finalization */
 	int (*pcd_pcpu_init)(struct pmc_mdep *_md, int _cpu);

From nobody Tue Oct  6 19:13:45 2026
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 4hzmBl0jlvz6Z4Vn
	for <dev-commits-src-branches@mlmmj.nyi.freebsd.org>; Tue, 06 Oct 2026 19:13:51 +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 4hzmBk5GYsz4LwQ
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 19:13:50 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1791314030;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=dGcALLwQRULJurdJSjkQOIE/fPnTv0bKj3es7z4a/to=;
	b=p6gPb6l73xbvGOpI3xctBJA/H5d1AAt0J//2w9eqjJBuo+fdR/6u6aKDkzgPFHtUkPDdYH
	8AwGJlcT8h6I6Knp08c75z9OyagEWryBv6IB0xWR3UQ+jULkXakWeczvMtCMqaJpdrc8zp
	CQvuut1nOochffxWpsLos0TxxpPDVx9ry++TE99mI/kunhAyp1DgSjExT3uDNE0urjjyqp
	lVD4G+3Es6lIntEF7Cy8jfiJ4/VyGzqRZ9kA0MRHAWdVF0SdVDV6F4eX81M0pDIIuFXM2o
	UT6q95W2i/7dU0TV+J8QFXhL3ccN73k1Whd0Y6rw4A4Q+W3Ii9X2kVRNgmpz7w==
ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791314030;
	b=SunIHsz0c0A1Ij9giMO7Gsxfd0WunW90DJD8jUFonm7UWAdoND9BEY1wNRVCVDOQtmeiy6
	Ohf3ZBflEZR97Gg1a8rZERH7WA9PBWLa487HBKJcqErwaPGy7P5dRVtCaOuxunEp39Sm2g
	yzNOGxKVqtdWWDDoCTTG5x0BTF9NYjvzcUC5vgOzFPPQroa+wIqynMR5eT4K/xhljOR0mk
	Drs8nhC+pToGhbQMeux9Lq93rJG9WKQ4yhBQovJkmP541fH8zbzPAh9AKwI0HYTVYfuYqJ
	Jv4nu95CZfTsene+meHKocZqiQ0acJ42Av/TsNNTaRJuuu8hmdvUEkULVJZ74g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1791314030;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=dGcALLwQRULJurdJSjkQOIE/fPnTv0bKj3es7z4a/to=;
	b=E6TiIFcN9Vd0e8AK3nhyUxpYePX1vIwoqkVWSkDiWu+99fa8cYCWpY/ilgDkLPRVbK59B4
	ncwmYWWCKdzVv2HzKjyOh+705UuQofvfAHlNIuKP5CdEHLn5W6vyzJMIDQKUudHReaiLmy
	eFQd6BU6zvzzUqNbXC/Hon8jeiNzC7HvfkDJ4rlI9t3XkIbMw5q6pBocsQ6B5bT9TESiZH
	Qfl9QuMuIze9vwa4Vd4BfCofMruIylKgyEVv6bx0VWqXrIpoa3JbJnYnjnx3rZOFzDFBVI
	B03smBDT2ds/qL5lRocCfG/vNHUp7Jk3Aqml1FnayQUHo0rU+nX3ziD4+f2SSg==
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 4hzmBk4LKTzJwX
	for <dev-commits-src-branches@FreeBSD.org>; Tue, 06 Oct 2026 19:13:50 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from git (uid 1279)
	(envelope-from git@FreeBSD.org)
	id 40b41
	by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org);
	Tue, 06 Oct 2026 19:13:45 +0000
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Cc: Peter Eriksson <pen@lysator.liu.se>
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: fabb224f2f15 - stable/15 - camcontrol: Add support for firmware uploading on HPE-branded drives
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-src-branches@freebsd.org
Sender: owner-dev-commits-src-branches@FreeBSD.org
List-Id: <dev-commits-src-branches.FreeBSD.org>
List-Post: <mailto:dev-commits-src-branches@FreeBSD.org>
List-Help: <mailto:dev-commits-src-branches+help@FreeBSD.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@FreeBSD.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@FreeBSD.org>
List-Owner: <mailto:postmaster@FreeBSD.org>
Precedence: list
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/15
X-Git-Reftype: branch
X-Git-Commit: fabb224f2f15b80eff4526d6e6b8c1c69834883e
Auto-Submitted: auto-generated
Date: Tue, 06 Oct 2026 19:13:45 +0000
Message-Id: <6ac54869.40b41.3624103b@gitrepo.freebsd.org>

The branch stable/15 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=fabb224f2f15b80eff4526d6e6b8c1c69834883e

commit fabb224f2f15b80eff4526d6e6b8c1c69834883e
Author:     Peter Eriksson <pen@lysator.liu.se>
AuthorDate: 2026-10-02 16:45:59 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-10-06 19:13:30 +0000

    camcontrol: Add support for firmware uploading on HPE-branded drives
    
    PR:             299059
    (cherry picked from commit b30e67dc130ea8217e92e0b4c462f189e2268eba)
---
 sbin/camcontrol/fwdownload.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sbin/camcontrol/fwdownload.c b/sbin/camcontrol/fwdownload.c
index 569021c2bfc1..d8057dab326c 100644
--- a/sbin/camcontrol/fwdownload.c
+++ b/sbin/camcontrol/fwdownload.c
@@ -197,6 +197,8 @@ static struct fw_vendor vendors_list[] = {
 	0x8000, 0x05, 0x05, 1, 0, FW_TUR_READY, WB_TIMEOUT, FW_TIMEOUT_DEFAULT},
 	{VENDOR_HP,	 	"HP",		T_ANY,
 	0x8000, 0x07, 0x07, 0, 1, FW_TUR_READY, WB_TIMEOUT, FW_TIMEOUT_DEFAULT},
+	{VENDOR_HP,	 	"HPE",		T_ANY,
+	0x8000, 0x07, 0x07, 0, 1, FW_TUR_READY, WB_TIMEOUT, FW_TIMEOUT_DEFAULT},
 	{VENDOR_IBM,		"IBM",		T_SEQUENTIAL,
 	0x8000, 0x07, 0x07, 0, 1, FW_TUR_NA, 300 * 1000, FW_TIMEOUT_DEFAULT},
 	{VENDOR_IBM,		"IBM",		T_ANY,

