[PATCH] drm/panfrost: Use drm_gem_dump_map_offset()

Daniel Vetter daniel at ffwll.ch
Mon May 13 14:39:21 UTC 2019


On Mon, May 13, 2019 at 03:32:44PM +0100, Steven Price wrote:
> panfrost_ioctl_mmap_bo() contains a reimplementation of
> drm_gem_dump_map_offset() but with a bug - it allows mapping imported
> objects (without going through the exporter). Fix this by switching to
> use the generic drm_gem_dump_map_offset() function instead which has the
> bonus of simplifying the code.

gem_dumb stuff is for kms drivers, panfrost is a render driver. We're
generally trying to separate these two worlds somewhat cleanly.

I think it'd be good to have a non-dumb version of this in the core, and
use that. Or upgrade the dumb version to be that helper for everyone (and
drop the _dumb).
-Daniel

> CC: Alyssa Rosenzweig <alyssa at rosenzweig.io>
> Signed-off-by: Steven Price <steven.price at arm.com>
> ---
>  drivers/gpu/drm/panfrost/panfrost_drv.c | 16 ++--------------
>  1 file changed, 2 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
> index 94b0819ad50b..d048250ad8ab 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
> @@ -254,26 +254,14 @@ static int panfrost_ioctl_mmap_bo(struct drm_device *dev, void *data,
>  		      struct drm_file *file_priv)
>  {
>  	struct drm_panfrost_mmap_bo *args = data;
> -	struct drm_gem_object *gem_obj;
> -	int ret;
>  
>  	if (args->flags != 0) {
>  		DRM_INFO("unknown mmap_bo flags: %d\n", args->flags);
>  		return -EINVAL;
>  	}
>  
> -	gem_obj = drm_gem_object_lookup(file_priv, args->handle);
> -	if (!gem_obj) {
> -		DRM_DEBUG("Failed to look up GEM BO %d\n", args->handle);
> -		return -ENOENT;
> -	}
> -
> -	ret = drm_gem_create_mmap_offset(gem_obj);
> -	if (ret == 0)
> -		args->offset = drm_vma_node_offset_addr(&gem_obj->vma_node);
> -	drm_gem_object_put_unlocked(gem_obj);
> -
> -	return ret;
> +	return drm_gem_dumb_map_offset(file_priv, dev, args->handle,
> +				       &args->offset);
>  }
>  
>  static int panfrost_ioctl_get_bo_offset(struct drm_device *dev, void *data,
> -- 
> 2.20.1
> 

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


More information about the dri-devel mailing list