rk29: backlight: fix kernel BUG by double add_timer while fast suspend/resume
author黄涛 <huangtao@rock-chips.com>
Thu, 3 Mar 2011 11:31:05 +0000 (19:31 +0800)
committer黄涛 <huangtao@rock-chips.com>
Thu, 3 Mar 2011 11:33:40 +0000 (19:33 +0800)
fix this bug:
kernel BUG at kernel/timer.c:791!
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0404000
[00000000] *pgd=00000000
Internal error: Oops: 817 [#1] PREEMPT
last sysfs file: /sys/devices/platform/rk29_i2c.0/i2c-0/0-0055/power_supply/bq27510-battery/status
Modules linked in: wlan
CPU: 0    Not tainted  (2.6.32.27 #2)
PC is at __bug+0x18/0x24
LR is at __bug+0x14/0x24
[<c042b3c8>] (__bug+0x18/0x24) from [<c0453680>] (add_timer+0x1c/0x2c)
[<c0453680>] (add_timer+0x1c/0x2c) from [<c0476348>] (late_resume+0x104/0x158)
[<c0476348>] (late_resume+0x104/0x158) from [<c045a7bc>] (worker_thread+0x180/0x22c)
[<c045a7bc>] (worker_thread+0x180/0x22c) from [<c045dfac>] (kthread+0x78/0x80)
[<c045dfac>] (kthread+0x78/0x80) from [<c042899c>] (kernel_thread_exit+0x0/0x8)

drivers/video/backlight/rk29_backlight.c

index ecb362ee57b48cd3e46370a2acb16dd4d2ecf71e..86b25cde879830c9742da8b1d796c0ab0a661744 100644 (file)
@@ -201,6 +201,7 @@ static void rk29_bl_suspend(struct early_suspend *h)
                clk_disable(pwm_clk);
 
     suspend_flag = 1;
+    del_timer_sync(&rk29_bl_info->timer);
 }