From: Huang Jiachai Date: Tue, 5 Jul 2016 03:17:42 +0000 (+0800) Subject: video: rockchip: vop: 3399: fix disable_irq() after local_irq_save() X-Git-Tag: firefly_0821_release~2238 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=90f48406ac711894130360541ef5a1f1d4b6dd14;p=firefly-linux-kernel-4.4.55.git video: rockchip: vop: 3399: fix disable_irq() after local_irq_save() [ 0.654187] BUG: sleeping function called from invalid context at kernel/irq/manage.c:110 [ 0.654905] in_atomic(): 0, irqs_disabled(): 128, pid: 1, name: swapper/0 [ 0.655502] 2 locks held by swapper/0/1: [ 0.655849] #0: (&dev->mutex){......}, at: [] __driver_attach+0x38/0x98 [ 0.656630] #1: (&dev->mutex){......}, at: [] __driver_attach+0x58/0x98 [ 0.657395] irq event stamp: 419700 [ 0.657705] hardirqs last enabled at (419699): [] kfree+0x1d0/0x360 [ 0.658409] hardirqs last disabled at (419700): [] rk_fb_register+0x8a4/0xc64 [ 0.659181] softirqs last enabled at (419668): [] __do_softirq+0x41c/0x53c [ 0.659937] softirqs last disabled at (419663): [] irq_exit+0x70/0xc4 [ 0.660651] CPU: 4 PID: 1 Comm: swapper/0 Not tainted 4.4.11 #1477 [ 0.661194] Hardware name: Rockchip RK3399 Evaluation Board v1 (Android) (DT) [ 0.661819] Call trace: [ 0.662044] [] dump_backtrace+0x0/0x1a8 [ 0.662521] [] show_stack+0x14/0x1c [ 0.662970] [] dump_stack+0xb0/0xec [ 0.663419] [] ___might_sleep+0x1c8/0x1d8 [ 0.663911] [] __might_sleep+0x74/0x84 [ 0.664383] [] synchronize_irq+0x30/0x84 [ 0.664867] [] disable_irq+0x20/0x2c [ 0.665325] [] vop_set_irq_to_cpu+0x20/0x2c [ 0.665832] [] rk_fb_poll_wait_frame_complete+0x38/0xd4 [ 0.666429] [] rk_fb_register+0x90c/0xc64 [ 0.666922] [] vop_probe+0x55c/0x5d4 [ 0.667378] [] platform_drv_probe+0x58/0xa4 [ 0.667885] [] driver_probe_device+0x114/0x288 [ 0.668414] [] __driver_attach+0x6c/0x98 [ 0.668899] [] bus_for_each_dev+0x64/0x88 [ 0.669391] [] driver_attach+0x20/0x28 [ 0.669861] [] bus_add_driver+0xe8/0x1e0 [ 0.670345] [] driver_register+0x98/0xe4 [ 0.670829] [] __platform_driver_register+0x48/0x50 [ 0.671398] [] vop_module_init+0x18/0x20 [ 0.671885] [] do_one_initcall+0xf0/0x178 [ 0.672378] [] kernel_init_freeable+0x148/0x1e8 [ 0.672916] [] kernel_init+0x10/0xf8 [ 0.673370] [] ret_from_fork+0x10/0x40 Change-Id: If9a39a6800a4a5dd1749f21125c6ba5204bee901 Signed-off-by: Huang Jiachai --- diff --git a/drivers/video/rockchip/lcdc/rk322x_lcdc.c b/drivers/video/rockchip/lcdc/rk322x_lcdc.c index b1f3b05b3144..8e5c4ece9cc8 100644 --- a/drivers/video/rockchip/lcdc/rk322x_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk322x_lcdc.c @@ -4216,7 +4216,7 @@ static int vop_set_irq_to_cpu(struct rk_lcdc_driver *dev_drv, int enable) if (enable) enable_irq(vop_dev->irq); else - disable_irq(vop_dev->irq); + disable_irq_nosync(vop_dev->irq); return 0; }