iommu/rockchip: fix devm_free_irq
RK3128 vop-iommu skip request the irq due to register read issue. So don't free irq when shut down or belowing error will output [ 102.107589] WARNING: CPU: 3 PID: 1013 at kernel/irq/devres.c:143 devm_free_irq+0x68/0x9c [ 102.115720] Modules linked in: [ 102.118862] CPU: 3 PID: 1013 Comm: init Not tainted 5.10.110 #15 [ 102.124907] Hardware name: Generic DT based system [ 102.129732] Backtrace: [ 102.132230] [<c0bb9218>] (dump_backtrace) from [<c0bb95b8>] (show_stack+0x20/0x24) [ 102.139843] r7:600f0013 r6:c0e96442 r5:00000000 r4:c1219d6c [ 102.145553] [<c0bb9598>] (show_stack) from [<c0bbc7f8>] (dump_stack_lvl+0x94/0xac) [ 102.153171] [<c0bbc764>] (dump_stack_lvl) from [<c0bbc824>] (dump_stack+0x14/0x1c) [ 102.160780] r7:00000000 r6:00000000 r5:00000009 r4:c017ac34 [ 102.166488] [<c0bbc810>] (dump_stack) from [<c011fd80>] (__warn+0xd4/0x100) [ 102.173497] [<c011fcac>] (__warn) from [<c0bb9cd8>] (warn_slowpath_fmt+0x8c/0xc4) [ 102.181026] r9:00000000 r8:00000009 r7:c017ac34 r6:0000008f r5:c0df4ea4 r4:c353c000 [ 102.188820] [<c0bb9c50>] (warn_slowpath_fmt) from [<c017ac34>] (devm_free_irq+0x68/0x9c) [ 102.196962] r9:c0e44260 r8:c128d018 r7:c12ea690 r6:c1a17f40 r5:0000002e r4:c353c000 [ 102.204759] [<c017abcc>] (devm_free_irq) from [<c051e934>] (rk_iommu_shutdown+0x58/0x5c) [ 102.212895] r6:c1a17f40 r5:00000001 r4:c197ec00 [ 102.217558] [<c051e8dc>] (rk_iommu_shutdown) from [<c05b134c>] (platform_drv_shutdown+0x2c/0x30) [ 102.226385] r7:c12ea690 r6:c12285f0 r5:c197ec10 r4:c197ec14 [ 102.232094] [<c05b1320>] (platform_drv_shutdown) from [<c05ad464>] (device_shutdown+0x15c/0x1dc) [ 102.240938] [<c05ad308>] (device_shutdown) from [<c01441d4>] (kernel_restart_prepare+0x3c/0x48) [ 102.249684] r10:00000058 r9:01234567 r8:00000010 r7:c353c000 r6:4321fedc r5:c11168ec [ 102.257548] r4:00000000 [ 102.260124] [<c0144198>] (kernel_restart_prepare) from [<c01442f4>] (kernel_restart+0x1c/0x60) [ 102.268785] [<c01442d8>] (kernel_restart) from [<c01445d8>] (__do_sys_reboot+0x154/0x1e0) [ 102.277004] r5:c11168ec r4:00000000 [ 102.280617] [<c0144484>] (__do_sys_reboot) from [<c01446d4>] (sys_reboot+0x18/0x1c) [ 102.288326] r9:c353c000 r8:c01002c4 r7:00000058 r6:005241c4 r5:00524140 r4:00000000 [ 102.296121] [<c01446bc>] (sys_reboot) from [<c0100060>] (ret_fast_syscall+0x0/0x54) [ 102.303821] Exception stack(0xc353dfa8 to 0xc353dff0) [ 102.308912] dfa0: 00000000 00524140 fee1dead 28121969 01234567 00000010 [ 102.317141] dfc0: 00000000 00524140 005241c4 00000058 beddbefc 0044b1a8 b6f39d00 b6f3a010 [ 102.325364] dfe0: 00523b5c beddbc90 004dadf4 b6e584c8 [ 102.330545] ---[ end trace adc766c58fa6634f ]--- [ 102.335275] ------------[ cut here ]------------ [ 102.339948] WARNING: CPU: 3 PID: 1013 at kernel/irq/manage.c:1756 free_irq+0x26c/0x29c [ 102.347907] Trying to free already-free IRQ 46 [ 102.352381] Modules linked in: [ 102.355479] CPU: 3 PID: 1013 Comm: init Tainted: G W 5.10.110 #15 [ 102.362907] Hardware name: Generic DT based system [ 102.367721] Backtrace: [ 102.370212] [<c0bb9218>] (dump_backtrace) from [<c0bb95b8>] (show_stack+0x20/0x24) [ 102.377824] r7:600f0093 r6:c0e96442 r5:00000000 r4:c1219d6c [ 102.383532] [<c0bb9598>] (show_stack) from [<c0bbc7f8>] (dump_stack_lvl+0x94/0xac) [ 102.391150] [<c0bbc764>] (dump_stack_lvl) from [<c0bbc824>] (dump_stack+0x14/0x1c) [ 102.398759] r7:c353dd34 r6:00000000 r5:00000009 r4:c017823c [ 102.404466] [<c0bbc810>] (dump_stack) from [<c011fd80>] (__warn+0xd4/0x100) [ 102.411473] [<c011fcac>] (__warn) from [<c0bb9cd8>] (warn_slowpath_fmt+0x8c/0xc4) [ 102.419002] r9:c0df48e7 r8:00000009 r7:c017823c r6:000006dc r5:c0df4854 r4:c353c000 [ 102.426799] [<c0bb9c50>] (warn_slowpath_fmt) from [<c017823c>] (free_irq+0x26c/0x29c) [ 102.434676] r9:600f0013 r8:0000002e r7:c1a17f40 r6:c1978a6c r5:00000000 r4:c1978a00 [ 102.442471] [<c0177fd0>] (free_irq) from [<c017ac40>] (devm_free_irq+0x74/0x9c) [ 102.449832] r10:c197ec54 r9:c0e44260 r8:c128d018 r7:c12ea690 r6:c1a17f40 r5:0000002e [ 102.457700] r4:c353c000 [ 102.460278] [<c017abcc>] (devm_free_irq) from [<c051e934>] (rk_iommu_shutdown+0x58/0x5c) [ 102.468414] r6:c1a17f40 r5:00000001 r4:c197ec00 [ 102.473075] [<c051e8dc>] (rk_iommu_shutdown) from [<c05b134c>] (platform_drv_shutdown+0x2c/0x30) [ 102.481901] r7:c12ea690 r6:c12285f0 r5:c197ec10 r4:c197ec14 [ 102.487611] [<c05b1320>] (platform_drv_shutdown) from [<c05ad464>] (device_shutdown+0x15c/0x1dc) [ 102.496453] [<c05ad308>] (device_shutdown) from [<c01441d4>] (kernel_restart_prepare+0x3c/0x48) [ 102.505200] r10:00000058 r9:01234567 r8:00000010 r7:c353c000 r6:4321fedc r5:c11168ec [ 102.513066] r4:00000000 [ 102.515642] [<c0144198>] (kernel_restart_prepare) from [<c01442f4>] (kernel_restart+0x1c/0x60) [ 102.524302] [<c01442d8>] (kernel_restart) from [<c01445d8>] (__do_sys_reboot+0x154/0x1e0) [ 102.532521] r5:c11168ec r4:00000000 [ 102.536134] [<c0144484>] (__do_sys_reboot) from [<c01446d4>] (sys_reboot+0x18/0x1c) [ 102.543833] r9:c353c000 r8:c01002c4 r7:00000058 r6:005241c4 r5:00524140 r4:00000000 [ 102.551626] [<c01446bc>] (sys_reboot) from [<c0100060>] (ret_fast_syscall+0x0/0x54) [ 102.559324] Exception stack(0xc353dfa8 to 0xc353dff0) [ 102.564414] dfa0: 00000000 00524140 fee1dead 28121969 01234567 00000010 [ 102.572641] dfc0: 00000000 00524140 005241c4 00000058 beddbefc 0044b1a8 b6f39d00 b6f3a010 [ 102.580864] dfe0: 00523b5c beddbc90 004dadf4 b6e584c8 [ 102.585947] ---[ end trace adc766c58fa66350 ]--- Change-Id: Ic0603d4d00528dc6b5ef6d480b15d3c14585dec3 Signed-off-by: Simon Xue <xxm@rock-chips.com>
This commit is contained in:
@@ -1960,12 +1960,16 @@ static void rk_iommu_shutdown(struct platform_device *pdev)
|
||||
struct rk_iommu *iommu = platform_get_drvdata(pdev);
|
||||
int i;
|
||||
|
||||
if (iommu->skip_read)
|
||||
goto skip_free_irq;
|
||||
|
||||
for (i = 0; i < iommu->num_irq; i++) {
|
||||
int irq = platform_get_irq(pdev, i);
|
||||
|
||||
devm_free_irq(iommu->dev, irq, iommu);
|
||||
}
|
||||
|
||||
skip_free_irq:
|
||||
pm_runtime_force_suspend(&pdev->dev);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user