mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2026-01-08 18:24:39 +00:00
As virtual_context_destroy() may be called from a request signal, it may be called from inside an irq-off section, and so we need to do a full save/restore of the irq state rather than blindly re-enable irqs upon unlocking. <4> [110.024262] WARNING: inconsistent lock state <4> [110.024277] 5.4.0-rc8-CI-CI_DRM_7489+ #1 Tainted: G U <4> [110.024292] -------------------------------- <4> [110.024305] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. <4> [110.024323] kworker/0:0/5 [HC0[0]:SC0[0]:HE1:SE1] takes: <4> [110.024338] ffff88826a0c7a18 (&(&rq->lock)->rlock){?.-.}, at: i915_request_retire+0x221/0x930 [i915] <4> [110.024592] {IN-HARDIRQ-W} state was registered at: <4> [110.024612] lock_acquire+0xa7/0x1c0 <4> [110.024627] _raw_spin_lock_irqsave+0x33/0x50 <4> [110.024788] intel_engine_breadcrumbs_irq+0x38c/0x600 [i915] <4> [110.024808] irq_work_run_list+0x49/0x70 <4> [110.024824] irq_work_run+0x26/0x50 <4> [110.024839] smp_irq_work_interrupt+0x44/0x1e0 <4> [110.024855] irq_work_interrupt+0xf/0x20 <4> [110.024871] __do_softirq+0xb7/0x47f <4> [110.024885] irq_exit+0xba/0xc0 <4> [110.024898] do_IRQ+0x83/0x160 <4> [110.024910] ret_from_intr+0x0/0x1d <4> [110.024922] irq event stamp: 172864 <4> [110.024938] hardirqs last enabled at (172863): [<ffffffff819ea214>] _raw_spin_unlock_irq+0x24/0x50 <4> [110.024963] hardirqs last disabled at (172864): [<ffffffff819e9fba>] _raw_spin_lock_irq+0xa/0x40 <4> [110.024988] softirqs last enabled at (172812): [<ffffffff81c00385>] __do_softirq+0x385/0x47f <4> [110.025012] softirqs last disabled at (172797): [<ffffffff810b829a>] irq_exit+0xba/0xc0 <4> [110.025031] other info that might help us debug this: <4> [110.025049] Possible unsafe locking scenario: <4> [110.025065] CPU0 <4> [110.025075] ---- <4> [110.025084] lock(&(&rq->lock)->rlock); <4> [110.025099] <Interrupt> <4> [110.025109] lock(&(&rq->lock)->rlock); <4> [110.025124] *** DEADLOCK *** <4> [110.025144] 4 locks held by kworker/0:0/5: <4> [110.025156] #0: ffff88827588f528 ((wq_completion)events){+.+.}, at: process_one_work+0x1de/0x620 <4> [110.025187] #1: ffffc9000006fe78 ((work_completion)(&engine->retire_work)){+.+.}, at: process_one_work+0x1de/0x620 <4> [110.025219] #2: ffff88825605e270 (&kernel#2){+.+.}, at: engine_retire+0x57/0xe0 [i915] <4> [110.025405] #3: ffff88826a0c7a18 (&(&rq->lock)->rlock){?.-.}, at: i915_request_retire+0x221/0x930 [i915] <4> [110.025634] stack backtrace: <4> [110.025653] CPU: 0 PID: 5 Comm: kworker/0:0 Tainted: G U 5.4.0-rc8-CI-CI_DRM_7489+ #1 <4> [110.025675] Hardware name: /NUC7i5BNB, BIOS BNKBL357.86A.0054.2017.1025.1822 10/25/2017 <4> [110.025856] Workqueue: events engine_retire [i915] <4> [110.025872] Call Trace: <4> [110.025891] dump_stack+0x71/0x9b <4> [110.025907] mark_lock+0x49a/0x500 <4> [110.025926] ? print_shortest_lock_dependencies+0x200/0x200 <4> [110.025946] mark_held_locks+0x49/0x70 <4> [110.025962] ? _raw_spin_unlock_irq+0x24/0x50 <4> [110.025978] lockdep_hardirqs_on+0xa2/0x1c0 <4> [110.025995] _raw_spin_unlock_irq+0x24/0x50 <4> [110.026171] virtual_context_destroy+0xc5/0x2e0 [i915] <4> [110.026376] __active_retire+0xb4/0x290 [i915] <4> [110.026396] dma_fence_signal_locked+0x9e/0x1b0 <4> [110.026613] i915_request_retire+0x451/0x930 [i915] <4> [110.026766] retire_requests+0x4d/0x60 [i915] <4> [110.026919] engine_retire+0x63/0xe0 [i915] Fixes: |
||
|---|---|---|
| .. | ||
| display | ||
| gem | ||
| gt | ||
| gvt | ||
| oa | ||
| selftests | ||
| i915_active_types.h | ||
| i915_active.c | ||
| i915_active.h | ||
| i915_buddy.c | ||
| i915_buddy.h | ||
| i915_cmd_parser.c | ||
| i915_debugfs.c | ||
| i915_debugfs.h | ||
| i915_drv.c | ||
| i915_drv.h | ||
| i915_fixed.h | ||
| i915_gem_evict.c | ||
| i915_gem_fence_reg.c | ||
| i915_gem_fence_reg.h | ||
| i915_gem_gtt.c | ||
| i915_gem_gtt.h | ||
| i915_gem.c | ||
| i915_gem.h | ||
| i915_getparam.c | ||
| i915_globals.c | ||
| i915_globals.h | ||
| i915_gpu_error.c | ||
| i915_gpu_error.h | ||
| i915_ioc32.c | ||
| i915_irq.c | ||
| i915_irq.h | ||
| i915_memcpy.c | ||
| i915_memcpy.h | ||
| i915_mm.c | ||
| i915_params.c | ||
| i915_params.h | ||
| i915_pci.c | ||
| i915_perf_types.h | ||
| i915_perf.c | ||
| i915_perf.h | ||
| i915_pmu.c | ||
| i915_pmu.h | ||
| i915_priolist_types.h | ||
| i915_pvinfo.h | ||
| i915_query.c | ||
| i915_query.h | ||
| i915_reg.h | ||
| i915_request.c | ||
| i915_request.h | ||
| i915_scatterlist.c | ||
| i915_scatterlist.h | ||
| i915_scheduler_types.h | ||
| i915_scheduler.c | ||
| i915_scheduler.h | ||
| i915_selftest.h | ||
| i915_suspend.c | ||
| i915_suspend.h | ||
| i915_sw_fence_work.c | ||
| i915_sw_fence_work.h | ||
| i915_sw_fence.c | ||
| i915_sw_fence.h | ||
| i915_switcheroo.c | ||
| i915_switcheroo.h | ||
| i915_syncmap.c | ||
| i915_syncmap.h | ||
| i915_sysfs.c | ||
| i915_sysfs.h | ||
| i915_trace_points.c | ||
| i915_trace.h | ||
| i915_user_extensions.c | ||
| i915_user_extensions.h | ||
| i915_utils.c | ||
| i915_utils.h | ||
| i915_vgpu.c | ||
| i915_vgpu.h | ||
| i915_vma.c | ||
| i915_vma.h | ||
| intel_csr.c | ||
| intel_csr.h | ||
| intel_device_info.c | ||
| intel_device_info.h | ||
| intel_gvt.c | ||
| intel_gvt.h | ||
| intel_memory_region.c | ||
| intel_memory_region.h | ||
| intel_pch.c | ||
| intel_pch.h | ||
| intel_pm.c | ||
| intel_pm.h | ||
| intel_region_lmem.c | ||
| intel_region_lmem.h | ||
| intel_runtime_pm.c | ||
| intel_runtime_pm.h | ||
| intel_sideband.c | ||
| intel_sideband.h | ||
| intel_uncore.c | ||
| intel_uncore.h | ||
| intel_wakeref.c | ||
| intel_wakeref.h | ||
| intel_wopcm.c | ||
| intel_wopcm.h | ||
| Kconfig | ||
| Kconfig.debug | ||
| Kconfig.profile | ||
| Kconfig.unstable | ||
| Makefile | ||