[Intel-gfx] [PATCH v2 1/2] drm/i915/gtt: grab wakeref in gen6_alloc_va_range
Chris Wilson
chris at chris-wilson.co.uk
Tue May 7 11:36:16 UTC 2019
Quoting Matthew Auld (2019-05-07 11:55:56)
> Some steps in gen6_alloc_va_range require the HW to be awake, so ideally
> we should be grabbing the wakeref ourselves and not relying on the
> caller already holding it for us.
>
> Suggested-by: Chris Wilson <chris at chris-wilson.co.uk>
> Signed-off-by: Matthew Auld <matthew.auld at intel.com>
> ---
> drivers/gpu/drm/i915/i915_gem_gtt.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 8f5db787b7f2..ffb8c3d011e9 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -1745,10 +1745,13 @@ static int gen6_alloc_va_range(struct i915_address_space *vm,
> {
> struct gen6_hw_ppgtt *ppgtt = to_gen6_ppgtt(i915_vm_to_ppgtt(vm));
> struct i915_page_table *pt;
> + intel_wakeref_t wakeref;
> u64 from = start;
> unsigned int pde;
> bool flush = false;
>
> + wakeref = intel_runtime_pm_get(vm->i915);
> +
> gen6_for_each_pde(pt, &ppgtt->base.pd, start, length, pde) {
> const unsigned int count = gen6_pte_count(start, length);
>
> @@ -1774,12 +1777,15 @@ static int gen6_alloc_va_range(struct i915_address_space *vm,
>
> if (flush) {
> mark_tlbs_dirty(&ppgtt->base);
> - gen6_ggtt_invalidate(ppgtt->base.vm.i915);
> + gen6_ggtt_invalidate(vm->i915);
> }
>
> + intel_runtime_pm_put(vm->i915, wakeref);
> +
> return 0;
>
> unwind_out:
> + intel_runtime_pm_put(vm->i915, wakeref);
> gen6_ppgtt_clear_range(vm, from, start - from);
> return -ENOMEM;
Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
It's a bit too fiddly here to try and defer it until the next time the
HW is awake -- and really if we are adjusting the iova, then we are
going to be using the HW, and normally would be under a longterm wakeref
(e.g. execbuf) but for in-kernel clients, we need to be more precise.
-Chris
More information about the Intel-gfx
mailing list