mirror of https://gitee.com/openkylin/linux.git
drm/i915/gtt: grab wakeref in gen6_alloc_va_range
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@chris-wilson.co.uk> Signed-off-by: Matthew Auld <matthew.auld@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20190529123108.24422-1-matthew.auld@intel.com
This commit is contained in:
parent
7f5f228008
commit
0a4a6e74e7
|
@ -1749,10 +1749,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);
|
||||
|
||||
|
@ -1778,12 +1781,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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue