From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mario Kleiner Subject: [PATCH 2/3] drm: Fix emitted vblank timestamps in drm_vblank_off() Date: Wed, 6 Aug 2014 03:22:45 +0200 Message-ID: <1407288166-19881-3-git-send-email-mario.kleiner.de@gmail.com> References: <1407288166-19881-1-git-send-email-mario.kleiner.de@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail-wi0-f182.google.com (mail-wi0-f182.google.com [209.85.212.182]) by gabe.freedesktop.org (Postfix) with ESMTP id 8C92C6E56C for ; Tue, 5 Aug 2014 18:23:50 -0700 (PDT) Received: by mail-wi0-f182.google.com with SMTP id d1so2350854wiv.9 for ; Tue, 05 Aug 2014 18:23:49 -0700 (PDT) In-Reply-To: <1407288166-19881-1-git-send-email-mario.kleiner.de@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: airlied@redhat.com, stable@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org Move the query for vblank count and time before the vblank_disable_and_save(), because the disable fn will invalidate the vblank timestamps, so all emitted events would carry an invalid zero timestamp instead of the timestamp of the vblank of vblank disable. This could confuse clients. Signed-off-by: Mario Kleiner Cc: stable@vger.kernel.org --- drivers/gpu/drm/drm_irq.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 553a58c..89e91e3 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c @@ -1019,13 +1019,14 @@ void drm_vblank_off(struct drm_device *dev, int crtc) unsigned long irqflags; unsigned int seq; + /* Get 'now' vblank ts before it gets cleared by vblank disable */ + seq = drm_vblank_count_and_time(dev, crtc, &now); + spin_lock_irqsave(&dev->vbl_lock, irqflags); vblank_disable_and_save(dev, crtc); wake_up(&dev->vblank[crtc].queue); /* Send any queued vblank events, lest the natives grow disquiet */ - seq = drm_vblank_count_and_time(dev, crtc, &now); - spin_lock(&dev->event_lock); list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) { if (e->pipe != crtc) -- 1.9.1