6f24e41022
We mark the vma as active while binding it in order to protect outselves
from being shrunk under mempressure. This only works if we are strict in
not attempting to shrink active objects.
<6> [472.618968] Workqueue: events_unbound fence_work [i915]
<4> [472.618970] Call Trace:
<4> [472.618974] ? __schedule+0x2e5/0x810
<4> [472.618978] schedule+0x37/0xe0
<4> [472.618982] schedule_preempt_disabled+0xf/0x20
<4> [472.618984] __mutex_lock+0x281/0x9c0
<4> [472.618987] ? mark_held_locks+0x49/0x70
<4> [472.618989] ? _raw_spin_unlock_irqrestore+0x47/0x60
<4> [472.619038] ? i915_vma_unbind+0xae/0x110 [i915]
<4> [472.619084] ? i915_vma_unbind+0xae/0x110 [i915]
<4> [472.619122] i915_vma_unbind+0xae/0x110 [i915]
<4> [472.619165] i915_gem_object_unbind+0x1dc/0x400 [i915]
<4> [472.619208] i915_gem_shrink+0x328/0x660 [i915]
<4> [472.619250] ? i915_gem_shrink_all+0x38/0x60 [i915]
<4> [472.619282] i915_gem_shrink_all+0x38/0x60 [i915]
<4> [472.619325] vm_alloc_page.constprop.25+0x1aa/0x240 [i915]
<4> [472.619330] ? rcu_read_lock_sched_held+0x4d/0x80
<4> [472.619363] ? __alloc_pd+0xb/0x30 [i915]
<4> [472.619366] ? module_assert_mutex_or_preempt+0xf/0x30
<4> [472.619368] ? __module_address+0x23/0xe0
<4> [472.619371] ? is_module_address+0x26/0x40
<4> [472.619374] ? static_obj+0x34/0x50
<4> [472.619376] ? lockdep_init_map+0x4d/0x1e0
<4> [472.619407] setup_page_dma+0xd/0x90 [i915]
<4> [472.619437] alloc_pd+0x29/0x50 [i915]
<4> [472.619470] __gen8_ppgtt_alloc+0x443/0x6b0 [i915]
<4> [472.619503] gen8_ppgtt_alloc+0xd7/0x300 [i915]
<4> [472.619535] ppgtt_bind_vma+0x2a/0xe0 [i915]
<4> [472.619577] __vma_bind+0x26/0x40 [i915]
<4> [472.619611] fence_work+0x1c/0x90 [i915]
<4> [472.619617] process_one_work+0x26a/0x620
Fixes:
|
||
---|---|---|
.. | ||
display | ||
gem | ||
gt | ||
gvt | ||
oa | ||
selftests | ||
.gitignore | ||
i915_active_types.h | ||
i915_active.c | ||
i915_active.h | ||
i915_buddy.c | ||
i915_buddy.h | ||
i915_cmd_parser.c | ||
i915_debugfs_params.c | ||
i915_debugfs_params.h | ||
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_types.h | ||
i915_vma.c | ||
i915_vma.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 | ||
vlv_suspend.c | ||
vlv_suspend.h |