Skip to content

drm/xe: Defer unpin until BO destroy for PTs

Matthew Brost requested to merge (removed):defer_unpin into xe

Avoid sleeping undert the notifer lock:

[   89.094547] [IGT] xe_exec_basic: starting subtest many-engines-bindengine-userptr-invalidate
[   89.149944] BUG: sleeping function called from invalid context at mm/vmalloc.c:2808
[   89.157661] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1581, name: kworker/u16:4
[   89.166161] preempt_count: 1, expected: 0
[   89.170213] RCU nest depth: 0, expected: 0
[   89.174352] 6 locks held by kworker/u16:4/1581:
[   89.178926]  #0: ffff888100079d38 ((wq_completion)events_unbound){+.+.}-{0:0}, at: process_one_work+0x1eb/0x5b0
[   89.189075]  #1: ffffc90001c47e78 ((work_completion)(&vm->async_ops.work)){+.+.}-{0:0}, at: process_one_work+0x1eb/0x5b0
[   89.200020]  #2: ffff88810a6389c0 (&vm->lock){++++}-{3:3}, at: async_op_work_func+0x19e/0x430 [xe]
[   89.209045]  #3: ffffc90001c47d58 (reservation_ww_class_acquire){+.+.}-{0:0}, at: vm_bind_ioctl.isra.30+0x1ed/0xb40 [xe]
[   89.219976]  #4: ffff88810a638888 (reservation_ww_class_mutex){+.+.}-{3:3}, at: ttm_eu_reserve_buffers+0x2df/0x4f0
[   89.230375]  #5: ffff88810a638b90 (&vm->userptr.notifier_lock){++++}-{2:2}, at: xe_pt_userptr_pre_commit+0x53/0x90 [xe]
[   89.241219] Preemption disabled at:
[   89.241221] [<0000000000000000>] 0x0
[   89.248365] CPU: 5 PID: 1581 Comm: kworker/u16:4 Tainted: G        W          6.1.0-rc1-xe+ #3509
[   89.257270] Hardware name: Intel Corporation Tiger Lake Client Platform/TigerLake U DDR4 SODIMM RVP, BIOS TGLSFWI1.R00.3243.A01.2006102133 06/10/2020
[   89.270698] Workqueue: events_unbound async_op_work_func [xe]
[   89.276491] Call Trace:
[   89.278971]  <TASK>
[   89.281103]  dump_stack_lvl+0x56/0x7f
[   89.284802]  __might_resched.cold.165+0xf4/0x12f
[   89.289461]  vunmap+0x23/0x40
[   89.292459]  ttm_bo_vunmap+0x3b/0xe0
[   89.296067]  xe_bo_unpin+0x91/0xb0 [xe]
[   89.299946]  xe_pt_destroy+0x3a/0x100 [xe]
[   89.304084]  __xe_pt_unbind_vma+0x2d1/0x360 [xe]
[   89.308753]  ? mark_held_locks+0x48/0x80
[   89.312716]  ? _raw_spin_unlock_irqrestore+0x54/0x70
[   89.317714]  ? lockdep_hardirqs_on+0xbf/0x140
[   89.322108]  ? _raw_spin_unlock_irqrestore+0x3d/0x70
[   89.327104]  ? dma_resv_reserve_fences+0x161/0x320
[   89.331942]  ? vm_bind_ioctl.isra.30+0x465/0xb40 [xe]
[   89.337045]  vm_bind_ioctl.isra.30+0x465/0xb40 [xe]
[   89.341985]  ? async_op_work_func+0x21a/0x430 [xe]
[   89.346819]  ? down_write+0x41/0xd0
[   89.350343]  async_op_work_func+0x21a/0x430 [xe]
[   89.355007]  process_one_work+0x272/0x5b0
[   89.359058]  worker_thread+0x37/0x370
[   89.362753]  ? process_one_work+0x5b0/0x5b0
[   89.366972]  kthread+0xed/0x120
[   89.370151]  ? kthread_complete_and_exit+0x20/0x20
[   89.374980]  ret_from_fork+0x1f/0x30
[   89.378598]  </TASK>

Signed-off-by: Matthew Brost matthew.brost@intel.com

Merge request reports