mirror of
https://github.com/torvalds/linux.git
synced 2025-04-12 16:47:42 +00:00
ARM: 9361/1: amba: store owner from modules with amba_driver_register()
Modules registering driver with amba_driver_register() often 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 amba bus code, just like we did for platform_driver in commit 9447057eaff8 ("platform_device: use a macro instead of platform_driver_register"). Link: https://lore.kernel.org/r/20240326-module-owner-amba-v1-1-4517b091385b@linaro.org Reviewed-by: Andi Shyti <andi.shyti@kernel.org> Acked-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
This commit is contained in:
parent
4cece76496
commit
5677b17c33
@ -488,28 +488,31 @@ static int __init amba_stub_drv_init(void)
|
||||
* waiting on amba_match(). So, register a stub driver to make sure
|
||||
* amba_match() is called even if no amba driver has been registered.
|
||||
*/
|
||||
return amba_driver_register(&amba_proxy_drv);
|
||||
return __amba_driver_register(&amba_proxy_drv, NULL);
|
||||
}
|
||||
late_initcall_sync(amba_stub_drv_init);
|
||||
|
||||
/**
|
||||
* amba_driver_register - register an AMBA device driver
|
||||
* __amba_driver_register - register an AMBA device driver
|
||||
* @drv: amba device driver structure
|
||||
* @owner: owning module/driver
|
||||
*
|
||||
* Register an AMBA device driver with the Linux device model
|
||||
* core. If devices pre-exist, the drivers probe function will
|
||||
* be called.
|
||||
*/
|
||||
int amba_driver_register(struct amba_driver *drv)
|
||||
int __amba_driver_register(struct amba_driver *drv,
|
||||
struct module *owner)
|
||||
{
|
||||
if (!drv->probe)
|
||||
return -EINVAL;
|
||||
|
||||
drv->drv.owner = owner;
|
||||
drv->drv.bus = &amba_bustype;
|
||||
|
||||
return driver_register(&drv->drv);
|
||||
}
|
||||
EXPORT_SYMBOL(amba_driver_register);
|
||||
EXPORT_SYMBOL(__amba_driver_register);
|
||||
|
||||
/**
|
||||
* amba_driver_unregister - remove an AMBA device driver
|
||||
|
@ -112,11 +112,18 @@ extern struct bus_type amba_bustype;
|
||||
#define amba_get_drvdata(d) dev_get_drvdata(&d->dev)
|
||||
#define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p)
|
||||
|
||||
/*
|
||||
* use a macro to avoid include chaining to get THIS_MODULE
|
||||
*/
|
||||
#define amba_driver_register(drv) \
|
||||
__amba_driver_register(drv, THIS_MODULE)
|
||||
|
||||
#ifdef CONFIG_ARM_AMBA
|
||||
int amba_driver_register(struct amba_driver *);
|
||||
int __amba_driver_register(struct amba_driver *, struct module *);
|
||||
void amba_driver_unregister(struct amba_driver *);
|
||||
#else
|
||||
static inline int amba_driver_register(struct amba_driver *drv)
|
||||
static inline int __amba_driver_register(struct amba_driver *drv,
|
||||
struct module *owner)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user