Lines Matching refs:ce
30 struct intel_context *ce = container_of(rcu, typeof(*ce), rcu); in rcu_context_free() local
32 kmem_cache_free(global.slab_ce, ce); in rcu_context_free()
35 void intel_context_free(struct intel_context *ce) in intel_context_free() argument
37 call_rcu(&ce->rcu, rcu_context_free); in intel_context_free()
43 struct intel_context *ce; in intel_context_create() local
45 ce = intel_context_alloc(); in intel_context_create()
46 if (!ce) in intel_context_create()
49 intel_context_init(ce, engine); in intel_context_create()
50 return ce; in intel_context_create()
53 int intel_context_alloc_state(struct intel_context *ce) in intel_context_alloc_state() argument
57 if (mutex_lock_interruptible(&ce->pin_mutex)) in intel_context_alloc_state()
60 if (!test_bit(CONTEXT_ALLOC_BIT, &ce->flags)) { in intel_context_alloc_state()
61 if (intel_context_is_banned(ce)) { in intel_context_alloc_state()
66 err = ce->ops->alloc(ce); in intel_context_alloc_state()
70 set_bit(CONTEXT_ALLOC_BIT, &ce->flags); in intel_context_alloc_state()
74 mutex_unlock(&ce->pin_mutex); in intel_context_alloc_state()
78 static int intel_context_active_acquire(struct intel_context *ce) in intel_context_active_acquire() argument
82 __i915_active_acquire(&ce->active); in intel_context_active_acquire()
84 if (intel_context_is_barrier(ce)) in intel_context_active_acquire()
88 err = i915_active_acquire_preallocate_barrier(&ce->active, in intel_context_active_acquire()
89 ce->engine); in intel_context_active_acquire()
91 i915_active_release(&ce->active); in intel_context_active_acquire()
96 static void intel_context_active_release(struct intel_context *ce) in intel_context_active_release() argument
99 i915_active_acquire_barrier(&ce->active); in intel_context_active_release()
100 i915_active_release(&ce->active); in intel_context_active_release()
163 static int intel_context_pre_pin(struct intel_context *ce, in intel_context_pre_pin() argument
168 CE_TRACE(ce, "active\n"); in intel_context_pre_pin()
170 err = __ring_active(ce->ring, ww); in intel_context_pre_pin()
174 err = intel_timeline_pin(ce->timeline, ww); in intel_context_pre_pin()
178 if (!ce->state) in intel_context_pre_pin()
181 err = __context_pin_state(ce->state, ww); in intel_context_pre_pin()
189 intel_timeline_unpin(ce->timeline); in intel_context_pre_pin()
191 __ring_retire(ce->ring); in intel_context_pre_pin()
195 static void intel_context_post_unpin(struct intel_context *ce) in intel_context_post_unpin() argument
197 if (ce->state) in intel_context_post_unpin()
198 __context_unpin_state(ce->state); in intel_context_post_unpin()
200 intel_timeline_unpin(ce->timeline); in intel_context_post_unpin()
201 __ring_retire(ce->ring); in intel_context_post_unpin()
204 int __intel_context_do_pin_ww(struct intel_context *ce, in __intel_context_do_pin_ww() argument
211 if (unlikely(!test_bit(CONTEXT_ALLOC_BIT, &ce->flags))) { in __intel_context_do_pin_ww()
212 err = intel_context_alloc_state(ce); in __intel_context_do_pin_ww()
223 err = i915_gem_object_lock(ce->timeline->hwsp_ggtt->obj, ww); in __intel_context_do_pin_ww()
224 if (!err && ce->ring->vma->obj) in __intel_context_do_pin_ww()
225 err = i915_gem_object_lock(ce->ring->vma->obj, ww); in __intel_context_do_pin_ww()
226 if (!err && ce->state) in __intel_context_do_pin_ww()
227 err = i915_gem_object_lock(ce->state->obj, ww); in __intel_context_do_pin_ww()
229 err = intel_context_pre_pin(ce, ww); in __intel_context_do_pin_ww()
233 err = i915_active_acquire(&ce->active); in __intel_context_do_pin_ww()
237 err = ce->ops->pre_pin(ce, ww, &vaddr); in __intel_context_do_pin_ww()
241 err = mutex_lock_interruptible(&ce->pin_mutex); in __intel_context_do_pin_ww()
245 if (unlikely(intel_context_is_closed(ce))) { in __intel_context_do_pin_ww()
250 if (likely(!atomic_add_unless(&ce->pin_count, 1, 0))) { in __intel_context_do_pin_ww()
251 err = intel_context_active_acquire(ce); in __intel_context_do_pin_ww()
255 err = ce->ops->pin(ce, vaddr); in __intel_context_do_pin_ww()
257 intel_context_active_release(ce); in __intel_context_do_pin_ww()
261 CE_TRACE(ce, "pin ring:{start:%08x, head:%04x, tail:%04x}\n", in __intel_context_do_pin_ww()
262 i915_ggtt_offset(ce->ring->vma), in __intel_context_do_pin_ww()
263 ce->ring->head, ce->ring->tail); in __intel_context_do_pin_ww()
267 atomic_inc(&ce->pin_count); in __intel_context_do_pin_ww()
270 GEM_BUG_ON(!intel_context_is_pinned(ce)); /* no overflow! */ in __intel_context_do_pin_ww()
273 mutex_unlock(&ce->pin_mutex); in __intel_context_do_pin_ww()
276 ce->ops->post_unpin(ce); in __intel_context_do_pin_ww()
278 i915_active_release(&ce->active); in __intel_context_do_pin_ww()
280 intel_context_post_unpin(ce); in __intel_context_do_pin_ww()
288 i915_gem_ww_unlock_single(ce->timeline->hwsp_ggtt->obj); in __intel_context_do_pin_ww()
293 int __intel_context_do_pin(struct intel_context *ce) in __intel_context_do_pin() argument
300 err = __intel_context_do_pin_ww(ce, &ww); in __intel_context_do_pin()
310 void intel_context_unpin(struct intel_context *ce) in intel_context_unpin() argument
312 if (!atomic_dec_and_test(&ce->pin_count)) in intel_context_unpin()
315 CE_TRACE(ce, "unpin\n"); in intel_context_unpin()
316 ce->ops->unpin(ce); in intel_context_unpin()
317 ce->ops->post_unpin(ce); in intel_context_unpin()
325 intel_context_get(ce); in intel_context_unpin()
326 intel_context_active_release(ce); in intel_context_unpin()
327 intel_context_put(ce); in intel_context_unpin()
333 struct intel_context *ce = container_of(active, typeof(*ce), active); in __intel_context_retire() local
335 CE_TRACE(ce, "retire runtime: { total:%lluns, avg:%lluns }\n", in __intel_context_retire()
336 intel_context_get_total_runtime_ns(ce), in __intel_context_retire()
337 intel_context_get_avg_runtime_ns(ce)); in __intel_context_retire()
339 set_bit(CONTEXT_VALID_BIT, &ce->flags); in __intel_context_retire()
340 intel_context_post_unpin(ce); in __intel_context_retire()
341 intel_context_put(ce); in __intel_context_retire()
346 struct intel_context *ce = container_of(active, typeof(*ce), active); in __intel_context_active() local
348 intel_context_get(ce); in __intel_context_active()
351 GEM_WARN_ON(!i915_active_acquire_if_busy(&ce->ring->vma->active)); in __intel_context_active()
352 __intel_ring_pin(ce->ring); in __intel_context_active()
354 __intel_timeline_pin(ce->timeline); in __intel_context_active()
356 if (ce->state) { in __intel_context_active()
357 GEM_WARN_ON(!i915_active_acquire_if_busy(&ce->state->active)); in __intel_context_active()
358 __i915_vma_pin(ce->state); in __intel_context_active()
359 i915_vma_make_unshrinkable(ce->state); in __intel_context_active()
366 intel_context_init(struct intel_context *ce, struct intel_engine_cs *engine) in intel_context_init() argument
371 kref_init(&ce->ref); in intel_context_init()
373 ce->engine = engine; in intel_context_init()
374 ce->ops = engine->cops; in intel_context_init()
375 ce->sseu = engine->sseu; in intel_context_init()
376 ce->ring = __intel_context_ring_size(SZ_4K); in intel_context_init()
378 ewma_runtime_init(&ce->runtime.avg); in intel_context_init()
380 ce->vm = i915_vm_get(engine->gt->vm); in intel_context_init()
383 spin_lock_init(&ce->signal_lock); in intel_context_init()
384 INIT_LIST_HEAD(&ce->signals); in intel_context_init()
386 mutex_init(&ce->pin_mutex); in intel_context_init()
388 i915_active_init(&ce->active, in intel_context_init()
392 void intel_context_fini(struct intel_context *ce) in intel_context_fini() argument
394 if (ce->timeline) in intel_context_fini()
395 intel_timeline_put(ce->timeline); in intel_context_fini()
396 i915_vm_put(ce->vm); in intel_context_fini()
398 mutex_destroy(&ce->pin_mutex); in intel_context_fini()
399 i915_active_fini(&ce->active); in intel_context_fini()
427 void intel_context_enter_engine(struct intel_context *ce) in intel_context_enter_engine() argument
429 intel_engine_pm_get(ce->engine); in intel_context_enter_engine()
430 intel_timeline_enter(ce->timeline); in intel_context_enter_engine()
433 void intel_context_exit_engine(struct intel_context *ce) in intel_context_exit_engine() argument
435 intel_timeline_exit(ce->timeline); in intel_context_exit_engine()
436 intel_engine_pm_put(ce->engine); in intel_context_exit_engine()
439 int intel_context_prepare_remote_request(struct intel_context *ce, in intel_context_prepare_remote_request() argument
442 struct intel_timeline *tl = ce->timeline; in intel_context_prepare_remote_request()
446 GEM_BUG_ON(rq->context == ce); in intel_context_prepare_remote_request()
462 GEM_BUG_ON(i915_active_is_idle(&ce->active)); in intel_context_prepare_remote_request()
463 return i915_active_add_request(&ce->active, rq); in intel_context_prepare_remote_request()
466 struct i915_request *intel_context_create_request(struct intel_context *ce) in intel_context_create_request() argument
474 err = intel_context_pin_ww(ce, &ww); in intel_context_create_request()
476 rq = i915_request_create(ce); in intel_context_create_request()
477 intel_context_unpin(ce); in intel_context_create_request()
496 lockdep_unpin_lock(&ce->timeline->mutex, rq->cookie); in intel_context_create_request()
497 mutex_release(&ce->timeline->mutex.dep_map, _RET_IP_); in intel_context_create_request()
498 mutex_acquire(&ce->timeline->mutex.dep_map, SINGLE_DEPTH_NESTING, 0, _RET_IP_); in intel_context_create_request()
499 rq->cookie = lockdep_pin_lock(&ce->timeline->mutex); in intel_context_create_request()