The source project of this merge request has been removed.
drm/xe: Defer unpin until BO destroy for PTs
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