git: b40205855e10 - main - nda: Filter non-storage nvme drives
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 24 Apr 2026 18:38:19 UTC
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