Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1362093 > unrolled thread
| Started by | Gustavo Padovan <gustavo@padovan.org> |
|---|---|
| First post | 2016-03-21 20:30 +0100 |
| Last post | 2016-03-22 21:20 +0100 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 2/2] drm/virtio: send vblank event on plane atomic update Gustavo Padovan <gustavo@padovan.org> - 2016-03-21 20:30 +0100
Re: [PATCH 2/2] drm/virtio: send vblank event on plane atomic update Daniel Stone <daniel@fooishbar.org> - 2016-03-22 14:20 +0100
[PATCH v2] drm/virtio: send vblank event after crtc updates Gustavo Padovan <gustavo@padovan.org> - 2016-03-22 21:20 +0100
| From | Gustavo Padovan <gustavo@padovan.org> |
|---|---|
| Date | 2016-03-21 20:30 +0100 |
| Subject | [PATCH 2/2] drm/virtio: send vblank event on plane atomic update |
| Message-ID | <rfdGz-1FG-59@gated-at.bofh.it> |
From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
virtio_gpu was failing to send vblank events when using the atomic IOCTL
with the DRM_MODE_PAGE_FLIP_EVENT flag set. This patch fixes each and
enables atomic pageflips updates.
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
---
drivers/gpu/drm/virtio/virtgpu_plane.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index 70b44a2..20260ad 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -63,9 +63,11 @@ static void virtio_gpu_plane_atomic_update(struct drm_plane *plane,
{
struct drm_device *dev = plane->dev;
struct virtio_gpu_device *vgdev = dev->dev_private;
- struct virtio_gpu_output *output = drm_crtc_to_virtio_gpu_output(plane->crtc);
+ struct drm_crtc *crtc = plane->crtc;
+ struct virtio_gpu_output *output = drm_crtc_to_virtio_gpu_output(crtc);
struct virtio_gpu_framebuffer *vgfb;
struct virtio_gpu_object *bo;
+ unsigned long flags;
uint32_t handle;
if (plane->state->fb) {
@@ -96,6 +98,11 @@ static void virtio_gpu_plane_atomic_update(struct drm_plane *plane,
plane->state->crtc_y,
plane->state->crtc_w,
plane->state->crtc_h);
+
+ spin_lock_irqsave(&crtc->dev->event_lock, flags);
+ if (crtc->state->event)
+ drm_crtc_send_vblank_event(crtc, crtc->state->event);
+ spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
}
--
2.5.0
[toc] | [next] | [standalone]
| From | Daniel Stone <daniel@fooishbar.org> |
|---|---|
| Date | 2016-03-22 14:20 +0100 |
| Message-ID | <rfuo3-4SV-17@gated-at.bofh.it> |
| In reply to | #1362093 |
Hi, On 21 March 2016 at 19:23, Gustavo Padovan <gustavo@padovan.org> wrote: > @@ -96,6 +98,11 @@ static void virtio_gpu_plane_atomic_update(struct drm_plane *plane, > plane->state->crtc_y, > plane->state->crtc_w, > plane->state->crtc_h); > + > + spin_lock_irqsave(&crtc->dev->event_lock, flags); > + if (crtc->state->event) > + drm_crtc_send_vblank_event(crtc, crtc->state->event); > + spin_unlock_irqrestore(&crtc->dev->event_lock, flags); This seems like the wrong place to do it, in that it will generate one flip event per plane, rather than one per CRTC. So this should probably be done in the overall atomic_commit hook I think. Also, without some kind of delay, this means that we'll generate flip-complete events immediately, which will cause compositors like Weston to render infinitely fast. It's probably worth looking at what happened when this came up with Bochs - I'm not sure if we fake a 16ms delay, or refuse to do async modesets, or what. Cheers, Daniel
[toc] | [prev] | [next] | [standalone]
| From | Gustavo Padovan <gustavo@padovan.org> |
|---|---|
| Date | 2016-03-22 21:20 +0100 |
| Subject | [PATCH v2] drm/virtio: send vblank event after crtc updates |
| Message-ID | <rfAWu-1e6-9@gated-at.bofh.it> |
| In reply to | #1362093 |
From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
virtio_gpu was failing to send vblank events when using the atomic IOCTL
with the DRM_MODE_PAGE_FLIP_EVENT flag set. This patch fixes each and
enables atomic pageflips updates.
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
---
drivers/gpu/drm/virtio/virtgpu_display.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index b70bb8b..4f372e0 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -274,12 +274,24 @@ static int virtio_gpu_crtc_atomic_check(struct drm_crtc *crtc,
return 0;
}
+static void virtio_gpu_crtc_atomic_flush(struct drm_crtc *crtc,
+ struct drm_crtc_state *old_state)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&crtc->dev->event_lock, flags);
+ if (crtc->state->event)
+ drm_crtc_send_vblank_event(crtc, crtc->state->event);
+ spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
+}
+
static const struct drm_crtc_helper_funcs virtio_gpu_crtc_helper_funcs = {
.enable = virtio_gpu_crtc_enable,
.disable = virtio_gpu_crtc_disable,
.mode_fixup = virtio_gpu_crtc_mode_fixup,
.mode_set_nofb = virtio_gpu_crtc_mode_set_nofb,
.atomic_check = virtio_gpu_crtc_atomic_check,
+ .atomic_flush = virtio_gpu_crtc_atomic_flush,
};
static void virtio_gpu_enc_mode_set(struct drm_encoder *encoder,
--
2.5.0
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web