void nvme_show_init(void);
void nvme_show_finish(void);
bool nvme_is_fabrics_reg(int offset);
+bool nvme_is_fabrics_optional_reg(int offset);
bool nvme_registers_cmbloc_support(__u32 cmbsz);
bool nvme_registers_pmrctl_ready(__u32 pmrctl);
const char *nvme_degrees_string(long t);
if (!err)
return 0;
+ if (cfg->fabrics && nvme_is_fabrics_optional_reg(cfg->offset)) {
+ *value = -1;
+ return 0;
+ }
+
if (!cfg->fabrics &&
nvme_status_equals(err, NVME_STATUS_TYPE_NVME, NVME_SC_INVALID_FIELD)) {
*value = -1;
memset(bar, 0xff, size);
for (offset = NVME_REG_CAP; offset <= NVME_REG_CMBSZ;
offset += is_64bit ? sizeof(uint64_t) : sizeof(uint32_t)) {
+ if (!nvme_is_fabrics_reg(offset))
+ continue;
+
cfg->offset = offset;
err = nvme_get_single_property(fd, cfg, &value);
if (err)
_cleanup_nvme_dev_ struct nvme_dev *dev = NULL;
nvme_print_flags_t flags;
- bool fabrics = false;
void *bar;
int err;
struct get_reg_config cfg = {
.human_readable = false,
+ .fabrics = false,
};
NVME_ARGS(opts,
bar = mmap_registers(dev, false);
if (!bar) {
+ cfg.fabrics = true;
err = nvme_get_properties(dev_fd(dev), &bar, &cfg);
if (err)
return err;
- fabrics = true;
}
- nvme_show_ctrl_registers(bar, fabrics, flags);
- if (fabrics)
+ nvme_show_ctrl_registers(bar, cfg.fabrics, flags);
+ if (cfg.fabrics)
free(bar);
else
munmap(bar, getpagesize());