Since --granularity does not take a unit value like --size, just make it an integer argument directly and skip the hand coded conversion.
Signed-off-by: Dan Williams <dan.j.willi...@intel.com> --- cxl/region.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/cxl/region.c b/cxl/region.c index 494da5139c05..c6d7d1a973a8 100644 --- a/cxl/region.c +++ b/cxl/region.c @@ -21,24 +21,25 @@ static struct region_params { const char *bus; const char *size; - const char *granularity; const char *type; const char *root_decoder; const char *region; int ways; + int granularity; bool memdevs; bool force; bool human; bool debug; } param = { .ways = INT_MAX, + .granularity = INT_MAX, }; struct parsed_params { u64 size; u64 ep_min_size; int ways; - unsigned int granularity; + int granularity; const char **targets; int num_targets; struct cxl_decoder *root_decoder; @@ -67,9 +68,8 @@ OPT_STRING('s', "size", ¶m.size, \ "total size desired for the resulting region."), \ OPT_INTEGER('w', "ways", ¶m.ways, \ "number of memdevs participating in the regions interleave set"), \ -OPT_STRING('g', "granularity", \ - ¶m.granularity, "interleave granularity", \ - "granularity of the interleave set"), \ +OPT_INTEGER('g', "granularity", ¶m.granularity, \ + "granularity of the interleave set"), \ OPT_STRING('t', "type", ¶m.type, \ "region type", "region type - 'pmem' or 'ram'"), \ OPT_BOOLEAN('m', "memdevs", ¶m.memdevs, \ @@ -140,18 +140,15 @@ static int parse_create_options(int argc, const char **argv, return -EINVAL; } - if (param.granularity) { - unsigned long granularity = strtoul(param.granularity, NULL, 0); - - if (granularity == ULONG_MAX || (int)granularity <= 0) { - log_err(&rl, "Invalid interleave granularity: %s\n", + if (param.granularity < INT_MAX) { + if (param.granularity <= 0) { + log_err(&rl, "Invalid interleave granularity: %d\n", param.granularity); return -EINVAL; } - p->granularity = granularity; + p->granularity = param.granularity; } - if (argc > p->ways) { for (i = p->ways; i < argc; i++) log_err(&rl, "extra argument: %s\n", p->targets[i]); @@ -390,12 +387,11 @@ static int cxl_region_determine_granularity(struct cxl_region *region, struct parsed_params *p) { const char *devname = cxl_region_get_devname(region); - unsigned int granularity; - int ways; + int granularity, ways; /* Default granularity will be the root decoder's granularity */ granularity = cxl_decoder_get_interleave_granularity(p->root_decoder); - if (granularity == 0 || granularity == UINT_MAX) { + if (granularity == 0 || granularity == -1) { log_err(&rl, "%s: unable to determine root decoder granularity\n", devname); return -ENXIO;