Skip to content

Commit

Permalink
nvme: Refactor mmap_registers to add writable parameter
Browse files Browse the repository at this point in the history
To prepare the stage for the set register feature.

Signed-off-by: Tokunori Ikegami <[email protected]>
  • Loading branch information
ikegami-t committed Mar 10, 2024
1 parent 1c079d5 commit 0d5678e
Showing 1 changed file with 11 additions and 7 deletions.
18 changes: 11 additions & 7 deletions nvme.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ static const char space[51] = {[0 ... 49] = ' ', '\0'};
static char *output_format_val = "normal";
int verbose_level;

static void *mmap_registers(nvme_root_t r, struct nvme_dev *dev);
static void *mmap_registers(nvme_root_t r, struct nvme_dev *dev, bool writable);

const char *nvme_strerror(int errnum)
{
Expand Down Expand Up @@ -984,7 +984,7 @@ static int get_effects_log(int argc, char **argv, struct command *cmd, struct pl
__u64 cap;

r = nvme_scan(NULL);
bar = mmap_registers(r, dev);
bar = mmap_registers(r, dev, false);
nvme_free_tree(r);

if (bar) {
Expand Down Expand Up @@ -5247,14 +5247,18 @@ static int nvme_get_properties(int fd, void **pbar)
return err;
}

static void *mmap_registers(nvme_root_t r, struct nvme_dev *dev)
static void *mmap_registers(nvme_root_t r, struct nvme_dev *dev, bool writable)
{
nvme_ctrl_t c = NULL;
nvme_ns_t n = NULL;

char path[512];
void *membase;
int fd;
int prot = PROT_READ;

if (writable)
prot |= PROT_WRITE;

c = nvme_scan_ctrl(r, dev->name);
if (c) {
Expand All @@ -5272,15 +5276,15 @@ static void *mmap_registers(nvme_root_t r, struct nvme_dev *dev)
nvme_free_ns(n);
}

fd = open(path, O_RDONLY);
fd = open(path, writable ? O_RDWR : O_RDONLY);
if (fd < 0) {
if (log_level >= LOG_DEBUG)
nvme_show_error("%s did not find a pci resource, open failed %s",
dev->name, strerror(errno));
return NULL;
}

membase = mmap(NULL, getpagesize(), PROT_READ, MAP_SHARED, fd, 0);
membase = mmap(NULL, getpagesize(), prot, MAP_SHARED, fd, 0);
if (membase == MAP_FAILED) {
if (log_level >= LOG_DEBUG) {
fprintf(stderr, "%s failed to map. ", dev->name);
Expand Down Expand Up @@ -5332,9 +5336,9 @@ static int show_registers(int argc, char **argv, struct command *cmd, struct plu
flags |= VERBOSE;

r = nvme_scan(NULL);
bar = mmap_registers(r, dev);
bar = mmap_registers(r, dev, false);
if (!bar) {
err = nvme_get_properties(dev_fd(dev), &bar);
err = nvme_get_properties(dev_fd(dev), &bar, &cfg);
if (err)
goto free_tree;
fabrics = true;
Expand Down

0 comments on commit 0d5678e

Please sign in to comment.