From: Daniel Wagner Date: Fri, 3 Feb 2023 10:16:11 +0000 (+0100) Subject: nvme: Support effects-log for fabrics ctrl X-Git-Tag: v2.4~82^2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=5d0f73e7a192dae77b7312c79d522a0205156f19;p=users%2Fsagi%2Fnvme-cli.git nvme: Support effects-log for fabrics ctrl nvme-cli v1.16 supported effects-log for fabric devices only, nvme-cli 2.x supported only memory based transports (aka PCI). Obviously, we should support effects-log independent of the transport type. Do this by first trying to map the PCI registers and read the CAP property if this fails fall back using the get-properties approach. Signed-off-by: Daniel Wagner --- diff --git a/nvme.c b/nvme.c index 350e8239..aa5cec75 100644 --- a/nvme.c +++ b/nvme.c @@ -921,31 +921,36 @@ static int get_effects_log(int argc, char **argv, struct command *cmd, struct pl list_head_init(&log_pages); if (cfg.csi < 0) { - nvme_root_t nvme_root; - uint64_t cap; - int nvme_command_set_supported; - int other_command_sets_supported; - nvme_root = nvme_scan(NULL); - bar = mmap_registers(nvme_root, dev); - nvme_free_tree(nvme_root); - - if (!bar) { - goto close_dev; - } - cap = mmio_read64(bar + NVME_REG_CAP); - munmap(bar, getpagesize()); + nvme_root_t r; + __u64 cap; - nvme_command_set_supported = NVME_CAP_CSS(cap) & NVME_CAP_CSS_NVM; - other_command_sets_supported = NVME_CAP_CSS(cap) & NVME_CAP_CSS_CSI; + r = nvme_scan(NULL); + bar = mmap_registers(r, dev); + nvme_free_tree(r); - if (nvme_command_set_supported) + if (bar) { + cap = mmio_read64(bar + NVME_REG_CAP); + munmap(bar, getpagesize()); + } else { + struct nvme_get_property_args args = { + .args_size = sizeof(args), + .fd = dev_fd(dev), + .offset = NVME_REG_CAP, + .value = &cap, + .timeout = NVME_DEFAULT_IOCTL_TIMEOUT, + }; + err = nvme_get_property(&args); + if (err) + goto close_dev; + } + + if (NVME_CAP_CSS(cap) & NVME_CAP_CSS_NVM) err = collect_effects_log(dev, NVME_CSI_NVM, &log_pages, flags); - if (!err && other_command_sets_supported) + if (!err && (NVME_CAP_CSS(cap) & NVME_CAP_CSS_CSI)) err = collect_effects_log(dev, NVME_CSI_ZNS, &log_pages, flags); - } else { err = collect_effects_log(dev, cfg.csi, &log_pages, flags); }