ARM: pxa: make pwm driver module_platform_driver
PATCH 1/1 ARM: pxa: make pwm driver module_platform_driver
Commit 76abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3d
pwm: Add sysfs interface
causes a kernel oops due to a null pointer dereference on pxa platforms. This happens because the class added by the patch is registered in a subsys_initcall (initcall4), but the pxa pwm driver is registered in arch_initcall (initcall3). If the class is not registered before the driver probe function runs, the oops occurs in device_add() when the uninitialized pointers in struct class are dereferenced. I don't see a reason that the driver must be an arch_initcall, so this patch makes it a regular module_platform_driver (initcall6), preventing the oops.
--- drivers/pwm/pwm-pxa.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-)
drivers/pwm/pwm-pxa.c +1 -11
@@ -182,16 +182,6 @@ static struct platform_driver pwm_driver = { .id_table = pwm_id_table, }; -static int __init pwm_init (void ) -{ -return platform_driver_register (&pwm_driver); -} -arch_initcall (pwm_init); - -static void __exit pwm_exit(void) -{ -platform_driver_unregister (&pwm_driver); -} -module_exit (pwm_exit); +module_platform_driver (pwm_driver);MODULE_LICENSE ("GPL v2" );
Signature · 1 line
1.8.1.5
PATCH 1/1 ARM: pxa: make pwm driver module_platform_driver
Quoted 4 lines · Mike Dunn
Commit
76abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dpwm: Add sysfs interface
Quoted 8 lines
causes a kernel oops due to a null pointer dereference on pxa platforms. This happens because the class added by the patch is registered in a
subsys_initcall(initcall4), but the pxa pwm driver is registered inarch_initcall(initcall3). If the class is not registered before the driver probe function runs, the oops occurs indevice_add()when the uninitialized pointers in struct class are dereferenced. I don't see a reason that the driver must be anarch_initcall, so this patch makes it a regularmodule_platform_driver(initcall6), preventing the oops.
That makes sense.
The only users I'm aware of for PWM on pxa is backlight, and that can certainly wait for regular driver initcall level. I'm not aware of any usage in early boot stages.
Signature · 1 line
Robert
PATCH 1/1 ARM: pxa: make pwm driver module_platform_driver
In reply to Mike DunnDear Mike Dunn,
Quoted 30 lines
Commit
76abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3dpwm: Add sysfs interface
causes a kernel oops due to a null pointer dereference on pxa platforms. This happens because the class added by the patch is registered in a
subsys_initcall(initcall4), but the pxa pwm driver is registered inarch_initcall(initcall3). If the class is not registered before the driver probe function runs, the oops occurs indevice_add()when the uninitialized pointers in struct class are dereferenced. I don't see a reason that the driver must be anarch_initcall, so this patch makes it a regularmodule_platform_driver(initcall6), preventing the oops.Signed-off-by Mike Dunn <[email protected]>--- drivers/pwm/pwm-pxa.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-)drivers/pwm/pwm-pxa.c +0
-4@@ -182,16 +182,6 @@ static struct platform_driver pwm_driver = { .id_table = pwm_id_table, }; -static int __init pwm_init (void ) -{ -return platform_driver_register (&pwm_driver); -}
drivers/pwm/pwm-pxa.c static struct platform_driver pwm_driver = { · line 187
Quoted 10 lines
drivers/pwm/pwm-pxa.c +1
-7-arch_initcall (pwm_init); - -static void __exit pwm_exit(void) -{ -platform_driver_unregister (&pwm_driver); -} -module_exit (pwm_exit); +module_platform_driver (pwm_driver);MODULE_LICENSE ("GPL v2" );
Best regards,
Marek Vasut