From 3238f0db35bb4ba8a0d0e6ca99b1b75391c703e9 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Wed, 5 Aug 2026 18:04:55 +0200 Subject: [PATCH 1/5] build: update some more platform guards There a few more places where the platform guards are not ready for porting to another non Linux platform. Signed-off-by: Daniel Wagner --- libnvme/test/meson.build | 2 +- libnvme/test/sysfs/meson.build | 11 +++++++---- plugins/meson.build | 11 ++++++++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/libnvme/test/meson.build b/libnvme/test/meson.build index 4cfc39c1c0..17efcec937 100644 --- a/libnvme/test/meson.build +++ b/libnvme/test/meson.build @@ -296,7 +296,7 @@ if want_fabrics test('libnvme - util', test_util) endif -if host_system != 'windows' +if host_system == 'linux' subdir('ioctl') subdir('sysfs') if want_fabrics diff --git a/libnvme/test/sysfs/meson.build b/libnvme/test/sysfs/meson.build index b58c68085d..5a3099a02a 100644 --- a/libnvme/test/sysfs/meson.build +++ b/libnvme/test/sysfs/meson.build @@ -6,7 +6,8 @@ # Authors: Daniel Wagner diff = find_program('diff', required : false) -if diff.found() +bash_prog = find_program('bash', required : false) +if diff.found() and bash_prog.found() tree_scan = executable( 'test-tree-scan', ['tree-scan.c'], @@ -18,13 +19,14 @@ if diff.found() 'tree-apple-nvme', ] - tree_diff = find_program('tree-diff.sh') + tree_diff = files('tree-diff.sh') foreach t_file : tree_data test( 'libnvme - @0@'.format(t_file), - tree_diff, + bash_prog, args : [ + tree_diff, meson.current_build_dir(), tree_scan.full_path(), files('data'/t_file + '.tar.xz'), @@ -44,8 +46,9 @@ if diff.found() foreach t_file : tree_data test( 'libnvme - @0@-hostnqn'.format(t_file), - tree_diff, + bash_prog, args : [ + tree_diff, meson.current_build_dir(), tree_scan_hostnqn.full_path(), files('data'/t_file + '.tar.xz'), diff --git a/plugins/meson.build b/plugins/meson.build index 995590fb4b..bac82e29e7 100644 --- a/plugins/meson.build +++ b/plugins/meson.build @@ -36,9 +36,7 @@ if host_system != 'windows' ], 'netapp': ['plugins/netapp/netapp-nvme.c'], 'sandisk': ['plugins/sandisk/sandisk-nvme.c', 'plugins/sandisk/sandisk-utils.c'], - 'scaleflux': ['plugins/scaleflux/sfx-nvme.c'], 'wdc': ['plugins/wdc/wdc-nvme.c', 'plugins/wdc/wdc-utils.c'], - 'zns': ['plugins/zns/zns.c'], } else all_plugins += { @@ -50,6 +48,13 @@ else } endif +if host_system == 'linux' + all_plugins += { + 'scaleflux': ['plugins/scaleflux/sfx-nvme.c'], + 'zns': ['plugins/zns/zns.c'], + } +endif + # Get the list of plugins to build selected_plugins = get_option('plugins') @@ -86,7 +91,7 @@ if 'feat' in selected_plugins subdir('feat') endif -if 'lm' in selected_plugins and host_system != 'windows' +if 'lm' in selected_plugins and host_system == 'linux' subdir('lm') endif From f2d4802756d4f058cfaa84e1043ea0c6ab73f859 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Wed, 5 Aug 2026 18:49:04 +0200 Subject: [PATCH 2/5] libnvme/no-mi: add libnvme_transport_handle_get_mi_ep Add missing symbol when MI is disabled. Signed-off-by: Daniel Wagner --- libnvme/src/nvme/no-mi.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libnvme/src/nvme/no-mi.c b/libnvme/src/nvme/no-mi.c index cdca1b90ea..60ec6f0af5 100644 --- a/libnvme/src/nvme/no-mi.c +++ b/libnvme/src/nvme/no-mi.c @@ -37,3 +37,9 @@ int libnvme_mi_admin_admin_passthru(struct libnvme_transport_handle *hdl, { return -ENOTSUP; } + +__shr_public struct libnvme_mi_ep *libnvme_transport_handle_get_mi_ep( + struct libnvme_transport_handle *hdl) +{ + return NULL; +} From 806946c05426292c74021812dea9488a2955c97e Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Wed, 5 Aug 2026 18:52:37 +0200 Subject: [PATCH 3/5] libnvme: drop duplicate accessor/ctrl-sysfs symbols from libnvme.ld GNU ld.bfd silently tolerates the duplicate assignment, but lld (FreeBSD's default linker) warns on every one of them. Signed-off-by: Daniel Wagner --- libnvme/src/libnvme.ld | 9 --------- 1 file changed, 9 deletions(-) diff --git a/libnvme/src/libnvme.ld b/libnvme/src/libnvme.ld index 280294894f..46f208806f 100644 --- a/libnvme/src/libnvme.ld +++ b/libnvme/src/libnvme.ld @@ -9,13 +9,8 @@ LIBNVME_3 { libnvme_create_global_ctx; libnvme_ctrl_first_ns; libnvme_ctrl_first_path; - libnvme_ctrl_get_command_error_count; - libnvme_ctrl_get_phy_slot; - libnvme_ctrl_get_reconnect_count; - libnvme_ctrl_get_reset_count; libnvme_ctrl_get_src_addr; libnvme_ctrl_get_state; - libnvme_ctrl_get_subsysnqn; libnvme_ctrl_get_subsystem; libnvme_ctrl_get_transport_handle; libnvme_ctrl_identify; @@ -73,16 +68,12 @@ LIBNVME_3 { libnvme_ns_flush; libnvme_ns_get_command_error_count; libnvme_ns_get_command_retry_count; - libnvme_ns_get_csi; libnvme_ns_get_ctrl; - libnvme_ns_get_eui64; libnvme_ns_get_io_fail_no_available_path_count; libnvme_ns_get_firmware; - libnvme_ns_get_generic_name; libnvme_ns_get_inflights; libnvme_ns_get_io_ticks; libnvme_ns_get_model; - libnvme_ns_get_nguid; libnvme_ns_get_read_ios; libnvme_ns_get_read_sectors; libnvme_ns_get_read_ticks; From 022d29be1c31f4a92fb501f053ca6468ab7fff42 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Wed, 5 Aug 2026 19:28:05 +0200 Subject: [PATCH 4/5] ccan/endian: guard endian defintion FreeBSD defines those defines thus add guards. Signed-off-by: Daniel Wagner --- ccan/ccan/endian/endian.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ccan/ccan/endian/endian.h b/ccan/ccan/endian/endian.h index 01eae8c178..1782172b65 100644 --- a/ccan/ccan/endian/endian.h +++ b/ccan/ccan/endian/endian.h @@ -103,8 +103,12 @@ static inline uint64_t bswap_64(uint64_t val) #endif /* Needed for Glibc like endiness check */ +#ifndef __LITTLE_ENDIAN #define __LITTLE_ENDIAN 1234 +#endif +#ifndef __BIG_ENDIAN #define __BIG_ENDIAN 4321 +#endif /* Sanity check the defines. We don't handle weird endianness. */ #if !HAVE_LITTLE_ENDIAN && !HAVE_BIG_ENDIAN From 5a0527c63df4bd335c06f4967fef5a0dfbff9276 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Wed, 5 Aug 2026 19:56:14 +0200 Subject: [PATCH 5/5] libnvme/tests: use PRIx64 for __u64 types The platform neutral way to print __u64 types is to use the PRIx macros. Signed-off-by: Daniel Wagner --- libnvme/test/register.c | 58 ++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/libnvme/test/register.c b/libnvme/test/register.c index 72d04752e7..fa2261bb63 100644 --- a/libnvme/test/register.c +++ b/libnvme/test/register.c @@ -71,22 +71,22 @@ void nvme_print_registers(void *regs) __u64 pmrmsc = nvme_mmio_read32(regs + NVME_REG_PMRMSCL) | (__u64)nvme_mmio_read64(regs + NVME_REG_PMRMSCU) << 32; - printf("%-10s : %llx\n", "CAP", cap); - printf(" %-8s : %llx\n", "MQES", NVME_CAP_MQES(cap)); - printf(" %-8s : %llx\n", "CQRS", NVME_CAP_CQR(cap)); - printf(" %-8s : %llx\n", "AMS", NVME_CAP_AMS(cap)); - printf(" %-8s : %llx\n", "TO", NVME_CAP_TO(cap)); - printf(" %-8s : %llx\n", "DSTRD", NVME_CAP_DSTRD(cap)); - printf(" %-8s : %llx\n", "NSSRC", NVME_CAP_NSSRC(cap)); - printf(" %-8s : %llx\n", "CSS", NVME_CAP_CSS(cap)); - printf(" %-8s : %llx\n", "BPS", NVME_CAP_BPS(cap)); - printf(" %-8s : %llx\n", "CPS", NVME_CAP_CPS(cap)); - printf(" %-8s : %llx\n", "MPSMIN", NVME_CAP_MPSMIN(cap)); - printf(" %-8s : %llx\n", "MPSMAX", NVME_CAP_MPSMAX(cap)); - printf(" %-8s : %llx\n", "PMRS", NVME_CAP_PMRS(cap)); - printf(" %-8s : %llx\n", "CMBS", NVME_CAP_CMBS(cap)); - printf(" %-8s : %llx\n", "NSSS", NVME_CAP_NSSS(cap)); - printf(" %-8s : %llx\n", "CRMS", NVME_CAP_CRMS(cap)); + printf("%-10s : %" PRIx64 "\n", "CAP", (uint64_t)cap); + printf(" %-8s : %" PRIx64 "\n", "MQES", (uint64_t)NVME_CAP_MQES(cap)); + printf(" %-8s : %" PRIx64 "\n", "CQRS", (uint64_t)NVME_CAP_CQR(cap)); + printf(" %-8s : %" PRIx64 "\n", "AMS", (uint64_t)NVME_CAP_AMS(cap)); + printf(" %-8s : %" PRIx64 "\n", "TO", (uint64_t)NVME_CAP_TO(cap)); + printf(" %-8s : %" PRIx64 "\n", "DSTRD", (uint64_t)NVME_CAP_DSTRD(cap)); + printf(" %-8s : %" PRIx64 "\n", "NSSRC", (uint64_t)NVME_CAP_NSSRC(cap)); + printf(" %-8s : %" PRIx64 "\n", "CSS", (uint64_t)NVME_CAP_CSS(cap)); + printf(" %-8s : %" PRIx64 "\n", "BPS", (uint64_t)NVME_CAP_BPS(cap)); + printf(" %-8s : %" PRIx64 "\n", "CPS", (uint64_t)NVME_CAP_CPS(cap)); + printf(" %-8s : %" PRIx64 "\n", "MPSMIN", (uint64_t)NVME_CAP_MPSMIN(cap)); + printf(" %-8s : %" PRIx64 "\n", "MPSMAX", (uint64_t)NVME_CAP_MPSMAX(cap)); + printf(" %-8s : %" PRIx64 "\n", "PMRS", (uint64_t)NVME_CAP_PMRS(cap)); + printf(" %-8s : %" PRIx64 "\n", "CMBS", (uint64_t)NVME_CAP_CMBS(cap)); + printf(" %-8s : %" PRIx64 "\n", "NSSS", (uint64_t)NVME_CAP_NSSS(cap)); + printf(" %-8s : %" PRIx64 "\n", "CRMS", (uint64_t)NVME_CAP_CRMS(cap)); printf("%-10s : %x\n", "VS", vs); printf(" %-8s : %x\n", "MJR", NVME_VS_TER(vs)); @@ -119,8 +119,8 @@ void nvme_print_registers(void *regs) printf(" %-8s : %x\n", "ASQS", NVME_AQA_ASQS(aqa)); printf(" %-8s : %x\n", "ACQS", NVME_AQA_ACQS(aqa)); - printf("%-10s : %llx\n", "ASQ", asq); - printf("%-10s : %llx\n", "ACQ", acq); + printf("%-10s : %" PRIx64 "\n", "ASQ", (uint64_t)asq); + printf("%-10s : %" PRIx64 "\n", "ACQ", (uint64_t)acq); printf("%-10s : %x\n", "CMBLOC", cmbloc); printf(" %-8s : %x\n", "BIR", NVME_CMBLOC_BIR(cmbloc)); @@ -140,7 +140,7 @@ void nvme_print_registers(void *regs) printf(" %-8s : %x\n", "WDS", NVME_CMBSZ_WDS(cmbsz)); printf(" %-8s : %x\n", "SZU", NVME_CMBSZ_SZU(cmbsz)); printf(" %-8s : %x\n", "SZ", NVME_CMBSZ_SZ(cmbsz)); - printf(" %-8s : %llx\n", "bytes", nvme_cmb_size(cmbsz)); + printf(" %-8s : %" PRIx64 "\n", "bytes", (uint64_t)nvme_cmb_size(cmbsz)); printf("%-10s : %x\n", "BPINFO", bpinfo); printf(" %-8s : %x\n", "BPSZ", NVME_BPINFO_BPSZ(bpinfo)); @@ -152,12 +152,12 @@ void nvme_print_registers(void *regs) printf(" %-8s : %x\n", "BPROF", NVME_BPRSEL_BPROF(bprsel)); printf(" %-8s : %x\n", "BPID", NVME_BPRSEL_BPID(bprsel)); - printf("%-10s : %llx\n", "BPMBL", bpmbl); + printf("%-10s : %" PRIx64 "\n", "BPMBL", (uint64_t)bpmbl); - printf("%-10s : %llx\n", "CMBMSC", cmbmsc); - printf(" %-8s : %llx\n", "CRE", NVME_CMBMSC_CRE(cmbmsc)); - printf(" %-8s : %llx\n", "CMSE", NVME_CMBMSC_CMSE(cmbmsc)); - printf(" %-8s : %llx\n", "CBA", NVME_CMBMSC_CBA(cmbmsc)); + printf("%-10s : %" PRIx64 "\n", "CMBMSC", (uint64_t)cmbmsc); + printf(" %-8s : %" PRIx64 "\n", "CRE", (uint64_t)NVME_CMBMSC_CRE(cmbmsc)); + printf(" %-8s : %" PRIx64 "\n", "CMSE", (uint64_t)NVME_CMBMSC_CMSE(cmbmsc)); + printf(" %-8s : %" PRIx64 "\n", "CBA", (uint64_t)NVME_CMBMSC_CBA(cmbmsc)); printf("%-10s : %x\n", "CMBSTS", cmbsts); printf(" %-8s : %x\n", "CBAI", NVME_CMBSTS_CBAI(cmbsts)); @@ -184,16 +184,16 @@ void nvme_print_registers(void *regs) printf(" %-8s : %x\n", "PMRSZU", NVME_PMREBS_PMRSZU(pmrebs)); printf(" %-8s : %x\n", "RBB", NVME_PMREBS_RBB(pmrebs)); printf(" %-8s : %x\n", "PMRWBZ", NVME_PMREBS_PMRWBZ(pmrebs)); - printf(" %-8s : %llx\n", "bytes", nvme_pmr_size(pmrebs)); + printf(" %-8s : %" PRIx64 "\n", "bytes", (uint64_t)nvme_pmr_size(pmrebs)); printf("%-10s : %x\n", "PMRSWTP", pmrswtp); printf(" %-8s : %x\n", "PMRSWTU", NVME_PMRSWTP_PMRSWTU(pmrswtp)); printf(" %-8s : %x\n", "PMRSWTV", NVME_PMRSWTP_PMRSWTV(pmrswtp)); - printf(" %-8s : %llx\n", "tput", nvme_pmr_throughput(pmrswtp)); + printf(" %-8s : %" PRIx64 "\n", "tput", (uint64_t)nvme_pmr_throughput(pmrswtp)); - printf("%-10s : %llx\n", "PMRMSC", pmrmsc); - printf(" %-8s : %llx\n", "CMSE", NVME_PMRMSC_CMSE(pmrmsc)); - printf(" %-8s : %llx\n", "CBA", NVME_PMRMSC_CBA(pmrmsc)); + printf("%-10s : %" PRIx64 "\n", "PMRMSC", (uint64_t)pmrmsc); + printf(" %-8s : %" PRIx64 "\n", "CMSE", (uint64_t)NVME_PMRMSC_CMSE(pmrmsc)); + printf(" %-8s : %" PRIx64 "\n", "CBA", (uint64_t)NVME_PMRMSC_CBA(pmrmsc)); } int main(int argc, char **argv)