drm/vmwgfx: stop using ttm_bo_create v2
[ Upstream commit b254557cb244e2c18e59ee1cc2293128c52d2473 ] Implement in the driver instead since it is the only user of that function. v2: fix usage of ttm_bo_init_reserved Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Huang Rui <ray.huang@amd.com> Link: https://patchwork.freedesktop.org/patch/391614/?series=81973&rev=1 Stable-dep-of: 517621b70600 ("drm/vmwgfx: Fix possible null pointer derefence with invalid contexts") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
7f0de642ac
commit
1502b87c65
@@ -487,6 +487,49 @@ static void vmw_user_bo_destroy(struct ttm_buffer_object *bo)
|
|||||||
ttm_prime_object_kfree(vmw_user_bo, prime);
|
ttm_prime_object_kfree(vmw_user_bo, prime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vmw_bo_create_kernel - Create a pinned BO for internal kernel use.
|
||||||
|
*
|
||||||
|
* @dev_priv: Pointer to the device private struct
|
||||||
|
* @size: size of the BO we need
|
||||||
|
* @placement: where to put it
|
||||||
|
* @p_bo: resulting BO
|
||||||
|
*
|
||||||
|
* Creates and pin a simple BO for in kernel use.
|
||||||
|
*/
|
||||||
|
int vmw_bo_create_kernel(struct vmw_private *dev_priv, unsigned long size,
|
||||||
|
struct ttm_placement *placement,
|
||||||
|
struct ttm_buffer_object **p_bo)
|
||||||
|
{
|
||||||
|
unsigned npages = PAGE_ALIGN(size) >> PAGE_SHIFT;
|
||||||
|
struct ttm_operation_ctx ctx = { false, false };
|
||||||
|
struct ttm_buffer_object *bo;
|
||||||
|
size_t acc_size;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
bo = kzalloc(sizeof(*bo), GFP_KERNEL);
|
||||||
|
if (unlikely(!bo))
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
acc_size = ttm_round_pot(sizeof(*bo));
|
||||||
|
acc_size += ttm_round_pot(npages * sizeof(void *));
|
||||||
|
acc_size += ttm_round_pot(sizeof(struct ttm_tt));
|
||||||
|
ret = ttm_bo_init_reserved(&dev_priv->bdev, bo, size,
|
||||||
|
ttm_bo_type_device, placement, 0,
|
||||||
|
&ctx, acc_size, NULL, NULL, NULL);
|
||||||
|
if (unlikely(ret))
|
||||||
|
goto error_free;
|
||||||
|
|
||||||
|
ttm_bo_pin(bo);
|
||||||
|
ttm_bo_unreserve(bo);
|
||||||
|
*p_bo = bo;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error_free:
|
||||||
|
kfree(bo);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vmw_bo_init - Initialize a vmw buffer object
|
* vmw_bo_init - Initialize a vmw buffer object
|
||||||
|
@@ -1245,9 +1245,9 @@ int vmw_cmdbuf_set_pool_size(struct vmw_cmdbuf_man *man,
|
|||||||
!dev_priv->has_mob)
|
!dev_priv->has_mob)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
ret = ttm_bo_create(&dev_priv->bdev, size, ttm_bo_type_device,
|
ret = vmw_bo_create_kernel(dev_priv, size,
|
||||||
&vmw_mob_ne_placement, 0, false,
|
&vmw_mob_placement,
|
||||||
&man->cmd_space);
|
&man->cmd_space);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@@ -845,6 +845,10 @@ extern void vmw_bo_get_guest_ptr(const struct ttm_buffer_object *buf,
|
|||||||
SVGAGuestPtr *ptr);
|
SVGAGuestPtr *ptr);
|
||||||
extern void vmw_bo_pin_reserved(struct vmw_buffer_object *bo, bool pin);
|
extern void vmw_bo_pin_reserved(struct vmw_buffer_object *bo, bool pin);
|
||||||
extern void vmw_bo_bo_free(struct ttm_buffer_object *bo);
|
extern void vmw_bo_bo_free(struct ttm_buffer_object *bo);
|
||||||
|
extern int vmw_bo_create_kernel(struct vmw_private *dev_priv,
|
||||||
|
unsigned long size,
|
||||||
|
struct ttm_placement *placement,
|
||||||
|
struct ttm_buffer_object **p_bo);
|
||||||
extern int vmw_bo_init(struct vmw_private *dev_priv,
|
extern int vmw_bo_init(struct vmw_private *dev_priv,
|
||||||
struct vmw_buffer_object *vmw_bo,
|
struct vmw_buffer_object *vmw_bo,
|
||||||
size_t size, struct ttm_placement *placement,
|
size_t size, struct ttm_placement *placement,
|
||||||
|
@@ -817,11 +817,9 @@ int vmw_bo_create_and_populate(struct vmw_private *dev_priv,
|
|||||||
struct ttm_buffer_object *bo;
|
struct ttm_buffer_object *bo;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = ttm_bo_create(&dev_priv->bdev, bo_size,
|
ret = vmw_bo_create_kernel(dev_priv, bo_size,
|
||||||
ttm_bo_type_device,
|
&vmw_sys_placement,
|
||||||
&vmw_sys_ne_placement,
|
&bo);
|
||||||
0, false, &bo);
|
|
||||||
|
|
||||||
if (unlikely(ret != 0))
|
if (unlikely(ret != 0))
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user