diff options
author | Jesse Barnes <jbarnes@virtuousgeek.org> | 2010-07-01 19:48:09 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-07-02 00:03:24 -0400 |
commit | b9c2c9ae882f058084e13e339925dbf8d2d20271 (patch) | |
tree | 2c3baccc55ef03477a4fc3e08473ea35931e56ec /drivers/gpu/drm/drm_irq.c | |
parent | ac2874b980e05ed7a4ea8fed7b0a92428b51ce58 (diff) |
drm: add per-event vblank event trace points
Allows us to track each process that requests and completes events.
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/drm_irq.c')
-rw-r--r-- | drivers/gpu/drm/drm_irq.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 6d201a89441c..c2ecb3ed009f 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c | |||
@@ -588,6 +588,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe, | |||
588 | return -ENOMEM; | 588 | return -ENOMEM; |
589 | 589 | ||
590 | e->pipe = pipe; | 590 | e->pipe = pipe; |
591 | e->base.pid = current->pid; | ||
591 | e->event.base.type = DRM_EVENT_VBLANK; | 592 | e->event.base.type = DRM_EVENT_VBLANK; |
592 | e->event.base.length = sizeof e->event; | 593 | e->event.base.length = sizeof e->event; |
593 | e->event.user_data = vblwait->request.signal; | 594 | e->event.user_data = vblwait->request.signal; |
@@ -615,6 +616,9 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe, | |||
615 | DRM_DEBUG("event on vblank count %d, current %d, crtc %d\n", | 616 | DRM_DEBUG("event on vblank count %d, current %d, crtc %d\n", |
616 | vblwait->request.sequence, seq, pipe); | 617 | vblwait->request.sequence, seq, pipe); |
617 | 618 | ||
619 | trace_drm_vblank_event_queued(current->pid, pipe, | ||
620 | vblwait->request.sequence); | ||
621 | |||
618 | e->event.sequence = vblwait->request.sequence; | 622 | e->event.sequence = vblwait->request.sequence; |
619 | if ((seq - vblwait->request.sequence) <= (1 << 23)) { | 623 | if ((seq - vblwait->request.sequence) <= (1 << 23)) { |
620 | e->event.tv_sec = now.tv_sec; | 624 | e->event.tv_sec = now.tv_sec; |
@@ -622,6 +626,8 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe, | |||
622 | drm_vblank_put(dev, e->pipe); | 626 | drm_vblank_put(dev, e->pipe); |
623 | list_add_tail(&e->base.link, &e->base.file_priv->event_list); | 627 | list_add_tail(&e->base.link, &e->base.file_priv->event_list); |
624 | wake_up_interruptible(&e->base.file_priv->event_wait); | 628 | wake_up_interruptible(&e->base.file_priv->event_wait); |
629 | trace_drm_vblank_event_delivered(current->pid, pipe, | ||
630 | vblwait->request.sequence); | ||
625 | } else { | 631 | } else { |
626 | list_add_tail(&e->base.link, &dev->vblank_event_list); | 632 | list_add_tail(&e->base.link, &dev->vblank_event_list); |
627 | } | 633 | } |
@@ -752,6 +758,8 @@ void drm_handle_vblank_events(struct drm_device *dev, int crtc) | |||
752 | drm_vblank_put(dev, e->pipe); | 758 | drm_vblank_put(dev, e->pipe); |
753 | list_move_tail(&e->base.link, &e->base.file_priv->event_list); | 759 | list_move_tail(&e->base.link, &e->base.file_priv->event_list); |
754 | wake_up_interruptible(&e->base.file_priv->event_wait); | 760 | wake_up_interruptible(&e->base.file_priv->event_wait); |
761 | trace_drm_vblank_event_delivered(e->base.pid, e->pipe, | ||
762 | e->event.sequence); | ||
755 | } | 763 | } |
756 | 764 | ||
757 | spin_unlock_irqrestore(&dev->event_lock, flags); | 765 | spin_unlock_irqrestore(&dev->event_lock, flags); |