drm/xe: Change notifier lock to semaphore
We need to be able to sleep:
[ 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 (closed): ffffc90001c47e78 ((work_completion)(&vm->async_ops.work)){+.+.}-{0:0}, at: process_one_work+0x1eb/0x5b0 [ 89.200020] #2 (closed): ffff88810a6389c0 (&vm->lock)++-{3:3}, at: async_op_work_func+0x19e/0x430 [xe] [ 89.209045] #3 (closed): ffffc90001c47d58 (reservation_ww_class_acquire){+.+.}-{0:0}, at: vm_bind_ioctl.isra.30+0x1ed/0xb40 [xe] [ 89.219976] #4 (closed): 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] [ 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]
Signed-off-by: Matthew Brost matthew.brost@intel.com