mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-16 17:45:01 -05:00
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
This commit is contained in:
committed by
Daniel Vetter
parent
9fa1f4785f
commit
2a66596838
@@ -427,7 +427,6 @@ __vm_create_scratch_for_read(struct i915_address_space *vm, unsigned long size)
|
||||
{
|
||||
struct drm_i915_gem_object *obj;
|
||||
struct i915_vma *vma;
|
||||
int err;
|
||||
|
||||
obj = i915_gem_object_create_internal(vm->i915, PAGE_ALIGN(size));
|
||||
if (IS_ERR(obj))
|
||||
@@ -441,6 +440,19 @@ __vm_create_scratch_for_read(struct i915_address_space *vm, unsigned long size)
|
||||
return vma;
|
||||
}
|
||||
|
||||
return vma;
|
||||
}
|
||||
|
||||
struct i915_vma *
|
||||
__vm_create_scratch_for_read_pinned(struct i915_address_space *vm, unsigned long size)
|
||||
{
|
||||
struct i915_vma *vma;
|
||||
int err;
|
||||
|
||||
vma = __vm_create_scratch_for_read(vm, size);
|
||||
if (IS_ERR(vma))
|
||||
return vma;
|
||||
|
||||
err = i915_vma_pin(vma, 0, 0,
|
||||
i915_vma_is_ggtt(vma) ? PIN_GLOBAL : PIN_USER);
|
||||
if (err) {
|
||||
|
||||
@@ -576,6 +576,9 @@ void i915_vm_free_pt_stash(struct i915_address_space *vm,
|
||||
struct i915_vma *
|
||||
__vm_create_scratch_for_read(struct i915_address_space *vm, unsigned long size);
|
||||
|
||||
struct i915_vma *
|
||||
__vm_create_scratch_for_read_pinned(struct i915_address_space *vm, unsigned long size);
|
||||
|
||||
static inline struct sgt_dma {
|
||||
struct scatterlist *sg;
|
||||
dma_addr_t dma, max;
|
||||
|
||||
@@ -2213,10 +2213,15 @@ static int engine_wa_list_verify(struct intel_context *ce,
|
||||
if (err)
|
||||
goto err_pm;
|
||||
|
||||
err = i915_vma_pin_ww(vma, &ww, 0, 0,
|
||||
i915_vma_is_ggtt(vma) ? PIN_GLOBAL : PIN_USER);
|
||||
if (err)
|
||||
goto err_unpin;
|
||||
|
||||
rq = i915_request_create(ce);
|
||||
if (IS_ERR(rq)) {
|
||||
err = PTR_ERR(rq);
|
||||
goto err_unpin;
|
||||
goto err_vma;
|
||||
}
|
||||
|
||||
err = i915_request_await_object(rq, vma->obj, true);
|
||||
@@ -2257,6 +2262,8 @@ static int engine_wa_list_verify(struct intel_context *ce,
|
||||
|
||||
err_rq:
|
||||
i915_request_put(rq);
|
||||
err_vma:
|
||||
i915_vma_unpin(vma);
|
||||
err_unpin:
|
||||
intel_context_unpin(ce);
|
||||
err_pm:
|
||||
@@ -2267,7 +2274,6 @@ static int engine_wa_list_verify(struct intel_context *ce,
|
||||
}
|
||||
i915_gem_ww_ctx_fini(&ww);
|
||||
intel_engine_pm_put(ce->engine);
|
||||
i915_vma_unpin(vma);
|
||||
i915_vma_put(vma);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -4197,8 +4197,9 @@ static int preserved_virtual_engine(struct intel_gt *gt,
|
||||
int err = 0;
|
||||
u32 *cs;
|
||||
|
||||
scratch = __vm_create_scratch_for_read(&siblings[0]->gt->ggtt->vm,
|
||||
PAGE_SIZE);
|
||||
scratch =
|
||||
__vm_create_scratch_for_read_pinned(&siblings[0]->gt->ggtt->vm,
|
||||
PAGE_SIZE);
|
||||
if (IS_ERR(scratch))
|
||||
return PTR_ERR(scratch);
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
static struct i915_vma *create_scratch(struct intel_gt *gt)
|
||||
{
|
||||
return __vm_create_scratch_for_read(>->ggtt->vm, PAGE_SIZE);
|
||||
return __vm_create_scratch_for_read_pinned(>->ggtt->vm, PAGE_SIZE);
|
||||
}
|
||||
|
||||
static bool is_active(struct i915_request *rq)
|
||||
|
||||
@@ -75,7 +75,8 @@ static int live_mocs_init(struct live_mocs *arg, struct intel_gt *gt)
|
||||
if (flags & (HAS_GLOBAL_MOCS | HAS_ENGINE_MOCS))
|
||||
arg->mocs = table;
|
||||
|
||||
arg->scratch = __vm_create_scratch_for_read(>->ggtt->vm, PAGE_SIZE);
|
||||
arg->scratch =
|
||||
__vm_create_scratch_for_read_pinned(>->ggtt->vm, PAGE_SIZE);
|
||||
if (IS_ERR(arg->scratch))
|
||||
return PTR_ERR(arg->scratch);
|
||||
|
||||
|
||||
@@ -490,7 +490,7 @@ static int check_dirty_whitelist(struct intel_context *ce)
|
||||
u32 *cs, *results;
|
||||
|
||||
sz = (2 * ARRAY_SIZE(values) + 1) * sizeof(u32);
|
||||
scratch = __vm_create_scratch_for_read(ce->vm, sz);
|
||||
scratch = __vm_create_scratch_for_read_pinned(ce->vm, sz);
|
||||
if (IS_ERR(scratch))
|
||||
return PTR_ERR(scratch);
|
||||
|
||||
@@ -1030,14 +1030,14 @@ static int live_isolated_whitelist(void *arg)
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(client); i++) {
|
||||
client[i].scratch[0] =
|
||||
__vm_create_scratch_for_read(gt->vm, 4096);
|
||||
__vm_create_scratch_for_read_pinned(gt->vm, 4096);
|
||||
if (IS_ERR(client[i].scratch[0])) {
|
||||
err = PTR_ERR(client[i].scratch[0]);
|
||||
goto err;
|
||||
}
|
||||
|
||||
client[i].scratch[1] =
|
||||
__vm_create_scratch_for_read(gt->vm, 4096);
|
||||
__vm_create_scratch_for_read_pinned(gt->vm, 4096);
|
||||
if (IS_ERR(client[i].scratch[1])) {
|
||||
err = PTR_ERR(client[i].scratch[1]);
|
||||
i915_vma_unpin_and_release(&client[i].scratch[0], 0);
|
||||
|
||||
Reference in New Issue
Block a user