git: 954098103ee2 - main - nvme: Add quirk for broken namespace-change log

Colin Percival <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Message-ID <6a693b33.34430.62eb40e8__27008.6010963254$1785281349$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by cperciva:

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

commit 954098103ee287f39ecbf5d3144bcdfd16e7c41d
Author:     Colin Percival <[email protected]>
AuthorDate: 2026-07-14 17:41:03 +0000
Commit:     Colin Percival <[email protected]>
CommitDate: 2026-07-28 23:28:36 +0000

    nvme: Add quirk for broken namespace-change log
    
    Add a QUIRK_EMPTY_NAMESPACE_CHANGED_LOG quirk which indicates that the
    nvme controller may not properly populate the namespace-changed log
    page.  If we receive a NVME_LOG_CHANGED_NAMESPACE page for a device
    with this quirk and the page is empty, probe all of the namespaces
    rather than none of them.
    
    Reviewed by:    imp
    MFC after:      1 week
    Sponsored by:   Amazon
    Differential Revision:  https://reviews.freebsd.org/D58231
---
 sys/dev/nvme/nvme_ctrlr.c   | 5 +++++
 sys/dev/nvme/nvme_private.h | 1 +
 2 files changed, 6 insertions(+)

diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c
index ee61632cf9bb..4b96966114fe 100644
--- a/sys/dev/nvme/nvme_ctrlr.c
+++ b/sys/dev/nvme/nvme_ctrlr.c
@@ -1308,6 +1308,11 @@ nvme_ctrlr_aer_task(void *arg, int pending)
 			for (int j = 0; j < n_children; j++)
 				NVME_NS_CHANGED(children[j], nsl->ns[i]);
 		}
+		if (nsl->ns[0] == 0 && ctrlr->quirks & QUIRK_EMPTY_NAMESPACE_CHANGED_LOG) {
+			for (int i = 0; i < min(ctrlr->cdata.nn, NVME_MAX_NAMESPACES); i++)
+				for (int j = 0; j < n_children; j++)
+					NVME_NS_CHANGED(children[j], i + 1);
+		}
 		free(children, M_TEMP);
 	}
 
diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h
index ec941f31779c..5a83966ba729 100644
--- a/sys/dev/nvme/nvme_private.h
+++ b/sys/dev/nvme/nvme_private.h
@@ -232,6 +232,7 @@ struct nvme_controller {
 #define	QUIRK_APPLE_SHARED_CID_SPACE		0x20	/* Admin/IO share a single CID table */
 #define	QUIRK_APPLE_NO_ASYNC_EVENT		0x40	/* Skip NVMe async event requests */
 #define	QUIRK_APPLE_SINGLE_VECTOR		0x80	/* Single MSI vector, one IO queue */
+#define	QUIRK_EMPTY_NAMESPACE_CHANGED_LOG	0x100	/* Change Namespace List Log is always empty */
 
 	int			resource_id;
 	struct resource		*resource;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.