mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-17 07:36:50 +07:00
2383a767c0
Vega10 has multiple interrupt rings, so this can be called from multiple calles at the same time resulting in: [ 71.779334] ================================ [ 71.779406] WARNING: inconsistent lock state [ 71.779478] 4.19.0-rc1+ #44 Tainted: G W [ 71.779565] -------------------------------- [ 71.779637] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. [ 71.779740] kworker/6:1/120 [HC0[0]:SC0[0]:HE1:SE1] takes: [ 71.779832] 00000000ad761971 (&(&kfd->interrupt_lock)->rlock){?...}, at: kgd2kfd_interrupt+0x75/0x100 [amdgpu] [ 71.780058] {IN-HARDIRQ-W} state was registered at: [ 71.780115] _raw_spin_lock+0x2c/0x40 [ 71.780180] kgd2kfd_interrupt+0x75/0x100 [amdgpu] [ 71.780248] amdgpu_irq_callback+0x6c/0x150 [amdgpu] [ 71.780315] amdgpu_ih_process+0x88/0x100 [amdgpu] [ 71.780380] amdgpu_irq_handler+0x20/0x40 [amdgpu] [ 71.780409] __handle_irq_event_percpu+0x49/0x2a0 [ 71.780436] handle_irq_event_percpu+0x30/0x70 [ 71.780461] handle_irq_event+0x37/0x60 [ 71.780484] handle_edge_irq+0x83/0x1b0 [ 71.780506] handle_irq+0x1f/0x30 [ 71.780526] do_IRQ+0x53/0x110 [ 71.780544] ret_from_intr+0x0/0x22 [ 71.780566] cpuidle_enter_state+0xaa/0x330 [ 71.780591] do_idle+0x203/0x280 [ 71.780610] cpu_startup_entry+0x6f/0x80 [ 71.780634] start_secondary+0x1b0/0x200 [ 71.780657] secondary_startup_64+0xa4/0xb0 Fix this by always using irq save spin locks. Signed-off-by: Christian König <christian.koenig@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
||
---|---|---|
.. | ||
cik_event_interrupt.c | ||
cik_int.h | ||
cik_regs.h | ||
cwsr_trap_handler_gfx8.asm | ||
cwsr_trap_handler_gfx9.asm | ||
cwsr_trap_handler.h | ||
Kconfig | ||
kfd_chardev.c | ||
kfd_crat.c | ||
kfd_crat.h | ||
kfd_dbgdev.c | ||
kfd_dbgdev.h | ||
kfd_dbgmgr.c | ||
kfd_dbgmgr.h | ||
kfd_debugfs.c | ||
kfd_device_queue_manager_cik.c | ||
kfd_device_queue_manager_v9.c | ||
kfd_device_queue_manager_vi.c | ||
kfd_device_queue_manager.c | ||
kfd_device_queue_manager.h | ||
kfd_device.c | ||
kfd_doorbell.c | ||
kfd_events.c | ||
kfd_events.h | ||
kfd_flat_memory.c | ||
kfd_int_process_v9.c | ||
kfd_interrupt.c | ||
kfd_iommu.c | ||
kfd_iommu.h | ||
kfd_kernel_queue_cik.c | ||
kfd_kernel_queue_v9.c | ||
kfd_kernel_queue_vi.c | ||
kfd_kernel_queue.c | ||
kfd_kernel_queue.h | ||
kfd_module.c | ||
kfd_mqd_manager_cik.c | ||
kfd_mqd_manager_v9.c | ||
kfd_mqd_manager_vi.c | ||
kfd_mqd_manager.c | ||
kfd_mqd_manager.h | ||
kfd_packet_manager.c | ||
kfd_pasid.c | ||
kfd_pm4_headers_ai.h | ||
kfd_pm4_headers_diq.h | ||
kfd_pm4_headers_vi.h | ||
kfd_pm4_headers.h | ||
kfd_pm4_opcodes.h | ||
kfd_priv.h | ||
kfd_process_queue_manager.c | ||
kfd_process.c | ||
kfd_queue.c | ||
kfd_topology.c | ||
kfd_topology.h | ||
Makefile | ||
soc15_int.h |