mirror of https://gitee.com/openkylin/linux.git
drm/i915: Only refcount ppgtt if it actually is one
This essentially unbreaks non-ppgtt operation where we'd scribble over random memory. While at it give the vm_to_ppgtt function a proper prefix and make it a bit more paranoid. Reviewed-by: Michel Thierry <michel.thierry@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
4d884705da
commit
841cd77375
|
@ -2512,6 +2512,15 @@ static inline bool i915_is_ggtt(struct i915_address_space *vm)
|
||||||
return vm == ggtt;
|
return vm == ggtt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct i915_hw_ppgtt *
|
||||||
|
i915_vm_to_ppgtt(struct i915_address_space *vm)
|
||||||
|
{
|
||||||
|
WARN_ON(i915_is_ggtt(vm));
|
||||||
|
|
||||||
|
return container_of(vm, struct i915_hw_ppgtt, base);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline bool i915_gem_obj_ggtt_bound(struct drm_i915_gem_object *obj)
|
static inline bool i915_gem_obj_ggtt_bound(struct drm_i915_gem_object *obj)
|
||||||
{
|
{
|
||||||
return i915_gem_obj_bound(obj, obj_to_ggtt(obj));
|
return i915_gem_obj_bound(obj, obj_to_ggtt(obj));
|
||||||
|
@ -2547,7 +2556,6 @@ void i915_gem_object_ggtt_unpin(struct drm_i915_gem_object *obj);
|
||||||
|
|
||||||
/* i915_gem_context.c */
|
/* i915_gem_context.c */
|
||||||
#define ctx_to_ppgtt(ctx) container_of((ctx)->vm, struct i915_hw_ppgtt, base)
|
#define ctx_to_ppgtt(ctx) container_of((ctx)->vm, struct i915_hw_ppgtt, base)
|
||||||
#define vm_to_ppgtt(vm) container_of(vm, struct i915_hw_ppgtt, base)
|
|
||||||
int __must_check i915_gem_context_init(struct drm_device *dev);
|
int __must_check i915_gem_context_init(struct drm_device *dev);
|
||||||
void i915_gem_context_fini(struct drm_device *dev);
|
void i915_gem_context_fini(struct drm_device *dev);
|
||||||
void i915_gem_context_reset(struct drm_device *dev);
|
void i915_gem_context_reset(struct drm_device *dev);
|
||||||
|
|
|
@ -4485,7 +4485,8 @@ void i915_gem_vma_destroy(struct i915_vma *vma)
|
||||||
|
|
||||||
vm = vma->vm;
|
vm = vma->vm;
|
||||||
|
|
||||||
i915_ppgtt_put(vm_to_ppgtt(vm));
|
if (!i915_is_ggtt(vm))
|
||||||
|
i915_ppgtt_put(i915_vm_to_ppgtt(vm));
|
||||||
|
|
||||||
list_del(&vma->vma_link);
|
list_del(&vma->vma_link);
|
||||||
|
|
||||||
|
|
|
@ -2187,7 +2187,8 @@ i915_gem_obj_lookup_or_create_vma(struct drm_i915_gem_object *obj,
|
||||||
if (!vma)
|
if (!vma)
|
||||||
vma = __i915_gem_vma_create(obj, vm);
|
vma = __i915_gem_vma_create(obj, vm);
|
||||||
|
|
||||||
i915_ppgtt_get(vm_to_ppgtt(vm));
|
if (!i915_is_ggtt(vm))
|
||||||
|
i915_ppgtt_get(i915_vm_to_ppgtt(vm));
|
||||||
|
|
||||||
return vma;
|
return vma;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue