Skip to content

Commit 6d0ca4a

Browse files
krzkgregkh
authored andcommitted
nvmem: layouts: store owner from modules with nvmem_layout_driver_register()
Modules registering driver with nvmem_layout_driver_register() might forget to set .owner field. The field is used by some of other kernel parts for reference counting (try_module_get()), so it is expected that drivers will set it. Solve the problem by moving this task away from the drivers to the core code, just like we did for platform_driver in commit 9447057 ("platform_device: use a macro instead of platform_driver_register"). Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Reviewed-by: Michael Walle <mwalle@kernel.org> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20240430084921.33387-2-srinivas.kandagatla@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 73df3d6 commit 6d0ca4a

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

drivers/nvmem/layouts.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,15 @@ static const struct bus_type nvmem_layout_bus_type = {
5252
.remove = nvmem_layout_bus_remove,
5353
};
5454

55-
int nvmem_layout_driver_register(struct nvmem_layout_driver *drv)
55+
int __nvmem_layout_driver_register(struct nvmem_layout_driver *drv,
56+
struct module *owner)
5657
{
5758
drv->driver.bus = &nvmem_layout_bus_type;
59+
drv->driver.owner = owner;
5860

5961
return driver_register(&drv->driver);
6062
}
61-
EXPORT_SYMBOL_GPL(nvmem_layout_driver_register);
63+
EXPORT_SYMBOL_GPL(__nvmem_layout_driver_register);
6264

6365
void nvmem_layout_driver_unregister(struct nvmem_layout_driver *drv)
6466
{

include/linux/nvmem-provider.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,10 @@ int nvmem_add_one_cell(struct nvmem_device *nvmem,
199199
int nvmem_layout_register(struct nvmem_layout *layout);
200200
void nvmem_layout_unregister(struct nvmem_layout *layout);
201201

202-
int nvmem_layout_driver_register(struct nvmem_layout_driver *drv);
202+
#define nvmem_layout_driver_register(drv) \
203+
__nvmem_layout_driver_register(drv, THIS_MODULE)
204+
int __nvmem_layout_driver_register(struct nvmem_layout_driver *drv,
205+
struct module *owner);
203206
void nvmem_layout_driver_unregister(struct nvmem_layout_driver *drv);
204207
#define module_nvmem_layout_driver(__nvmem_layout_driver) \
205208
module_driver(__nvmem_layout_driver, nvmem_layout_driver_register, \

0 commit comments

Comments
 (0)