drm/vmwgfx: Use bo_driver::move_notify to unbind GMRs.
This was previously done explicitly for overlay- and fb buffers. Now it's done for any buffer leaving the SYSTEM memory region. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
committed by
Dave Airlie
parent
7704befbd5
commit
effe1105be
@ -757,20 +757,29 @@ static size_t vmw_dmabuf_acc_size(struct ttm_bo_global *glob,
|
||||
return bo_user_size + page_array_size;
|
||||
}
|
||||
|
||||
void vmw_dmabuf_bo_free(struct ttm_buffer_object *bo)
|
||||
void vmw_dmabuf_gmr_unbind(struct ttm_buffer_object *bo)
|
||||
{
|
||||
struct vmw_dma_buffer *vmw_bo = vmw_dma_buffer(bo);
|
||||
struct ttm_bo_global *glob = bo->glob;
|
||||
struct vmw_private *dev_priv =
|
||||
container_of(bo->bdev, struct vmw_private, bdev);
|
||||
|
||||
ttm_mem_global_free(glob->mem_glob, bo->acc_size);
|
||||
if (vmw_bo->gmr_bound) {
|
||||
vmw_gmr_unbind(dev_priv, vmw_bo->gmr_id);
|
||||
spin_lock(&glob->lru_lock);
|
||||
ida_remove(&dev_priv->gmr_ida, vmw_bo->gmr_id);
|
||||
spin_unlock(&glob->lru_lock);
|
||||
vmw_bo->gmr_bound = false;
|
||||
}
|
||||
}
|
||||
|
||||
void vmw_dmabuf_bo_free(struct ttm_buffer_object *bo)
|
||||
{
|
||||
struct vmw_dma_buffer *vmw_bo = vmw_dma_buffer(bo);
|
||||
struct ttm_bo_global *glob = bo->glob;
|
||||
|
||||
vmw_dmabuf_gmr_unbind(bo);
|
||||
ttm_mem_global_free(glob->mem_glob, bo->acc_size);
|
||||
kfree(vmw_bo);
|
||||
}
|
||||
|
||||
@ -816,18 +825,10 @@ int vmw_dmabuf_init(struct vmw_private *dev_priv,
|
||||
static void vmw_user_dmabuf_destroy(struct ttm_buffer_object *bo)
|
||||
{
|
||||
struct vmw_user_dma_buffer *vmw_user_bo = vmw_user_dma_buffer(bo);
|
||||
struct vmw_dma_buffer *vmw_bo = &vmw_user_bo->dma;
|
||||
struct ttm_bo_global *glob = bo->glob;
|
||||
struct vmw_private *dev_priv =
|
||||
container_of(bo->bdev, struct vmw_private, bdev);
|
||||
|
||||
vmw_dmabuf_gmr_unbind(bo);
|
||||
ttm_mem_global_free(glob->mem_glob, bo->acc_size);
|
||||
if (vmw_bo->gmr_bound) {
|
||||
vmw_gmr_unbind(dev_priv, vmw_bo->gmr_id);
|
||||
spin_lock(&glob->lru_lock);
|
||||
ida_remove(&dev_priv->gmr_ida, vmw_bo->gmr_id);
|
||||
spin_unlock(&glob->lru_lock);
|
||||
}
|
||||
kfree(vmw_user_bo);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user