Skip to content

Commit ecfb6d8

Browse files
committed
libnvdimm: fix devm_nvdimm_memremap() error path
The internal alloc_nvdimm_map() helper might fail, particularly if the memory region is already busy. Report request_mem_region() failures and check for the failure. Reported-by: Ryan Chen <[email protected]> Signed-off-by: Dan Williams <[email protected]>
1 parent 9d15ce9 commit ecfb6d8

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

drivers/nvdimm/core.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,11 @@ static struct nvdimm_map *alloc_nvdimm_map(struct device *dev,
9999
nvdimm_map->size = size;
100100
kref_init(&nvdimm_map->kref);
101101

102-
if (!request_mem_region(offset, size, dev_name(&nvdimm_bus->dev)))
102+
if (!request_mem_region(offset, size, dev_name(&nvdimm_bus->dev))) {
103+
dev_err(&nvdimm_bus->dev, "failed to request %pa + %zd for %s\n",
104+
&offset, size, dev_name(dev));
103105
goto err_request_region;
106+
}
104107

105108
if (flags)
106109
nvdimm_map->mem = memremap(offset, size, flags);
@@ -171,6 +174,9 @@ void *devm_nvdimm_memremap(struct device *dev, resource_size_t offset,
171174
kref_get(&nvdimm_map->kref);
172175
nvdimm_bus_unlock(dev);
173176

177+
if (!nvdimm_map)
178+
return NULL;
179+
174180
if (devm_add_action_or_reset(dev, nvdimm_map_put, nvdimm_map))
175181
return NULL;
176182

0 commit comments

Comments
 (0)