Skip to content

Commit 99c02a0

Browse files
Liang Chenrkhuangtao
authored andcommitted
media: rockchip: hdmirx: use devm_request_irq() and remove invalid IRQF_ONESHOT
The flag IRQF_ONESHOT is only for irq thread, so remove IRQF_ONESHOT for devm_request_irq(). And with IRQF_ONESHOT, when enable CONFIG_PREEMPT_RT, kernel will report bug: [ 4.953930][ C4] BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:970 [ 4.953932][ C4] in_atomic(): 1, irqs_disabled(): 128, non_block: 0, pid: 1, name: swapper/0 [ 4.953936][ C4] INFO: lockdep is turned off. [ 4.953937][ C4] irq event stamp: 2481260 [ 4.953938][ C4] hardirqs last enabled at (2481259): [<ffffffc0113a5504>] _raw_spin_unlock_irqrestore+0x60/0xb8 [ 4.953946][ C4] hardirqs last disabled at (2481260): [<ffffffc01139b7c0>] enter_el1_irq_or_nmi+0x20/0x54 [ 4.953951][ C4] softirqs last enabled at (2334926): [<ffffffc010056c20>] __local_bh_enable_ip+0x1f4/0x258 [ 4.953957][ C4] softirqs last disabled at (2334920): [<ffffffc010123444>] local_bh_disable+0x4/0x30 [ 4.953963][ C4] Preemption disabled at: [ 4.953964][ C4] [<ffffffc0100de3d0>] __raw_spin_lock_irqsave+0x3c/0x138 [ 4.953971][ C4] CPU: 4 PID: 1 Comm: swapper/0 Not tainted 5.10.66-rt53 #9 [ 4.953974][ C4] Hardware name: Rockchip RK3588 EVB1 LP4 V10 Board (DT) [ 4.953976][ C4] Call trace: [ 4.953977][ C4] dump_backtrace+0x0/0x1c4 [ 4.953983][ C4] show_stack+0x18/0x24 [ 4.953989][ C4] dump_stack_lvl+0xec/0x148 [ 4.953992][ C4] dump_stack+0x18/0x64 [ 4.953996][ C4] ___might_sleep+0x1b4/0x1c4 [ 4.954002][ C4] rt_spin_lock+0x70/0xd8 [ 4.954005][ C4] hdmirx_hdmi_irq_handler+0x44/0xcf4 [ 4.954008][ C4] __handle_irq_event_percpu+0xa8/0x1b4 [ 4.954015][ C4] handle_irq_event+0x8c/0x180 [ 4.954021][ C4] handle_fasteoi_irq+0x128/0x228 [ 4.954025][ C4] __handle_domain_irq+0xb0/0x11c [ 4.954030][ C4] gic_handle_irq+0x74/0x14c [ 4.954034][ C4] el1_irq+0xd0/0x1c0 [ 4.954037][ C4] _raw_spin_unlock_irqrestore+0x64/0xb8 [ 4.954043][ C4] __setup_irq+0x474/0x6a8 [ 4.954046][ C4] request_threaded_irq+0xfc/0x164 [ 4.954049][ C4] devm_request_threaded_irq+0x84/0xd4 [ 4.954054][ C4] hdmirx_probe+0xa2c/0x128c [ 4.954057][ C4] platform_drv_probe+0x94/0xbc [ 4.954061][ C4] really_probe+0x200/0x508 [ 4.954067][ C4] driver_probe_device+0x7c/0xb8 [ 4.954072][ C4] device_driver_attach+0x6c/0xac [ 4.954078][ C4] __driver_attach+0xc4/0x148 [ 4.954084][ C4] bus_for_each_dev+0x7c/0xc8 [ 4.954089][ C4] driver_attach+0x24/0x30 [ 4.954095][ C4] bus_add_driver+0x100/0x1e0 [ 4.954099][ C4] driver_register+0x78/0x110 [ 4.954106][ C4] __platform_driver_register+0x44/0x50 [ 4.954109][ C4] hdmirx_init+0x44/0x50 [ 4.954113][ C4] do_one_initcall+0x98/0x188 [ 4.954116][ C4] do_initcall_level+0xa0/0xc0 [ 4.954121][ C4] do_initcalls+0x54/0x94 [ 4.954125][ C4] do_basic_setup+0x24/0x30 [ 4.954130][ C4] kernel_init_freeable+0x98/0xf0 [ 4.954134][ C4] kernel_init+0x14/0x184 [ 4.954139][ C4] ret_from_fork+0x10/0x30 Signed-off-by: Liang Chen <[email protected]> Change-Id: I32d3d7588e1eddc3f88fd5c1f47b6efef5da9e32
1 parent 9ee2b2d commit 99c02a0

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3647,8 +3647,8 @@ static int hdmirx_probe(struct platform_device *pdev)
36473647
cpumask_set_cpu(hdmirx_dev->bound_cpu, &cpumask);
36483648
irq_set_affinity_hint(irq, &cpumask);
36493649
hdmirx_dev->hdmi_irq = irq;
3650-
ret = devm_request_threaded_irq(dev, irq, hdmirx_hdmi_irq_handler, NULL,
3651-
IRQF_ONESHOT, RK_HDMIRX_DRVNAME"-hdmi", hdmirx_dev);
3650+
ret = devm_request_irq(dev, irq, hdmirx_hdmi_irq_handler, 0,
3651+
RK_HDMIRX_DRVNAME"-hdmi", hdmirx_dev);
36523652
if (ret) {
36533653
dev_err(dev, "request hdmi irq thread failed! ret:%d\n", ret);
36543654
goto err_work_queues;
@@ -3736,9 +3736,9 @@ static int hdmirx_probe(struct platform_device *pdev)
37363736
cpumask_set_cpu(hdmirx_dev->bound_cpu, &cpumask);
37373737
irq_set_affinity_hint(irq, &cpumask);
37383738
hdmirx_dev->det_irq = irq;
3739-
ret = devm_request_threaded_irq(dev, irq, hdmirx_5v_det_irq_handler,
3740-
NULL, IRQF_ONESHOT | IRQF_TRIGGER_FALLING |
3741-
IRQF_TRIGGER_RISING, RK_HDMIRX_DRVNAME"-5v", hdmirx_dev);
3739+
ret = devm_request_irq(dev, irq, hdmirx_5v_det_irq_handler,
3740+
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
3741+
RK_HDMIRX_DRVNAME"-5v", hdmirx_dev);
37423742
if (ret) {
37433743
dev_err(dev, "request hdmirx-det gpio irq thread failed! ret:%d\n", ret);
37443744
goto err_unreg_video_dev;

0 commit comments

Comments
 (0)