@@ -38,6 +38,26 @@ static unsigned long hwsp_cacheline(struct intel_timeline *tl)
38
38
return (address + offset_in_page (tl -> hwsp_offset )) / TIMELINE_SEQNO_BYTES ;
39
39
}
40
40
41
+ static int selftest_tl_pin (struct intel_timeline * tl )
42
+ {
43
+ struct i915_gem_ww_ctx ww ;
44
+ int err ;
45
+
46
+ i915_gem_ww_ctx_init (& ww , false);
47
+ retry :
48
+ err = i915_gem_object_lock (tl -> hwsp_ggtt -> obj , & ww );
49
+ if (!err )
50
+ err = intel_timeline_pin (tl , & ww );
51
+
52
+ if (err == - EDEADLK ) {
53
+ err = i915_gem_ww_ctx_backoff (& ww );
54
+ if (!err )
55
+ goto retry ;
56
+ }
57
+ i915_gem_ww_ctx_fini (& ww );
58
+ return err ;
59
+ }
60
+
41
61
/* Only half of seqno's are usable, see __intel_timeline_get_seqno() */
42
62
#define CACHELINES_PER_PAGE (PAGE_SIZE / TIMELINE_SEQNO_BYTES / 2)
43
63
@@ -80,7 +100,7 @@ static int __mock_hwsp_timeline(struct mock_hwsp_freelist *state,
80
100
if (IS_ERR (tl ))
81
101
return PTR_ERR (tl );
82
102
83
- err = intel_timeline_pin (tl , NULL );
103
+ err = selftest_tl_pin (tl );
84
104
if (err ) {
85
105
intel_timeline_put (tl );
86
106
return err ;
@@ -466,7 +486,7 @@ checked_tl_write(struct intel_timeline *tl, struct intel_engine_cs *engine, u32
466
486
struct i915_request * rq ;
467
487
int err ;
468
488
469
- err = intel_timeline_pin (tl , NULL );
489
+ err = selftest_tl_pin (tl );
470
490
if (err ) {
471
491
rq = ERR_PTR (err );
472
492
goto out ;
@@ -666,7 +686,7 @@ static int live_hwsp_wrap(void *arg)
666
686
if (!tl -> has_initial_breadcrumb )
667
687
goto out_free ;
668
688
669
- err = intel_timeline_pin (tl , NULL );
689
+ err = selftest_tl_pin (tl );
670
690
if (err )
671
691
goto out_free ;
672
692
@@ -813,13 +833,13 @@ static int setup_watcher(struct hwsp_watcher *w, struct intel_gt *gt)
813
833
if (IS_ERR (obj ))
814
834
return PTR_ERR (obj );
815
835
816
- w -> map = i915_gem_object_pin_map (obj , I915_MAP_WB );
836
+ w -> map = i915_gem_object_pin_map_unlocked (obj , I915_MAP_WB );
817
837
if (IS_ERR (w -> map )) {
818
838
i915_gem_object_put (obj );
819
839
return PTR_ERR (w -> map );
820
840
}
821
841
822
- vma = i915_gem_object_ggtt_pin_ww (obj , NULL , NULL , 0 , 0 , 0 );
842
+ vma = i915_gem_object_ggtt_pin (obj , NULL , 0 , 0 , 0 );
823
843
if (IS_ERR (vma )) {
824
844
i915_gem_object_put (obj );
825
845
return PTR_ERR (vma );
0 commit comments