Lines Matching +full:everything +full:- +full:else
1 // SPDX-License-Identifier: MIT
18 struct xe_exec_queue *q = pfence->q; in preempt_fence_work_func()
20 if (pfence->error) { in preempt_fence_work_func()
21 dma_fence_set_error(&pfence->base, pfence->error); in preempt_fence_work_func()
22 } else if (!q->ops->reset_status(q)) { in preempt_fence_work_func()
23 int err = q->ops->suspend_wait(q); in preempt_fence_work_func()
26 dma_fence_set_error(&pfence->base, err); in preempt_fence_work_func()
27 } else { in preempt_fence_work_func()
28 dma_fence_set_error(&pfence->base, -ENOENT); in preempt_fence_work_func()
31 dma_fence_signal(&pfence->base); in preempt_fence_work_func()
33 * Opt for keep everything in the fence critical section. This looks really strange since we in preempt_fence_work_func()
35 * global ordered-wq, therefore anything that happens in this callback can easily block in preempt_fence_work_func()
37 * ever signalling. Therefore try to keep everything here in the callback in the fence in preempt_fence_work_func()
38 * critical section. For example if something below grabs a scary lock like vm->lock, in preempt_fence_work_func()
42 xe_vm_queue_rebind_worker(q->vm); in preempt_fence_work_func()
63 struct xe_exec_queue *q = pfence->q; in preempt_fence_enable_signaling()
65 pfence->error = q->ops->suspend(q); in preempt_fence_enable_signaling()
66 queue_work(q->vm->xe->preempt_fence_wq, &pfence->preempt_work); in preempt_fence_enable_signaling()
77 * xe_preempt_fence_alloc() - Allocate a preempt fence with minimal
95 return ERR_PTR(-ENOMEM); in xe_preempt_fence_alloc()
97 INIT_LIST_HEAD(&pfence->link); in xe_preempt_fence_alloc()
98 INIT_WORK(&pfence->preempt_work, preempt_fence_work_func); in xe_preempt_fence_alloc()
104 * xe_preempt_fence_free() - Free a preempt fence allocated using
112 list_del(&pfence->link); in xe_preempt_fence_free()
117 * xe_preempt_fence_arm() - Arm a preempt fence allocated using
122 * @context: The dma-fence context used for arming.
123 * @seqno: The dma-fence seqno used for arming.
135 list_del_init(&pfence->link); in xe_preempt_fence_arm()
136 pfence->q = xe_exec_queue_get(q); in xe_preempt_fence_arm()
137 spin_lock_init(&pfence->lock); in xe_preempt_fence_arm()
138 dma_fence_init(&pfence->base, &preempt_fence_ops, in xe_preempt_fence_arm()
139 &pfence->lock, context, seqno); in xe_preempt_fence_arm()
141 return &pfence->base; in xe_preempt_fence_arm()
145 * xe_preempt_fence_create() - Helper to create and arm a preempt fence.
147 * @context: The dma-fence context used for arming.
148 * @seqno: The dma-fence seqno used for arming.
155 * ERR_PTR(-ENOMEM);
172 return fence->ops == &preempt_fence_ops; in xe_fence_is_xe_preempt()