[PATCH 2/3] drm/udl: Allocate GEM object via struct drm_driver.gem_create_object

Gerd Hoffmann kraxel at redhat.com
Tue Nov 5 11:05:46 UTC 2019


On Mon, Oct 28, 2019 at 09:45:48AM +0100, Thomas Zimmermann wrote:
> In preparation of a switch to SHMEM, udl now allocates its GEM
> objects via struct drm_driver.gem_create_object. No functional
> changes are made.
> 
> For SHMEM GEM objects, udl will require the use of a special mmap
> function, which we set though the create-object function.

Acked-by: Gerd Hoffmann <kraxel at redhat.com>

> 
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> ---
>  drivers/gpu/drm/udl/udl_drv.c |  1 +
>  drivers/gpu/drm/udl/udl_drv.h |  2 ++
>  drivers/gpu/drm/udl/udl_gem.c | 25 +++++++++++++++++++++----
>  3 files changed, 24 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
> index 8426669433e4..778a0b652f64 100644
> --- a/drivers/gpu/drm/udl/udl_drv.c
> +++ b/drivers/gpu/drm/udl/udl_drv.c
> @@ -64,6 +64,7 @@ static struct drm_driver driver = {
>  
>  	/* gem hooks */
>  	.gem_free_object_unlocked = udl_gem_free_object,
> +	.gem_create_object = udl_driver_gem_create_object,
>  	.gem_vm_ops = &udl_gem_vm_ops,
>  
>  	.dumb_create = udl_dumb_create,
> diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h
> index e1306a51903c..fc312e791d18 100644
> --- a/drivers/gpu/drm/udl/udl_drv.h
> +++ b/drivers/gpu/drm/udl/udl_drv.h
> @@ -125,6 +125,8 @@ int udl_dumb_create(struct drm_file *file_priv,
>  int udl_gem_mmap(struct drm_file *file_priv, struct drm_device *dev,
>  		 uint32_t handle, uint64_t *offset);
>  
> +struct drm_gem_object *udl_driver_gem_create_object(struct drm_device *dev,
> +						    size_t size);
>  void udl_gem_free_object(struct drm_gem_object *gem_obj);
>  struct udl_gem_object *udl_gem_alloc_object(struct drm_device *dev,
>  					    size_t size);
> diff --git a/drivers/gpu/drm/udl/udl_gem.c b/drivers/gpu/drm/udl/udl_gem.c
> index 7d3c1b73ea02..628749cc1143 100644
> --- a/drivers/gpu/drm/udl/udl_gem.c
> +++ b/drivers/gpu/drm/udl/udl_gem.c
> @@ -6,26 +6,43 @@
>  #include <linux/dma-buf.h>
>  #include <linux/vmalloc.h>
>  
> +#include <drm/drm_drv.h>
>  #include <drm/drm_mode.h>
>  #include <drm/drm_prime.h>
>  
>  #include "udl_drv.h"
>  
> -struct udl_gem_object *udl_gem_alloc_object(struct drm_device *dev,
> -					    size_t size)
> +/*
> + * Helpers for struct drm_driver
> + */
> +
> +struct drm_gem_object *udl_driver_gem_create_object(struct drm_device *dev,
> +						    size_t size)
>  {
>  	struct udl_gem_object *obj;
>  
>  	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
> +	if (!obj)
> +		return NULL;
> +
> +	return &obj->base;
> +}
> +
> +struct udl_gem_object *udl_gem_alloc_object(struct drm_device *dev,
> +					    size_t size)
> +{
> +	struct drm_gem_object *obj;
> +
> +	obj = dev->driver->gem_create_object(dev, size);
>  	if (obj == NULL)
>  		return NULL;
>  
> -	if (drm_gem_object_init(dev, &obj->base, size) != 0) {
> +	if (drm_gem_object_init(dev, obj, size) != 0) {
>  		kfree(obj);
>  		return NULL;
>  	}
>  
> -	return obj;
> +	return to_udl_bo(obj);
>  }
>  
>  static int
> -- 
> 2.23.0
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel



More information about the dri-devel mailing list