Skip to content

Commit 05d09fe

Browse files
committed
ARM: 9361/1: amba: store owner from modules with amba_driver_register()
JIRA: https://issues.redhat.com/browse/RHEL-56484 commit 5677b17 Author: Krzysztof Kozlowski <[email protected]> Date: Tue, 2 Apr 2024 10:51:08 +0100 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 9447057 ("platform_device: use a macro instead of platform_driver_register"). Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Andi Shyti <[email protected]> Acked-by: Suzuki K Poulose <[email protected]> Signed-off-by: Krzysztof Kozlowski <[email protected]> Signed-off-by: Russell King (Oracle) <[email protected]> Signed-off-by: Mark Salter <[email protected]>
1 parent 067d6e5 commit 05d09fe

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

drivers/amba/bus.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -489,28 +489,31 @@ static int __init amba_stub_drv_init(void)
489489
* waiting on amba_match(). So, register a stub driver to make sure
490490
* amba_match() is called even if no amba driver has been registered.
491491
*/
492-
return amba_driver_register(&amba_proxy_drv);
492+
return __amba_driver_register(&amba_proxy_drv, NULL);
493493
}
494494
late_initcall_sync(amba_stub_drv_init);
495495

496496
/**
497-
* amba_driver_register - register an AMBA device driver
497+
* __amba_driver_register - register an AMBA device driver
498498
* @drv: amba device driver structure
499+
* @owner: owning module/driver
499500
*
500501
* Register an AMBA device driver with the Linux device model
501502
* core. If devices pre-exist, the drivers probe function will
502503
* be called.
503504
*/
504-
int amba_driver_register(struct amba_driver *drv)
505+
int __amba_driver_register(struct amba_driver *drv,
506+
struct module *owner)
505507
{
506508
if (!drv->probe)
507509
return -EINVAL;
508510

511+
drv->drv.owner = owner;
509512
drv->drv.bus = &amba_bustype;
510513

511514
return driver_register(&drv->drv);
512515
}
513-
EXPORT_SYMBOL(amba_driver_register);
516+
EXPORT_SYMBOL(__amba_driver_register);
514517

515518
/**
516519
* amba_driver_unregister - remove an AMBA device driver

include/linux/amba/bus.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,18 @@ extern struct bus_type amba_bustype;
112112
#define amba_get_drvdata(d) dev_get_drvdata(&d->dev)
113113
#define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p)
114114

115+
/*
116+
* use a macro to avoid include chaining to get THIS_MODULE
117+
*/
118+
#define amba_driver_register(drv) \
119+
__amba_driver_register(drv, THIS_MODULE)
120+
115121
#ifdef CONFIG_ARM_AMBA
116-
int amba_driver_register(struct amba_driver *);
122+
int __amba_driver_register(struct amba_driver *, struct module *);
117123
void amba_driver_unregister(struct amba_driver *);
118124
#else
119-
static inline int amba_driver_register(struct amba_driver *drv)
125+
static inline int __amba_driver_register(struct amba_driver *drv,
126+
struct module *owner)
120127
{
121128
return -EINVAL;
122129
}

0 commit comments

Comments
 (0)