mirror of https://github.com/torvalds/linux.git
Although radeon card fence and wait for gpu to finish processing current batch rings, there is still a corner case that radeon lockup work queue may not be fully flushed, and meanwhile the radeon_suspend_kms() function has called pci_set_power_state() to put device in D3hot state. Per PCI spec rev 4.0 on 5.3.1.4.1 D3hot State. > Configuration and Message requests are the only TLPs accepted by a Function in > the D3hot state. All other received Requests must be handled as Unsupported Requests, > and all received Completions may optionally be handled as Unexpected Completions. This issue will happen in following logs: Unable to handle kernel paging request at virtual address 00008800e0008010 CPU 0 kworker/0:3(131): Oops 0 pc = [<ffffffff811bea5c>] ra = [<ffffffff81240844>] ps = 0000 Tainted: G W pc is at si_gpu_check_soft_reset+0x3c/0x240 ra is at si_dma_is_lockup+0x34/0xd0 v0 = 0000000000000000 t0 = fff08800e0008010 t1 = 0000000000010000 t2 = 0000000000008010 t3 = fff00007e3c00000 t4 = fff00007e3c00258 t5 = 000000000000ffff t6 = 0000000000000001 t7 = fff00007ef078000 s0 = fff00007e3c016e8 s1 = fff00007e3c00000 s2 = fff00007e3c00018 s3 = fff00007e3c00000 s4 = fff00007fff59d80 s5 = 0000000000000000 s6 = fff00007ef07bd98 a0 = fff00007e3c00000 a1 = fff00007e3c016e8 a2 = 0000000000000008 a3 = 0000000000000001 a4 = 8f5c28f5c28f5c29 a5 = ffffffff810f4338 t8 = 0000000000000275 t9 = ffffffff809b66f8 t10 = ff6769c5d964b800 t11= 000000000000b886 pv = ffffffff811bea20 at = 0000000000000000 gp = ffffffff81d89690 sp = 00000000aa814126 Disabling lock debugging due to kernel taint Trace: [<ffffffff81240844>] si_dma_is_lockup+0x34/0xd0 [<ffffffff81119610>] radeon_fence_check_lockup+0xd0/0x290 [<ffffffff80977010>] process_one_work+0x280/0x550 [<ffffffff80977350>] worker_thread+0x70/0x7c0 [<ffffffff80977410>] worker_thread+0x130/0x7c0 [<ffffffff80982040>] kthread+0x200/0x210 [<ffffffff809772e0>] worker_thread+0x0/0x7c0 [<ffffffff80981f8c>] kthread+0x14c/0x210 [<ffffffff80911658>] ret_from_kernel_thread+0x18/0x20 [<ffffffff80981e40>] kthread+0x0/0x210 Code: ad3e0008 43f0074a ad7e0018 ad9e0020 8c3001e8 40230101 <88210000> 4821ed21 So force lockup work queue flush to fix this problem. Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Zhenneng Li <lizhenneng@kylinos.cn> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
||
|---|---|---|
| .. | ||
| reg_srcs | ||
| .gitignore | ||
| Kconfig | ||
| Makefile | ||
| ObjectID.h | ||
| atom-bits.h | ||
| atom-names.h | ||
| atom-types.h | ||
| atom.c | ||
| atom.h | ||
| atombios.h | ||
| atombios_crtc.c | ||
| atombios_dp.c | ||
| atombios_encoders.c | ||
| atombios_i2c.c | ||
| avivod.h | ||
| btc_dpm.c | ||
| btc_dpm.h | ||
| btcd.h | ||
| cayman_blit_shaders.h | ||
| ci_dpm.c | ||
| ci_dpm.h | ||
| ci_smc.c | ||
| cik.c | ||
| cik.h | ||
| cik_blit_shaders.h | ||
| cik_reg.h | ||
| cik_sdma.c | ||
| cikd.h | ||
| clearstate_cayman.h | ||
| clearstate_ci.h | ||
| clearstate_defs.h | ||
| clearstate_evergreen.h | ||
| clearstate_si.h | ||
| cypress_dpm.c | ||
| cypress_dpm.h | ||
| dce3_1_afmt.c | ||
| dce6_afmt.c | ||
| dce6_afmt.h | ||
| evergreen.c | ||
| evergreen.h | ||
| evergreen_blit_shaders.h | ||
| evergreen_cs.c | ||
| evergreen_dma.c | ||
| evergreen_hdmi.c | ||
| evergreen_hdmi.h | ||
| evergreen_reg.h | ||
| evergreen_smc.h | ||
| evergreend.h | ||
| kv_dpm.c | ||
| kv_dpm.h | ||
| kv_smc.c | ||
| mkregtable.c | ||
| ni.c | ||
| ni.h | ||
| ni_dma.c | ||
| ni_dpm.c | ||
| ni_dpm.h | ||
| ni_reg.h | ||
| nid.h | ||
| nislands_smc.h | ||
| ppsmc.h | ||
| pptable.h | ||
| r100.c | ||
| r100_track.h | ||
| r100d.h | ||
| r200.c | ||
| r300.c | ||
| r300_reg.h | ||
| r300d.h | ||
| r420.c | ||
| r420d.h | ||
| r500_reg.h | ||
| r520.c | ||
| r520d.h | ||
| r600.c | ||
| r600.h | ||
| r600_cs.c | ||
| r600_dma.c | ||
| r600_dpm.c | ||
| r600_dpm.h | ||
| r600_hdmi.c | ||
| r600_reg.h | ||
| r600d.h | ||
| radeon.h | ||
| radeon_acpi.c | ||
| radeon_acpi.h | ||
| radeon_agp.c | ||
| radeon_asic.c | ||
| radeon_asic.h | ||
| radeon_atombios.c | ||
| radeon_atombios.h | ||
| radeon_atpx_handler.c | ||
| radeon_audio.c | ||
| radeon_audio.h | ||
| radeon_benchmark.c | ||
| radeon_bios.c | ||
| radeon_clocks.c | ||
| radeon_combios.c | ||
| radeon_connectors.c | ||
| radeon_cs.c | ||
| radeon_cursor.c | ||
| radeon_device.c | ||
| radeon_device.h | ||
| radeon_display.c | ||
| radeon_dp_auxch.c | ||
| radeon_dp_mst.c | ||
| radeon_drv.c | ||
| radeon_drv.h | ||
| radeon_encoders.c | ||
| radeon_family.h | ||
| radeon_fb.c | ||
| radeon_fence.c | ||
| radeon_gart.c | ||
| radeon_gem.c | ||
| radeon_i2c.c | ||
| radeon_ib.c | ||
| radeon_irq_kms.c | ||
| radeon_kms.c | ||
| radeon_kms.h | ||
| radeon_legacy_crtc.c | ||
| radeon_legacy_encoders.c | ||
| radeon_legacy_encoders.h | ||
| radeon_legacy_tv.c | ||
| radeon_mn.c | ||
| radeon_mode.h | ||
| radeon_object.c | ||
| radeon_object.h | ||
| radeon_pm.c | ||
| radeon_pm.h | ||
| radeon_prime.c | ||
| radeon_prime.h | ||
| radeon_reg.h | ||
| radeon_ring.c | ||
| radeon_sa.c | ||
| radeon_semaphore.c | ||
| radeon_sync.c | ||
| radeon_test.c | ||
| radeon_trace.h | ||
| radeon_trace_points.c | ||
| radeon_ttm.c | ||
| radeon_ttm.h | ||
| radeon_ucode.c | ||
| radeon_ucode.h | ||
| radeon_uvd.c | ||
| radeon_vce.c | ||
| radeon_vm.c | ||
| rs100d.h | ||
| rs400.c | ||
| rs400d.h | ||
| rs600.c | ||
| rs600d.h | ||
| rs690.c | ||
| rs690d.h | ||
| rs780_dpm.c | ||
| rs780_dpm.h | ||
| rs780d.h | ||
| rv6xx_dpm.c | ||
| rv6xx_dpm.h | ||
| rv6xxd.h | ||
| rv200d.h | ||
| rv250d.h | ||
| rv350d.h | ||
| rv515.c | ||
| rv515d.h | ||
| rv730_dpm.c | ||
| rv730d.h | ||
| rv740_dpm.c | ||
| rv740d.h | ||
| rv770.c | ||
| rv770.h | ||
| rv770_dma.c | ||
| rv770_dpm.c | ||
| rv770_dpm.h | ||
| rv770_smc.c | ||
| rv770_smc.h | ||
| rv770d.h | ||
| si.c | ||
| si.h | ||
| si_blit_shaders.h | ||
| si_dma.c | ||
| si_dpm.c | ||
| si_dpm.h | ||
| si_reg.h | ||
| si_smc.c | ||
| sid.h | ||
| sislands_smc.h | ||
| smu7.h | ||
| smu7_discrete.h | ||
| smu7_fusion.h | ||
| sumo_dpm.c | ||
| sumo_dpm.h | ||
| sumo_smc.c | ||
| sumod.h | ||
| trinity_dpm.c | ||
| trinity_dpm.h | ||
| trinity_smc.c | ||
| trinityd.h | ||
| uvd_v1_0.c | ||
| uvd_v2_2.c | ||
| uvd_v3_1.c | ||
| uvd_v4_2.c | ||
| vce.h | ||
| vce_v1_0.c | ||
| vce_v2_0.c | ||