From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932266AbcCUTXV (ORCPT ); Mon, 21 Mar 2016 15:23:21 -0400 Received: from mail-yw0-f196.google.com ([209.85.161.196]:35181 "EHLO mail-yw0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932126AbcCUTXQ (ORCPT ); Mon, 21 Mar 2016 15:23:16 -0400 From: Gustavo Padovan To: Gerd Hoffmann Cc: Gustavo Padovan , David Airlie , dri-devel@lists.freedesktop.org (open list:VIRTIO GPU DRIVER), virtualization@lists.linux-foundation.org (open list:VIRTIO GPU DRIVER), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 2/2] drm/virtio: send vblank event on plane atomic update Date: Mon, 21 Mar 2016 16:23:07 -0300 Message-Id: <1458588187-26002-2-git-send-email-gustavo@padovan.org> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1458588187-26002-1-git-send-email-gustavo@padovan.org> References: <1458588187-26002-1-git-send-email-gustavo@padovan.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Gustavo Padovan 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 --- 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