mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-05-24 10:39:52 +00:00
drm/i915/gvt: Refine dmabuf_obj cleanup process
In the process of dmabuf_obj cleanup, the dmabuf_obj might be freed during dmabuf_obj_put leaking intel_gvt_hypervisor_put_vfio_device. Move intel_gvt_hypervisor_put_vfio_device and all the other dmabuf_obj ops in front of dmabuf_obj_put and let every dmabuf_obj have a chance to call intel_gvt_hypervisor_put_vfio_device to fix this leaking issue. Fixes: e3a0d7976c53 ("drm/i915/gvt: Handle orphan dmabuf_objs") Signed-off-by: Tina Zhang <tina.zhang@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
This commit is contained in:
parent
072ec93d50
commit
6ee942d5f7
1 changed files with 7 additions and 8 deletions
|
@ -520,19 +520,18 @@ void intel_vgpu_dmabuf_cleanup(struct intel_vgpu *vgpu)
|
|||
list_for_each_safe(pos, n, &vgpu->dmabuf_obj_list_head) {
|
||||
dmabuf_obj = container_of(pos, struct intel_vgpu_dmabuf_obj,
|
||||
list);
|
||||
dmabuf_obj->vgpu = NULL;
|
||||
|
||||
idr_remove(&vgpu->object_idr, dmabuf_obj->dmabuf_id);
|
||||
intel_gvt_hypervisor_put_vfio_device(vgpu);
|
||||
list_del(pos);
|
||||
|
||||
/* dmabuf_obj might be freed in dmabuf_obj_put */
|
||||
if (dmabuf_obj->initref) {
|
||||
dmabuf_obj->initref = false;
|
||||
dmabuf_obj_put(dmabuf_obj);
|
||||
}
|
||||
|
||||
idr_remove(&vgpu->object_idr, dmabuf_obj->dmabuf_id);
|
||||
|
||||
if (dmabuf_obj->vgpu)
|
||||
intel_gvt_hypervisor_put_vfio_device(vgpu);
|
||||
|
||||
list_del(pos);
|
||||
dmabuf_obj->vgpu = NULL;
|
||||
|
||||
}
|
||||
mutex_unlock(&vgpu->dmabuf_lock);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue