All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
To: Thomas Zimmermann <tzimmermann@suse.de>
Cc: hamohammed.sa@gmail.com, rodrigosiqueiramelo@gmail.com,
	airlied@linux.ie, melissa.srw@gmail.com, noralf@tronnes.org,
	dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v2 5/5] drm/vkms: Map output framebuffer BOs with drm_gem_fb_vmap()
Date: Mon, 26 Jul 2021 17:26:36 -0400	[thread overview]
Message-ID: <20210726212636.3gj5oc7ubnqvlrpx@outlook.office365.com> (raw)
In-Reply-To: <20210725174438.24493-6-tzimmermann@suse.de>

On 07/25, Thomas Zimmermann wrote:
> Abstract the framebuffer details by mappings its BOs with a call
> to drm_gem_fb_vmap(). Unmap with drm_gem_fb_vunamp().
> 
> Before, the output address with stored as raw pointer in the priv
> field of struct drm_writeback_job. Introduce the new type
> struct vkms_writeback_job, which holds the output mappings addresses
> while the writeback job is active.
> 
> The patchset also cleans up some internal casting an setup of the
> output addresses. No functional changes.
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>  drivers/gpu/drm/vkms/vkms_composer.c  |  2 +-
>  drivers/gpu/drm/vkms/vkms_drv.h       |  6 +++++-
>  drivers/gpu/drm/vkms/vkms_writeback.c | 21 ++++++++++-----------
>  3 files changed, 16 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/gpu/drm/vkms/vkms_composer.c b/drivers/gpu/drm/vkms/vkms_composer.c
> index ead8fff81f30..49f109c3a2b3 100644
> --- a/drivers/gpu/drm/vkms/vkms_composer.c
> +++ b/drivers/gpu/drm/vkms/vkms_composer.c
> @@ -257,7 +257,7 @@ void vkms_composer_worker(struct work_struct *work)
>  		return;
>  
>  	if (wb_pending)
> -		vaddr_out = crtc_state->active_writeback;
> +		vaddr_out = crtc_state->active_writeback->map[0].vaddr;
>  
>  	ret = compose_active_planes(&vaddr_out, primary_composer,
>  				    crtc_state);
> diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h
> index 8c731b6dcba7..8bc9e3f52e1f 100644
> --- a/drivers/gpu/drm/vkms/vkms_drv.h
> +++ b/drivers/gpu/drm/vkms/vkms_drv.h
> @@ -20,6 +20,10 @@
>  #define XRES_MAX  8192
>  #define YRES_MAX  8192
>  
> +struct vkms_writeback_job {
> +	struct dma_buf_map map[DRM_FORMAT_MAX_PLANES];
> +};
> +
>  struct vkms_composer {
>  	struct drm_framebuffer fb;
>  	struct drm_rect src, dst;
> @@ -57,7 +61,7 @@ struct vkms_crtc_state {
>  	int num_active_planes;
>  	/* stack of active planes for crc computation, should be in z order */
>  	struct vkms_plane_state **active_planes;
> -	void *active_writeback;
> +	struct vkms_writeback_job *active_writeback;
>  
>  	/* below four are protected by vkms_output.composer_lock */
>  	bool crc_pending;
> diff --git a/drivers/gpu/drm/vkms/vkms_writeback.c b/drivers/gpu/drm/vkms/vkms_writeback.c
> index 0935686475a0..765bb85ba76c 100644
> --- a/drivers/gpu/drm/vkms/vkms_writeback.c
> +++ b/drivers/gpu/drm/vkms/vkms_writeback.c
> @@ -65,21 +65,23 @@ static int vkms_wb_connector_get_modes(struct drm_connector *connector)
>  static int vkms_wb_prepare_job(struct drm_writeback_connector *wb_connector,
>  			       struct drm_writeback_job *job)
>  {
> -	struct drm_gem_object *gem_obj;
> -	struct dma_buf_map map;
> +	struct vkms_writeback_job *vkmsjob;
>  	int ret;
>  
>  	if (!job->fb)
>  		return 0;
>  
> -	gem_obj = drm_gem_fb_get_obj(job->fb, 0);
> -	ret = drm_gem_shmem_vmap(gem_obj, &map);
> +	vkmsjob = kzalloc(sizeof(*vkmsjob), GFP_KERNEL);
> +	if (!vkmsjob)
> +		return -ENOMEM;
> +
> +	ret = drm_gem_fb_vmap(job->fb, vkmsjob->map);
>  	if (ret) {
>  		DRM_ERROR("vmap failed: %d\n", ret);
>  		return ret;
>  	}
>  
> -	job->priv = map.vaddr;
> +	job->priv = vkmsjob;
>  
>  	return 0;
>  }
> @@ -87,18 +89,15 @@ static int vkms_wb_prepare_job(struct drm_writeback_connector *wb_connector,
>  static void vkms_wb_cleanup_job(struct drm_writeback_connector *connector,
>  				struct drm_writeback_job *job)
>  {
> -	struct drm_gem_object *gem_obj;
> +	struct vkms_writeback_job *vkmsjob = job->priv;
>  	struct vkms_device *vkmsdev;
> -	struct dma_buf_map map;
>  
>  	if (!job->fb)
>  		return;
>  
> -	gem_obj = drm_gem_fb_get_obj(job->fb, 0);
> -	dma_buf_map_set_vaddr(&map, job->priv);
> -	drm_gem_shmem_vunmap(gem_obj, &map);
> +	drm_gem_fb_vunmap(job->fb, vkmsjob->map);
>  
> -	vkmsdev = drm_device_to_vkms_device(gem_obj->dev);
> +	vkmsdev = drm_device_to_vkms_device(job->fb->dev);
>  	vkms_set_composer(&vkmsdev->output, false);
>  }
>  
> -- 
> 2.32.0
>

Reviewed-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> 

-- 
Rodrigo Siqueira
https://siqueira.tech

      parent reply	other threads:[~2021-07-26 21:26 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-25 17:44 [PATCH v2 0/5] drm: Provide framebuffer vmap helpers Thomas Zimmermann
2021-07-25 17:44 ` [PATCH v2 1/5] drm: Define DRM_FORMAT_MAX_PLANES Thomas Zimmermann
2021-07-25 19:49   ` Sam Ravnborg
2021-07-26 18:03     ` Thomas Zimmermann
2021-07-25 17:44 ` [PATCH v2 2/5] drm/gem: Provide drm_gem_fb_{vmap,vunmap}() Thomas Zimmermann
2021-07-25 19:55   ` Sam Ravnborg
2021-07-25 17:44 ` [PATCH v2 3/5] drm/gem: Clear mapping addresses for unused framebuffer planes Thomas Zimmermann
2021-07-25 19:58   ` Sam Ravnborg
2021-07-25 17:44 ` [PATCH v2 4/5] drm/gud: Map framebuffer BOs with drm_gem_fb_vmap() Thomas Zimmermann
2021-07-25 20:03   ` Sam Ravnborg
2021-07-25 17:44 ` [PATCH v2 5/5] drm/vkms: Map output " Thomas Zimmermann
2021-07-25 20:03   ` Sam Ravnborg
2021-07-26 21:26   ` Rodrigo Siqueira [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210726212636.3gj5oc7ubnqvlrpx@outlook.office365.com \
    --to=rodrigo.siqueira@amd.com \
    --cc=airlied@linux.ie \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=hamohammed.sa@gmail.com \
    --cc=melissa.srw@gmail.com \
    --cc=noralf@tronnes.org \
    --cc=rodrigosiqueiramelo@gmail.com \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.