Skip to content

Commit

Permalink
drm/imx: use drm_send_vblank_event() helper
Browse files Browse the repository at this point in the history
Also, slightly changes the behavior to always put the vblank irq,
even if userspace did not request a vblank event.  As far as I
can tell, the previous code would leak a vblank irq refcnt if
userspace requested a pageflip without event.

Signed-off-by: Rob Clark <rob@ti.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
  • Loading branch information
Rob Clark authored and Dave Airlie committed May 21, 2013
1 parent f7e96d7 commit 0eca56f
Showing 1 changed file with 2 additions and 19 deletions.
21 changes: 2 additions & 19 deletions drivers/staging/imx-drm/ipuv3-crtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,31 +311,14 @@ static int ipu_crtc_mode_set(struct drm_crtc *crtc,

static void ipu_crtc_handle_pageflip(struct ipu_crtc *ipu_crtc)
{
struct drm_pending_vblank_event *e;
struct timeval now;
unsigned long flags;
struct drm_device *drm = ipu_crtc->base.dev;

spin_lock_irqsave(&drm->event_lock, flags);

e = ipu_crtc->page_flip_event;
if (!e) {
spin_unlock_irqrestore(&drm->event_lock, flags);
return;
}

do_gettimeofday(&now);
e->event.sequence = 0;
e->event.tv_sec = now.tv_sec;
e->event.tv_usec = now.tv_usec;
if (ipu_crtc->page_flip_event)
drm_send_vblank_event(drm, -1, ipu_crtc->page_flip_event);
ipu_crtc->page_flip_event = NULL;

imx_drm_crtc_vblank_put(ipu_crtc->imx_crtc);

list_add_tail(&e->base.link, &e->base.file_priv->event_list);

wake_up_interruptible(&e->base.file_priv->event_wait);

spin_unlock_irqrestore(&drm->event_lock, flags);
}

Expand Down

0 comments on commit 0eca56f

Please sign in to comment.