[PATCH 04/11] drm/vmwgfx: stop using ttm_bo_create
Thomas Zimmermann
tzimmermann at suse.de
Tue Sep 22 06:45:48 UTC 2020
Hi
Am 21.09.20 um 16:48 schrieb Christian König:
> Implement in the driver instead since it is the only user of that function.
Maybe merge this patch with patch 10.
Best regards
Thomas
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
> drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 42 ++++++++++++++++++++++
> drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c | 6 ++--
> drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 4 +++
> drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 8 ++---
> 4 files changed, 52 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c
> index 813f1b148094..30d19b45b602 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c
> @@ -487,6 +487,48 @@ 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_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,
> + false, 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
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c
> index 3b41cf63110a..9a9fe10d829b 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c
> @@ -1245,9 +1245,9 @@ 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,
> - &man->cmd_space);
> + ret = vmw_bo_create_kernel(dev_priv, size,
> + &vmw_mob_placement,
> + &man->cmd_space);
> if (ret)
> return ret;
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> index 9ceee4eb0b13..5d07de5183e1 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> @@ -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,
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> index d7ea658e9910..39a2f720f4ed 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> @@ -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;
>
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 516 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20200922/4026e599/attachment.sig>
More information about the dri-devel
mailing list