All of lore.kernel.org
 help / color / mirror / Atom feed
From: Javier Martinez Canillas <javierm@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Maxime Ripard <mripard@kernel.org>,
	Bilal Elmoussaoui <belmouss@redhat.com>,
	Simon Ser <contact@emersion.fr>,
	Erico Nunes <nunes.erico@gmail.com>,
	Pekka Paalanen <pekka.paalanen@collabora.com>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	Sima Vetter <daniel.vetter@ffwll.ch>,
	Javier Martinez Canillas <javierm@redhat.com>,
	stable@vger.kernel.org,
	nerdopolis <bluescreen_avenger@verizon.net>,
	Chia-I Wu <olvaffe@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
	David Airlie <airlied@redhat.com>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Gurchetan Singh <gurchetansingh@chromium.org>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	dri-devel@lists.freedesktop.org, virtualization@lists.linux.dev
Subject: [PATCH v2 2/5] drm/virtio: Disable damage clipping if FB changed since last page-flip
Date: Wed, 15 Nov 2023 14:15:41 +0100	[thread overview]
Message-ID: <20231115131549.2191589-3-javierm@redhat.com> (raw)
In-Reply-To: <20231115131549.2191589-1-javierm@redhat.com>

The driver does per-buffer uploads and needs to force a full plane update
if the plane's attached framebuffer has change since the last page-flip.

Fixes: 01f05940a9a7 ("drm/virtio: Enable fb damage clips property for the primary plane")
Cc: <stable@vger.kernel.org> # v6.4+
Reported-by: nerdopolis <bluescreen_avenger@verizon.net>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218115
Suggested-by: Sima Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
---

Changes in v2:
- Set struct drm_plane_state .ignore_damage_clips in virtio-gpu plane's
  .atomic_check instead of using a different helpers (Thomas Zimmermann).

 drivers/gpu/drm/virtio/virtgpu_plane.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index a2e045f3a000..a1ef657eba07 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -79,6 +79,8 @@ static int virtio_gpu_plane_atomic_check(struct drm_plane *plane,
 {
 	struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
 										 plane);
+	struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(state,
+										 plane);
 	bool is_cursor = plane->type == DRM_PLANE_TYPE_CURSOR;
 	struct drm_crtc_state *crtc_state;
 	int ret;
@@ -86,6 +88,14 @@ static int virtio_gpu_plane_atomic_check(struct drm_plane *plane,
 	if (!new_plane_state->fb || WARN_ON(!new_plane_state->crtc))
 		return 0;
 
+	/*
+	 * Ignore damage clips if the framebuffer attached to the plane's state
+	 * has changed since the last plane update (page-flip). In this case, a
+	 * full plane update should happen because uploads are done per-buffer.
+	 */
+	if (old_plane_state->fb != new_plane_state->fb)
+		new_plane_state->ignore_damage_clips = true;
+
 	crtc_state = drm_atomic_get_crtc_state(state,
 					       new_plane_state->crtc);
 	if (IS_ERR(crtc_state))
-- 
2.41.0


WARNING: multiple messages have this Message-ID (diff)
From: Javier Martinez Canillas <javierm@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: dri-devel@lists.freedesktop.org,
	Gerd Hoffmann <kraxel@redhat.com>,
	nerdopolis <bluescreen_avenger@verizon.net>,
	Pekka Paalanen <pekka.paalanen@collabora.com>,
	Bilal Elmoussaoui <belmouss@redhat.com>,
	Javier Martinez Canillas <javierm@redhat.com>,
	Maxime Ripard <mripard@kernel.org>,
	Gurchetan Singh <gurchetansingh@chromium.org>,
	stable@vger.kernel.org, Thomas Zimmermann <tzimmermann@suse.de>,
	Sima Vetter <daniel.vetter@ffwll.ch>,
	David Airlie <airlied@redhat.com>,
	virtualization@lists.linux.dev,
	Erico Nunes <nunes.erico@gmail.com>
Subject: [PATCH v2 2/5] drm/virtio: Disable damage clipping if FB changed since last page-flip
Date: Wed, 15 Nov 2023 14:15:41 +0100	[thread overview]
Message-ID: <20231115131549.2191589-3-javierm@redhat.com> (raw)
In-Reply-To: <20231115131549.2191589-1-javierm@redhat.com>

The driver does per-buffer uploads and needs to force a full plane update
if the plane's attached framebuffer has change since the last page-flip.

Fixes: 01f05940a9a7 ("drm/virtio: Enable fb damage clips property for the primary plane")
Cc: <stable@vger.kernel.org> # v6.4+
Reported-by: nerdopolis <bluescreen_avenger@verizon.net>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218115
Suggested-by: Sima Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
---

Changes in v2:
- Set struct drm_plane_state .ignore_damage_clips in virtio-gpu plane's
  .atomic_check instead of using a different helpers (Thomas Zimmermann).

 drivers/gpu/drm/virtio/virtgpu_plane.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index a2e045f3a000..a1ef657eba07 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -79,6 +79,8 @@ static int virtio_gpu_plane_atomic_check(struct drm_plane *plane,
 {
 	struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
 										 plane);
+	struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(state,
+										 plane);
 	bool is_cursor = plane->type == DRM_PLANE_TYPE_CURSOR;
 	struct drm_crtc_state *crtc_state;
 	int ret;
@@ -86,6 +88,14 @@ static int virtio_gpu_plane_atomic_check(struct drm_plane *plane,
 	if (!new_plane_state->fb || WARN_ON(!new_plane_state->crtc))
 		return 0;
 
+	/*
+	 * Ignore damage clips if the framebuffer attached to the plane's state
+	 * has changed since the last plane update (page-flip). In this case, a
+	 * full plane update should happen because uploads are done per-buffer.
+	 */
+	if (old_plane_state->fb != new_plane_state->fb)
+		new_plane_state->ignore_damage_clips = true;
+
 	crtc_state = drm_atomic_get_crtc_state(state,
 					       new_plane_state->crtc);
 	if (IS_ERR(crtc_state))
-- 
2.41.0


  parent reply	other threads:[~2023-11-15 13:16 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-15 13:15 [PATCH v2 0/5] drm: Allow the damage helpers to handle buffer damage Javier Martinez Canillas
2023-11-15 13:15 ` Javier Martinez Canillas
2023-11-15 13:15 ` [PATCH v2 1/5] drm: Allow drivers to indicate the damage helpers to ignore damage clips Javier Martinez Canillas
2023-11-15 13:15   ` Javier Martinez Canillas
2023-11-15 13:15 ` Javier Martinez Canillas [this message]
2023-11-15 13:15   ` [PATCH v2 2/5] drm/virtio: Disable damage clipping if FB changed since last page-flip Javier Martinez Canillas
2023-11-15 13:15 ` [PATCH v2 3/5] drm/vmwgfx: " Javier Martinez Canillas
2023-11-15 13:15   ` Javier Martinez Canillas
2023-11-15 13:15 ` [PATCH v2 4/5] drm/plane: Extend damage tracking kernel-doc Javier Martinez Canillas
2023-11-15 13:15   ` Javier Martinez Canillas
2023-11-16 12:06   ` Thomas Zimmermann
2023-11-16 12:06     ` Thomas Zimmermann
2023-11-16 12:14     ` Simon Ser
2023-11-16 12:14       ` Simon Ser
2023-11-16 12:34       ` Thomas Zimmermann
2023-11-16 15:24         ` Pekka Paalanen
2023-11-16 15:24           ` Pekka Paalanen
2023-11-17 11:47           ` Thomas Zimmermann
2023-11-17 11:47             ` Thomas Zimmermann
2023-11-15 13:15 ` [PATCH v2 5/5] drm/todo: Add entry about implementing buffer age for damage tracking Javier Martinez Canillas
2023-11-15 13:15   ` Javier Martinez Canillas
2023-11-16  4:04 ` [PATCH v2 0/5] drm: Allow the damage helpers to handle buffer damage Zack Rusin
2023-11-16  4:04   ` Zack Rusin
2023-11-16  7:46   ` Javier Martinez Canillas
2023-11-16  7:46     ` Javier Martinez Canillas
2023-11-16 12:07 ` Thomas Zimmermann
2023-11-16 12:07   ` Thomas Zimmermann

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=20231115131549.2191589-3-javierm@redhat.com \
    --to=javierm@redhat.com \
    --cc=airlied@redhat.com \
    --cc=belmouss@redhat.com \
    --cc=bluescreen_avenger@verizon.net \
    --cc=contact@emersion.fr \
    --cc=daniel.vetter@ffwll.ch \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gurchetansingh@chromium.org \
    --cc=kraxel@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mripard@kernel.org \
    --cc=nunes.erico@gmail.com \
    --cc=olvaffe@gmail.com \
    --cc=pekka.paalanen@collabora.com \
    --cc=stable@vger.kernel.org \
    --cc=tzimmermann@suse.de \
    --cc=virtualization@lists.linux.dev \
    /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.