Commit b254557c authored by Christian König's avatar Christian König
Browse files

drm/vmwgfx: stop using ttm_bo_create v2



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: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarDave Airlie <airlied@redhat.com>
Reviewed-by: default avatarHuang Rui <ray.huang@amd.com>
Link: https://patchwork.freedesktop.org/patch/391614/?series=81973&rev=1
parent a3b3bef3
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -487,6 +487,49 @@ static void vmw_user_bo_destroy(struct ttm_buffer_object *bo)
	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
+3 −3
Original line number Diff line number Diff line
@@ -1245,8 +1245,8 @@ int vmw_cmdbuf_set_pool_size(struct vmw_cmdbuf_man *man,
		    !dev_priv->has_mob)
			return -ENOMEM;

		ret = ttm_bo_create(&dev_priv->bdev, size, ttm_bo_type_device,
				    &vmw_mob_ne_placement, 0, false,
		ret = vmw_bo_create_kernel(dev_priv, size,
					   &vmw_mob_placement,
					   &man->cmd_space);
		if (ret)
			return ret;
+4 −0
Original line number Diff line number Diff line
@@ -845,6 +845,10 @@ extern void vmw_bo_get_guest_ptr(const struct ttm_buffer_object *buf,
				 SVGAGuestPtr *ptr);
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 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,
		       struct vmw_buffer_object *vmw_bo,
		       size_t size, struct ttm_placement *placement,
+3 −5
Original line number Diff line number Diff line
@@ -793,11 +793,9 @@ int vmw_bo_create_and_populate(struct vmw_private *dev_priv,
	struct ttm_buffer_object *bo;
	int ret;

	ret = ttm_bo_create(&dev_priv->bdev, bo_size,
			    ttm_bo_type_device,
			    &vmw_sys_ne_placement,
			    0, false, &bo);

	ret = vmw_bo_create_kernel(dev_priv, bo_size,
				   &vmw_sys_placement,
				   &bo);
	if (unlikely(ret != 0))
		return ret;