@@ -69,7 +69,6 @@ static void i915_fence_release(struct dma_fence *fence)
69
69
* caught trying to reuse dead objects.
70
70
*/
71
71
i915_sw_fence_fini (& req -> submit );
72
- i915_sw_fence_fini (& req -> execute );
73
72
74
73
kmem_cache_free (req -> i915 -> requests , req );
75
74
}
@@ -294,7 +293,6 @@ static void i915_gem_request_retire(struct drm_i915_gem_request *request)
294
293
295
294
lockdep_assert_held (& request -> i915 -> drm .struct_mutex );
296
295
GEM_BUG_ON (!i915_sw_fence_signaled (& request -> submit ));
297
- GEM_BUG_ON (!i915_sw_fence_signaled (& request -> execute ));
298
296
GEM_BUG_ON (!i915_gem_request_completed (request ));
299
297
GEM_BUG_ON (!request -> i915 -> gt .active_requests );
300
298
@@ -402,6 +400,8 @@ void __i915_gem_request_submit(struct drm_i915_gem_request *request)
402
400
struct intel_timeline * timeline ;
403
401
u32 seqno ;
404
402
403
+ trace_i915_gem_request_execute (request );
404
+
405
405
/* Transfer from per-context onto the global per-engine timeline */
406
406
timeline = engine -> timeline ;
407
407
GEM_BUG_ON (timeline == request -> timeline );
@@ -426,8 +426,7 @@ void __i915_gem_request_submit(struct drm_i915_gem_request *request)
426
426
list_move_tail (& request -> link , & timeline -> requests );
427
427
spin_unlock (& request -> timeline -> lock );
428
428
429
- i915_sw_fence_commit (& request -> execute );
430
- trace_i915_gem_request_execute (request );
429
+ wake_up_all (& request -> execute );
431
430
}
432
431
433
432
void i915_gem_request_submit (struct drm_i915_gem_request * request )
@@ -463,24 +462,6 @@ submit_notify(struct i915_sw_fence *fence, enum i915_sw_fence_notify state)
463
462
return NOTIFY_DONE ;
464
463
}
465
464
466
- static int __i915_sw_fence_call
467
- execute_notify (struct i915_sw_fence * fence , enum i915_sw_fence_notify state )
468
- {
469
- struct drm_i915_gem_request * request =
470
- container_of (fence , typeof (* request ), execute );
471
-
472
- switch (state ) {
473
- case FENCE_COMPLETE :
474
- break ;
475
-
476
- case FENCE_FREE :
477
- i915_gem_request_put (request );
478
- break ;
479
- }
480
-
481
- return NOTIFY_DONE ;
482
- }
483
-
484
465
/**
485
466
* i915_gem_request_alloc - allocate a request structure
486
467
*
@@ -573,13 +554,7 @@ i915_gem_request_alloc(struct intel_engine_cs *engine,
573
554
574
555
/* We bump the ref for the fence chain */
575
556
i915_sw_fence_init (& i915_gem_request_get (req )-> submit , submit_notify );
576
- i915_sw_fence_init (& i915_gem_request_get (req )-> execute , execute_notify );
577
-
578
- /* Ensure that the execute fence completes after the submit fence -
579
- * as we complete the execute fence from within the submit fence
580
- * callback, its completion would otherwise be visible first.
581
- */
582
- i915_sw_fence_await_sw_fence (& req -> execute , & req -> submit , & req -> execq );
557
+ init_waitqueue_head (& req -> execute );
583
558
584
559
i915_priotree_init (& req -> priotree );
585
560
@@ -1031,6 +1006,7 @@ long i915_wait_request(struct drm_i915_gem_request *req,
1031
1006
TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE ;
1032
1007
wait_queue_head_t * errq = & req -> i915 -> gpu_error .wait_queue ;
1033
1008
DEFINE_WAIT (reset );
1009
+ DEFINE_WAIT (exec );
1034
1010
struct intel_wait wait ;
1035
1011
1036
1012
might_sleep ();
@@ -1052,12 +1028,11 @@ long i915_wait_request(struct drm_i915_gem_request *req,
1052
1028
if (flags & I915_WAIT_LOCKED )
1053
1029
add_wait_queue (errq , & reset );
1054
1030
1055
- if (!i915_sw_fence_done (& req -> execute )) {
1056
- DEFINE_WAIT (exec );
1057
-
1031
+ reset_wait_queue (& req -> execute , & exec );
1032
+ if (!req -> global_seqno ) {
1058
1033
do {
1059
- prepare_to_wait ( & req -> execute . wait , & exec , state );
1060
- if (i915_sw_fence_done ( & req -> execute ) )
1034
+ set_current_state ( state );
1035
+ if (req -> global_seqno )
1061
1036
break ;
1062
1037
1063
1038
if (flags & I915_WAIT_LOCKED &&
@@ -1080,15 +1055,14 @@ long i915_wait_request(struct drm_i915_gem_request *req,
1080
1055
1081
1056
timeout = io_schedule_timeout (timeout );
1082
1057
} while (1 );
1083
- finish_wait (& req -> execute . wait , & exec );
1058
+ finish_wait (& req -> execute , & exec );
1084
1059
1085
1060
if (timeout < 0 )
1086
1061
goto complete ;
1087
1062
1088
- GEM_BUG_ON (!i915_sw_fence_done ( & req -> execute ) );
1063
+ GEM_BUG_ON (!req -> global_seqno );
1089
1064
}
1090
- GEM_BUG_ON (!i915_sw_fence_done (& req -> submit ));
1091
- GEM_BUG_ON (!req -> global_seqno );
1065
+ GEM_BUG_ON (!i915_sw_fence_signaled (& req -> submit ));
1092
1066
1093
1067
/* Optimistic short spin before touching IRQs */
1094
1068
if (i915_spin_request (req , state , 5 ))
0 commit comments