Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Apr 2026 18:38:19 +0000
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: b40205855e10 - main - nda: Filter non-storage nvme drives
Message-ID:  <69ebb89b.22ab2.6ebc1063@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by imp:

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

commit b40205855e100a4bd95f89e97c15d268ef5b3a35
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2026-04-24 18:31:38 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2026-04-24 18:32:49 +0000

    nda: Filter non-storage nvme drives
    
    Non-stroage drives have namespaces, but no storage attached. These
    drives have a different interface type than storage drives, so ignore
    them for the nvme_sim, which just handles storage.
    
    Sponsored by:           Netflix
    Differential Revision:  https://reviews.freebsd.org/D56461
---
 sys/cam/nvme/nvme_da.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/sys/cam/nvme/nvme_da.c b/sys/cam/nvme/nvme_da.c
index be578bae5da5..ac1e1f09e2af 100644
--- a/sys/cam/nvme/nvme_da.c
+++ b/sys/cam/nvme/nvme_da.c
@@ -49,6 +49,7 @@
 #include <sys/sbuf.h>
 #include <geom/geom.h>
 #include <geom/geom_disk.h>
+#include <dev/pci/pcireg.h>
 #endif /* _KERNEL */
 
 #ifndef _KERNEL
@@ -731,6 +732,7 @@ ndaasync(void *callback_arg, uint32_t code, struct cam_path *path, void *arg)
 	switch (code) {
 	case AC_FOUND_DEVICE:
 	{
+		struct ccb_pathinq cpi;
 		struct ccb_getdev *cgd;
 		cam_status status;
 
@@ -741,6 +743,18 @@ ndaasync(void *callback_arg, uint32_t code, struct cam_path *path, void *arg)
 		if (cgd->protocol != PROTO_NVME)
 			break;
 
+		/*
+		 * For PCIe cards, filter all the cards whose programming
+		 * interface doesn't conform to the NVMe storage spec. This
+		 * allows the nvme controller to attach to more than just
+		 * storage cards that use the nvme model.
+		 */
+		xpt_path_inq(&cpi, cgd->ccb_h.path);
+		if (cpi.transport == XPORT_NVME &&
+		    cpi.xport_specific.nvme.progif !=
+		    PCIP_STORAGE_NVM_ENTERPRISE_NVMHCI_1_0)
+			break;
+
 		/*
 		 * Allocate a peripheral instance for
 		 * this device and start the probe


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69ebb89b.22ab2.6ebc1063>