Lines Matching full:engine

38 static struct intel_ring *mock_ring(struct intel_engine_cs *engine)  in mock_ring()  argument
76 static struct i915_request *first_request(struct mock_engine *engine) in first_request() argument
78 return list_first_entry_or_null(&engine->hw_queue, in first_request()
89 intel_engine_signal_breadcrumbs(request->engine); in advance()
94 struct mock_engine *engine = from_timer(engine, t, hw_delay); in hw_delay_complete() local
98 spin_lock_irqsave(&engine->hw_lock, flags); in hw_delay_complete()
101 request = first_request(engine); in hw_delay_complete()
109 while ((request = first_request(engine))) { in hw_delay_complete()
111 mod_timer(&engine->hw_delay, in hw_delay_complete()
119 spin_unlock_irqrestore(&engine->hw_lock, flags); in hw_delay_complete()
149 ce->ring = mock_ring(ce->engine); in mock_context_alloc()
153 ce->timeline = intel_timeline_create(ce->engine->gt); in mock_context_alloc()
155 kfree(ce->engine); in mock_context_alloc()
220 struct mock_engine *engine = in mock_submit_request() local
221 container_of(request->engine, typeof(*engine), base); in mock_submit_request()
226 spin_lock_irqsave(&engine->hw_lock, flags); in mock_submit_request()
227 list_add_tail(&request->mock.link, &engine->hw_queue); in mock_submit_request()
228 if (list_is_first(&request->mock.link, &engine->hw_queue)) { in mock_submit_request()
230 mod_timer(&engine->hw_delay, in mock_submit_request()
235 spin_unlock_irqrestore(&engine->hw_lock, flags); in mock_submit_request()
240 lockdep_assert_held(&rq->engine->sched_engine->lock); in mock_add_to_engine()
241 list_move_tail(&rq->sched.link, &rq->engine->sched_engine->requests); in mock_add_to_engine()
246 struct intel_engine_cs *engine, *locked; in mock_remove_from_engine() local
249 * Virtual engines complicate acquiring the engine timeline lock, in mock_remove_from_engine()
250 * as their rq->engine pointer is not stable until under that in mock_remove_from_engine()
251 * engine lock. The simple ploy we use is to take the lock then in mock_remove_from_engine()
252 * check that the rq still belongs to the newly locked engine. in mock_remove_from_engine()
255 locked = READ_ONCE(rq->engine); in mock_remove_from_engine()
257 while (unlikely(locked != (engine = READ_ONCE(rq->engine)))) { in mock_remove_from_engine()
259 spin_lock(&engine->sched_engine->lock); in mock_remove_from_engine()
260 locked = engine; in mock_remove_from_engine()
266 static void mock_reset_prepare(struct intel_engine_cs *engine) in mock_reset_prepare() argument
270 static void mock_reset_rewind(struct intel_engine_cs *engine, bool stalled) in mock_reset_rewind() argument
275 static void mock_reset_cancel(struct intel_engine_cs *engine) in mock_reset_cancel() argument
278 container_of(engine, typeof(*mock), base); in mock_reset_cancel()
284 spin_lock_irqsave(&engine->sched_engine->lock, flags); in mock_reset_cancel()
287 list_for_each_entry(rq, &engine->sched_engine->requests, sched.link) in mock_reset_cancel()
289 intel_engine_signal_breadcrumbs(engine); in mock_reset_cancel()
300 spin_unlock_irqrestore(&engine->sched_engine->lock, flags); in mock_reset_cancel()
303 static void mock_reset_finish(struct intel_engine_cs *engine) in mock_reset_finish() argument
307 static void mock_engine_release(struct intel_engine_cs *engine) in mock_engine_release() argument
310 container_of(engine, typeof(*mock), base); in mock_engine_release()
314 i915_sched_engine_put(engine->sched_engine); in mock_engine_release()
315 intel_breadcrumbs_put(engine->breadcrumbs); in mock_engine_release()
317 intel_context_unpin(engine->kernel_context); in mock_engine_release()
318 intel_context_put(engine->kernel_context); in mock_engine_release()
320 intel_engine_fini_retire(engine); in mock_engine_release()
327 struct mock_engine *engine; in mock_engine() local
332 engine = kzalloc(sizeof(*engine) + PAGE_SIZE, GFP_KERNEL); in mock_engine()
333 if (!engine) in mock_engine()
336 /* minimal engine setup for requests */ in mock_engine()
337 engine->base.i915 = i915; in mock_engine()
338 engine->base.gt = &i915->gt; in mock_engine()
339 engine->base.uncore = i915->gt.uncore; in mock_engine()
340 snprintf(engine->base.name, sizeof(engine->base.name), "%s", name); in mock_engine()
341 engine->base.id = id; in mock_engine()
342 engine->base.mask = BIT(id); in mock_engine()
343 engine->base.legacy_idx = INVALID_ENGINE; in mock_engine()
344 engine->base.instance = id; in mock_engine()
345 engine->base.status_page.addr = (void *)(engine + 1); in mock_engine()
347 engine->base.cops = &mock_context_ops; in mock_engine()
348 engine->base.request_alloc = mock_request_alloc; in mock_engine()
349 engine->base.emit_flush = mock_emit_flush; in mock_engine()
350 engine->base.emit_fini_breadcrumb = mock_emit_breadcrumb; in mock_engine()
351 engine->base.submit_request = mock_submit_request; in mock_engine()
352 engine->base.add_active_request = mock_add_to_engine; in mock_engine()
353 engine->base.remove_active_request = mock_remove_from_engine; in mock_engine()
355 engine->base.reset.prepare = mock_reset_prepare; in mock_engine()
356 engine->base.reset.rewind = mock_reset_rewind; in mock_engine()
357 engine->base.reset.cancel = mock_reset_cancel; in mock_engine()
358 engine->base.reset.finish = mock_reset_finish; in mock_engine()
360 engine->base.release = mock_engine_release; in mock_engine()
362 i915->gt.engine[id] = &engine->base; in mock_engine()
363 i915->gt.engine_class[0][id] = &engine->base; in mock_engine()
366 spin_lock_init(&engine->hw_lock); in mock_engine()
367 timer_setup(&engine->hw_delay, hw_delay_complete, 0); in mock_engine()
368 INIT_LIST_HEAD(&engine->hw_queue); in mock_engine()
370 intel_engine_add_user(&engine->base); in mock_engine()
372 return &engine->base; in mock_engine()
375 int mock_engine_init(struct intel_engine_cs *engine) in mock_engine_init() argument
379 engine->sched_engine = i915_sched_engine_create(ENGINE_MOCK); in mock_engine_init()
380 if (!engine->sched_engine) in mock_engine_init()
382 engine->sched_engine->private_data = engine; in mock_engine_init()
384 intel_engine_init_execlists(engine); in mock_engine_init()
385 intel_engine_init__pm(engine); in mock_engine_init()
386 intel_engine_init_retire(engine); in mock_engine_init()
388 engine->breadcrumbs = intel_breadcrumbs_create(NULL); in mock_engine_init()
389 if (!engine->breadcrumbs) in mock_engine_init()
392 ce = create_kernel_context(engine); in mock_engine_init()
397 engine->status_page.vma = ce->timeline->hwsp_ggtt; in mock_engine_init()
399 engine->kernel_context = ce; in mock_engine_init()
403 intel_breadcrumbs_put(engine->breadcrumbs); in mock_engine_init()
405 i915_sched_engine_put(engine->sched_engine); in mock_engine_init()
409 void mock_engine_flush(struct intel_engine_cs *engine) in mock_engine_flush() argument
412 container_of(engine, typeof(*mock), base); in mock_engine_flush()
423 void mock_engine_reset(struct intel_engine_cs *engine) in mock_engine_reset() argument