git: 7b3ee39e73af - main - libcam: Include nvme opcode and status code routines from nvme_util.c
Date: Fri, 06 Jun 2025 01:32:36 UTC
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=7b3ee39e73af36f49f471f7900baeb98ac3504d0
commit 7b3ee39e73af36f49f471f7900baeb98ac3504d0
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2025-06-06 01:28:38 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2025-06-06 01:28:38 +0000
libcam: Include nvme opcode and status code routines from nvme_util.c
libcam in userspace also includes nvme_all.c which now depends on
nvme_util.c, so add nvme_util.c to libcam's sources. This requires
exporting the opcode and status code routines in nvme_util.c to
userspace as well as the kernel. In turn, this means nvmecontrol now
depends on libsbuf (which is already present in /lib).
Reported by: viswhin, Jenkins
Fixes: 60159a98a837 ("nvme: Move opcode and status code tables from base CAM to nvme_util.c")
Sponsored by: Chelsio Communications
---
lib/libcam/Makefile | 5 +++--
sbin/nvmecontrol/Makefile | 2 +-
sys/dev/nvme/nvme.h | 13 ++++++++-----
sys/dev/nvme/nvme_util.c | 4 ----
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/lib/libcam/Makefile b/lib/libcam/Makefile
index c2f7b75bc878..d4efbbdf4d9b 100644
--- a/lib/libcam/Makefile
+++ b/lib/libcam/Makefile
@@ -3,7 +3,7 @@ PACKAGE= runtime
LIB= cam
SHLIBDIR?= /lib
SRCS= camlib.c scsi_cmdparse.c scsi_all.c scsi_da.c scsi_sa.c cam.c \
- ata_all.c nvme_all.c smp_all.c scsi_wrap.c
+ ata_all.c nvme_all.c nvme_util.c smp_all.c scsi_wrap.c
INCS= camlib.h scsi_wrap.h
LIBADD= sbuf
@@ -39,7 +39,8 @@ MLINKS+= cam.3 cam_open_device.3 \
${SRCTOP}/sys/cam/ata \
${SRCTOP}/sys/cam/nvme \
${SRCTOP}/sys/cam/mmc \
- ${SRCTOP}/sys/cam/scsi
+ ${SRCTOP}/sys/cam/scsi \
+ ${SRCTOP}/sys/dev/nvme
CFLAGS+= -I${.CURDIR} -I${SRCTOP}/sys
diff --git a/sbin/nvmecontrol/Makefile b/sbin/nvmecontrol/Makefile
index 2abcd72dedfa..cf9c23548e36 100644
--- a/sbin/nvmecontrol/Makefile
+++ b/sbin/nvmecontrol/Makefile
@@ -30,7 +30,7 @@ SRCS+= telemetry.c
CFLAGS+= -I${SRCTOP}/lib/libnvmf
MAN= nvmecontrol.8
LDFLAGS+= -rdynamic
-LIBADD+= nvmf util
+LIBADD+= nvmf sbuf util
SUBDIR= modules
HAS_TESTS=
SUBDIR.${MK_TESTS}+= tests
diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
index 87f1da4d281d..17c5cdb4db87 100644
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -35,6 +35,11 @@
#include <sys/param.h>
#include <sys/endian.h>
+#ifndef _KERNEL
+#include <stdbool.h>
+#endif
+
+struct sbuf;
#define NVME_PASSTHROUGH_CMD _IOWR('n', 0, struct nvme_pt_command)
#define NVME_RESET_CONTROLLER _IO('n', 1)
@@ -1901,12 +1906,14 @@ struct nvme_hmb_desc {
#define nvme_completion_is_error(cpl) \
(NVME_STATUS_GET_SC((cpl)->status) != 0 || NVME_STATUS_GET_SCT((cpl)->status) != 0)
+void nvme_cpl_sbuf(const struct nvme_completion *cpl, struct sbuf *sbuf);
+void nvme_opcode_sbuf(bool admin, uint8_t opc, struct sbuf *sb);
+void nvme_sc_sbuf(const struct nvme_completion *cpl, struct sbuf *sbuf);
void nvme_strvis(uint8_t *dst, const uint8_t *src, int dstlen, int srclen);
#ifdef _KERNEL
struct bio;
-struct sbuf;
struct thread;
struct nvme_namespace;
@@ -1927,10 +1934,6 @@ enum nvme_namespace_flags {
NVME_NS_FLUSH_SUPPORTED = 0x2,
};
-void nvme_cpl_sbuf(const struct nvme_completion *cpl, struct sbuf *sbuf);
-void nvme_opcode_sbuf(bool admin, uint8_t opc, struct sbuf *sb);
-void nvme_sc_sbuf(const struct nvme_completion *cpl, struct sbuf *sbuf);
-
int nvme_ctrlr_passthrough_cmd(struct nvme_controller *ctrlr,
struct nvme_pt_command *pt,
uint32_t nsid, int is_user_buffer,
diff --git a/sys/dev/nvme/nvme_util.c b/sys/dev/nvme/nvme_util.c
index 050dfcfbef79..0a07653a7378 100644
--- a/sys/dev/nvme/nvme_util.c
+++ b/sys/dev/nvme/nvme_util.c
@@ -30,12 +30,9 @@
*/
#include <sys/param.h>
-#ifdef _KERNEL
#include <sys/sbuf.h>
-#endif
#include <dev/nvme/nvme.h>
-#ifdef _KERNEL
#define OPC_ENTRY(x) [NVME_OPC_ ## x] = #x
static const char *admin_opcode[256] = {
@@ -269,7 +266,6 @@ nvme_cpl_sbuf(const struct nvme_completion *cpl, struct sbuf *sb)
if (NVME_STATUS_GET_DNR(status) != 0)
sbuf_printf(sb, " DNR");
}
-#endif
void
nvme_strvis(uint8_t *dst, const uint8_t *src, int dstlen, int srclen)