Skip to content

Commit 2a66596

Browse files
mlankhorstdanvet
authored andcommitted
drm/i915: Move pinning to inside engine_wa_list_verify()
This should be done as part of the ww loop, in order to remove a i915_vma_pin that needs ww held. Now only i915_ggtt_pin() callers remaining. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20210323155059.628690-25-maarten.lankhorst@linux.intel.com
1 parent 9fa1f47 commit 2a66596

File tree

7 files changed

+33
-10
lines changed

7 files changed

+33
-10
lines changed

drivers/gpu/drm/i915/gt/intel_gtt.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,6 @@ __vm_create_scratch_for_read(struct i915_address_space *vm, unsigned long size)
427427
{
428428
struct drm_i915_gem_object *obj;
429429
struct i915_vma *vma;
430-
int err;
431430

432431
obj = i915_gem_object_create_internal(vm->i915, PAGE_ALIGN(size));
433432
if (IS_ERR(obj))
@@ -441,6 +440,19 @@ __vm_create_scratch_for_read(struct i915_address_space *vm, unsigned long size)
441440
return vma;
442441
}
443442

443+
return vma;
444+
}
445+
446+
struct i915_vma *
447+
__vm_create_scratch_for_read_pinned(struct i915_address_space *vm, unsigned long size)
448+
{
449+
struct i915_vma *vma;
450+
int err;
451+
452+
vma = __vm_create_scratch_for_read(vm, size);
453+
if (IS_ERR(vma))
454+
return vma;
455+
444456
err = i915_vma_pin(vma, 0, 0,
445457
i915_vma_is_ggtt(vma) ? PIN_GLOBAL : PIN_USER);
446458
if (err) {

drivers/gpu/drm/i915/gt/intel_gtt.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,9 @@ void i915_vm_free_pt_stash(struct i915_address_space *vm,
576576
struct i915_vma *
577577
__vm_create_scratch_for_read(struct i915_address_space *vm, unsigned long size);
578578

579+
struct i915_vma *
580+
__vm_create_scratch_for_read_pinned(struct i915_address_space *vm, unsigned long size);
581+
579582
static inline struct sgt_dma {
580583
struct scatterlist *sg;
581584
dma_addr_t dma, max;

drivers/gpu/drm/i915/gt/intel_workarounds.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2213,10 +2213,15 @@ static int engine_wa_list_verify(struct intel_context *ce,
22132213
if (err)
22142214
goto err_pm;
22152215

2216+
err = i915_vma_pin_ww(vma, &ww, 0, 0,
2217+
i915_vma_is_ggtt(vma) ? PIN_GLOBAL : PIN_USER);
2218+
if (err)
2219+
goto err_unpin;
2220+
22162221
rq = i915_request_create(ce);
22172222
if (IS_ERR(rq)) {
22182223
err = PTR_ERR(rq);
2219-
goto err_unpin;
2224+
goto err_vma;
22202225
}
22212226

22222227
err = i915_request_await_object(rq, vma->obj, true);
@@ -2257,6 +2262,8 @@ static int engine_wa_list_verify(struct intel_context *ce,
22572262

22582263
err_rq:
22592264
i915_request_put(rq);
2265+
err_vma:
2266+
i915_vma_unpin(vma);
22602267
err_unpin:
22612268
intel_context_unpin(ce);
22622269
err_pm:
@@ -2267,7 +2274,6 @@ static int engine_wa_list_verify(struct intel_context *ce,
22672274
}
22682275
i915_gem_ww_ctx_fini(&ww);
22692276
intel_engine_pm_put(ce->engine);
2270-
i915_vma_unpin(vma);
22712277
i915_vma_put(vma);
22722278
return err;
22732279
}

drivers/gpu/drm/i915/gt/selftest_execlists.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4197,8 +4197,9 @@ static int preserved_virtual_engine(struct intel_gt *gt,
41974197
int err = 0;
41984198
u32 *cs;
41994199

4200-
scratch = __vm_create_scratch_for_read(&siblings[0]->gt->ggtt->vm,
4201-
PAGE_SIZE);
4200+
scratch =
4201+
__vm_create_scratch_for_read_pinned(&siblings[0]->gt->ggtt->vm,
4202+
PAGE_SIZE);
42024203
if (IS_ERR(scratch))
42034204
return PTR_ERR(scratch);
42044205

drivers/gpu/drm/i915/gt/selftest_lrc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
static struct i915_vma *create_scratch(struct intel_gt *gt)
2929
{
30-
return __vm_create_scratch_for_read(&gt->ggtt->vm, PAGE_SIZE);
30+
return __vm_create_scratch_for_read_pinned(&gt->ggtt->vm, PAGE_SIZE);
3131
}
3232

3333
static bool is_active(struct i915_request *rq)

drivers/gpu/drm/i915/gt/selftest_mocs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ static int live_mocs_init(struct live_mocs *arg, struct intel_gt *gt)
7575
if (flags & (HAS_GLOBAL_MOCS | HAS_ENGINE_MOCS))
7676
arg->mocs = table;
7777

78-
arg->scratch = __vm_create_scratch_for_read(&gt->ggtt->vm, PAGE_SIZE);
78+
arg->scratch =
79+
__vm_create_scratch_for_read_pinned(&gt->ggtt->vm, PAGE_SIZE);
7980
if (IS_ERR(arg->scratch))
8081
return PTR_ERR(arg->scratch);
8182

drivers/gpu/drm/i915/gt/selftest_workarounds.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ static int check_dirty_whitelist(struct intel_context *ce)
490490
u32 *cs, *results;
491491

492492
sz = (2 * ARRAY_SIZE(values) + 1) * sizeof(u32);
493-
scratch = __vm_create_scratch_for_read(ce->vm, sz);
493+
scratch = __vm_create_scratch_for_read_pinned(ce->vm, sz);
494494
if (IS_ERR(scratch))
495495
return PTR_ERR(scratch);
496496

@@ -1030,14 +1030,14 @@ static int live_isolated_whitelist(void *arg)
10301030

10311031
for (i = 0; i < ARRAY_SIZE(client); i++) {
10321032
client[i].scratch[0] =
1033-
__vm_create_scratch_for_read(gt->vm, 4096);
1033+
__vm_create_scratch_for_read_pinned(gt->vm, 4096);
10341034
if (IS_ERR(client[i].scratch[0])) {
10351035
err = PTR_ERR(client[i].scratch[0]);
10361036
goto err;
10371037
}
10381038

10391039
client[i].scratch[1] =
1040-
__vm_create_scratch_for_read(gt->vm, 4096);
1040+
__vm_create_scratch_for_read_pinned(gt->vm, 4096);
10411041
if (IS_ERR(client[i].scratch[1])) {
10421042
err = PTR_ERR(client[i].scratch[1]);
10431043
i915_vma_unpin_and_release(&client[i].scratch[0], 0);

0 commit comments

Comments
 (0)