[PATCH] drm/vgem: drop DRIVER_PRIME (v2)

Daniel Vetter daniel at ffwll.ch
Thu May 21 09:07:30 PDT 2015


On Thu, May 21, 2015 at 11:58:30AM -0400, Rob Clark wrote:
> For actual sharing of buffers with other drivers (ie. actual hardware)
> we'll need to pimp things out a bit better to deal w/ caching, multiple
> memory domains, etc.  See thread:
> 
>   http://lists.freedesktop.org/archives/dri-devel/2015-May/083160.html
> 
> But for the llvmpipe use-case this isn't a problem.  Nor do we really
> need prime/dri3 (dri2 is sufficient).  So until the other issues are
> sorted lets remove DRIVER_PRIME.
> 
> v2: also drop the dead code
> 
> Signed-off-by: Rob Clark <robdclark at gmail.com>

Yeah I'm ok with this too, but it pretty much means vgem is a thing for
llvmpipe only. And then abusing dumb buffers is imo ok too, since I don't
care too much what kind of horrors drivers pull of internally.

Acked-by: Daniel Vetter <daniel.vetter at ffwll.ch>

> ---
>  drivers/gpu/drm/vgem/Makefile       |  2 +-
>  drivers/gpu/drm/vgem/vgem_dma_buf.c | 94 -------------------------------------
>  drivers/gpu/drm/vgem/vgem_drv.c     | 11 +----
>  drivers/gpu/drm/vgem/vgem_drv.h     | 11 -----
>  4 files changed, 2 insertions(+), 116 deletions(-)
>  delete mode 100644 drivers/gpu/drm/vgem/vgem_dma_buf.c
> 
> diff --git a/drivers/gpu/drm/vgem/Makefile b/drivers/gpu/drm/vgem/Makefile
> index 1055cb7..3f4c7b8 100644
> --- a/drivers/gpu/drm/vgem/Makefile
> +++ b/drivers/gpu/drm/vgem/Makefile
> @@ -1,4 +1,4 @@
>  ccflags-y := -Iinclude/drm
> -vgem-y := vgem_drv.o vgem_dma_buf.o
> +vgem-y := vgem_drv.o
>  
>  obj-$(CONFIG_DRM_VGEM)	+= vgem.o
> diff --git a/drivers/gpu/drm/vgem/vgem_dma_buf.c b/drivers/gpu/drm/vgem/vgem_dma_buf.c
> deleted file mode 100644
> index 0254438..0000000
> --- a/drivers/gpu/drm/vgem/vgem_dma_buf.c
> +++ /dev/null
> @@ -1,94 +0,0 @@
> -/*
> - * Copyright © 2012 Intel Corporation
> - * Copyright © 2014 The Chromium OS Authors
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a
> - * copy of this software and associated documentation files (the "Software"),
> - * to deal in the Software without restriction, including without limitation
> - * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> - * and/or sell copies of the Software, and to permit persons to whom the
> - * Software is furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice (including the next
> - * paragraph) shall be included in all copies or substantial portions of the
> - * Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> - * IN THE SOFTWARE.
> - *
> - * Authors:
> - *    Ben Widawsky <ben at bwidawsk.net>
> - *
> - */
> -
> -#include <linux/dma-buf.h>
> -#include "vgem_drv.h"
> -
> -struct sg_table *vgem_gem_prime_get_sg_table(struct drm_gem_object *gobj)
> -{
> -	struct drm_vgem_gem_object *obj = to_vgem_bo(gobj);
> -	BUG_ON(obj->pages == NULL);
> -
> -	return drm_prime_pages_to_sg(obj->pages, obj->base.size / PAGE_SIZE);
> -}
> -
> -int vgem_gem_prime_pin(struct drm_gem_object *gobj)
> -{
> -	struct drm_vgem_gem_object *obj = to_vgem_bo(gobj);
> -	return vgem_gem_get_pages(obj);
> -}
> -
> -void vgem_gem_prime_unpin(struct drm_gem_object *gobj)
> -{
> -	struct drm_vgem_gem_object *obj = to_vgem_bo(gobj);
> -	vgem_gem_put_pages(obj);
> -}
> -
> -void *vgem_gem_prime_vmap(struct drm_gem_object *gobj)
> -{
> -	struct drm_vgem_gem_object *obj = to_vgem_bo(gobj);
> -	BUG_ON(obj->pages == NULL);
> -
> -	return vmap(obj->pages, obj->base.size / PAGE_SIZE, 0, PAGE_KERNEL);
> -}
> -
> -void vgem_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr)
> -{
> -	vunmap(vaddr);
> -}
> -
> -struct drm_gem_object *vgem_gem_prime_import(struct drm_device *dev,
> -					     struct dma_buf *dma_buf)
> -{
> -	struct drm_vgem_gem_object *obj = NULL;
> -	int ret;
> -
> -	obj = kzalloc(sizeof(*obj), GFP_KERNEL);
> -	if (obj == NULL) {
> -		ret = -ENOMEM;
> -		goto fail;
> -	}
> -
> -	ret = drm_gem_object_init(dev, &obj->base, dma_buf->size);
> -	if (ret) {
> -		ret = -ENOMEM;
> -		goto fail_free;
> -	}
> -
> -	get_dma_buf(dma_buf);
> -
> -	obj->base.dma_buf = dma_buf;
> -	obj->use_dma_buf = true;
> -
> -	return &obj->base;
> -
> -fail_free:
> -	kfree(obj);
> -fail:
> -	return ERR_PTR(ret);
> -}
> diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
> index cb3b435..7a207ca 100644
> --- a/drivers/gpu/drm/vgem/vgem_drv.c
> +++ b/drivers/gpu/drm/vgem/vgem_drv.c
> @@ -302,22 +302,13 @@ static const struct file_operations vgem_driver_fops = {
>  };
>  
>  static struct drm_driver vgem_driver = {
> -	.driver_features		= DRIVER_GEM | DRIVER_PRIME,
> +	.driver_features		= DRIVER_GEM,
>  	.gem_free_object		= vgem_gem_free_object,
>  	.gem_vm_ops			= &vgem_gem_vm_ops,
>  	.ioctls				= vgem_ioctls,
>  	.fops				= &vgem_driver_fops,
>  	.dumb_create			= vgem_gem_dumb_create,
>  	.dumb_map_offset		= vgem_gem_dumb_map,
> -	.prime_handle_to_fd		= drm_gem_prime_handle_to_fd,
> -	.prime_fd_to_handle		= drm_gem_prime_fd_to_handle,
> -	.gem_prime_export		= drm_gem_prime_export,
> -	.gem_prime_import		= vgem_gem_prime_import,
> -	.gem_prime_pin			= vgem_gem_prime_pin,
> -	.gem_prime_unpin		= vgem_gem_prime_unpin,
> -	.gem_prime_get_sg_table		= vgem_gem_prime_get_sg_table,
> -	.gem_prime_vmap			= vgem_gem_prime_vmap,
> -	.gem_prime_vunmap		= vgem_gem_prime_vunmap,
>  	.name	= DRIVER_NAME,
>  	.desc	= DRIVER_DESC,
>  	.date	= DRIVER_DATE,
> diff --git a/drivers/gpu/drm/vgem/vgem_drv.h b/drivers/gpu/drm/vgem/vgem_drv.h
> index 57ab4d8..e9f92f7 100644
> --- a/drivers/gpu/drm/vgem/vgem_drv.h
> +++ b/drivers/gpu/drm/vgem/vgem_drv.h
> @@ -43,15 +43,4 @@ struct drm_vgem_gem_object {
>  extern void vgem_gem_put_pages(struct drm_vgem_gem_object *obj);
>  extern int vgem_gem_get_pages(struct drm_vgem_gem_object *obj);
>  
> -/* vgem_dma_buf.c */
> -extern struct sg_table *vgem_gem_prime_get_sg_table(
> -			struct drm_gem_object *gobj);
> -extern int vgem_gem_prime_pin(struct drm_gem_object *gobj);
> -extern void vgem_gem_prime_unpin(struct drm_gem_object *gobj);
> -extern void *vgem_gem_prime_vmap(struct drm_gem_object *gobj);
> -extern void vgem_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
> -extern struct drm_gem_object *vgem_gem_prime_import(struct drm_device *dev,
> -						    struct dma_buf *dma_buf);
> -
> -
>  #endif
> -- 
> 2.4.1
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list