[PATCH v2 2/7] drm/panfrost: Move the mappings collection out of panfrost_lookup_bos()

Steven Price steven.price at arm.com
Fri Jul 2 09:43:49 UTC 2021


On 01/07/2021 10:12, Boris Brezillon wrote:
> So we can re-use it from elsewhere.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon at collabora.com>

Reviewed-by: Steven Price <steven.price at arm.com>

> ---
>  drivers/gpu/drm/panfrost/panfrost_drv.c | 52 ++++++++++++++-----------
>  1 file changed, 29 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
> index 1ffaef5ec5ff..9bbc9e78cc85 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
> @@ -109,6 +109,34 @@ static int panfrost_ioctl_create_bo(struct drm_device *dev, void *data,
>  	return 0;
>  }
>  
> +static int
> +panfrost_get_job_mappings(struct drm_file *file_priv, struct panfrost_job *job)
> +{
> +	struct panfrost_file_priv *priv = file_priv->driver_priv;
> +	unsigned int i;
> +
> +	job->mappings = kvmalloc_array(job->bo_count,
> +				       sizeof(*job->mappings),
> +				       GFP_KERNEL | __GFP_ZERO);
> +	if (!job->mappings)
> +		return -ENOMEM;
> +
> +	for (i = 0; i < job->bo_count; i++) {
> +		struct panfrost_gem_mapping *mapping;
> +		struct panfrost_gem_object *bo;
> +
> +		bo = to_panfrost_bo(job->bos[i]);
> +		mapping = panfrost_gem_mapping_get(bo, priv);
> +		if (!mapping)
> +			return -EINVAL;
> +
> +		atomic_inc(&bo->gpu_usecount);
> +		job->mappings[i] = mapping;
> +	}
> +
> +	return 0;
> +}
> +
>  /**
>   * panfrost_lookup_bos() - Sets up job->bo[] with the GEM objects
>   * referenced by the job.
> @@ -128,8 +156,6 @@ panfrost_lookup_bos(struct drm_device *dev,
>  		  struct drm_panfrost_submit *args,
>  		  struct panfrost_job *job)
>  {
> -	struct panfrost_file_priv *priv = file_priv->driver_priv;
> -	struct panfrost_gem_object *bo;
>  	unsigned int i;
>  	int ret;
>  
> @@ -144,27 +170,7 @@ panfrost_lookup_bos(struct drm_device *dev,
>  	if (ret)
>  		return ret;
>  
> -	job->mappings = kvmalloc_array(job->bo_count,
> -				       sizeof(struct panfrost_gem_mapping *),
> -				       GFP_KERNEL | __GFP_ZERO);
> -	if (!job->mappings)
> -		return -ENOMEM;
> -
> -	for (i = 0; i < job->bo_count; i++) {
> -		struct panfrost_gem_mapping *mapping;
> -
> -		bo = to_panfrost_bo(job->bos[i]);
> -		mapping = panfrost_gem_mapping_get(bo, priv);
> -		if (!mapping) {
> -			ret = -EINVAL;
> -			break;
> -		}
> -
> -		atomic_inc(&bo->gpu_usecount);
> -		job->mappings[i] = mapping;
> -	}
> -
> -	return ret;
> +	return panfrost_get_job_mappings(file_priv, job);
>  }
>  
>  /**
> 



More information about the dri-devel mailing list