diff options
author | Dave Airlie <airlied@redhat.com> | 2010-07-07 04:38:44 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-07-07 04:38:44 -0400 |
commit | 102e73463e1bb921b3a829a1392a29dba16bbabd (patch) | |
tree | 8c569c1a6a7fd3ffc21cf1780bd8fa62be5b23b2 /drivers/gpu/drm/drm_irq.c | |
parent | 5c8d7171cc4984351af802a525675d50ae555a7b (diff) | |
parent | e5510fac98a706c424034950f55bb5e819c46f51 (diff) |
Merge branch 'drm-tracepoints' into drm-testing
Diffstat (limited to 'drivers/gpu/drm/drm_irq.c')
-rw-r--r-- | drivers/gpu/drm/drm_irq.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 6353b625e099..9d3a5030b6e1 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c | |||
@@ -34,6 +34,7 @@ | |||
34 | */ | 34 | */ |
35 | 35 | ||
36 | #include "drmP.h" | 36 | #include "drmP.h" |
37 | #include "drm_trace.h" | ||
37 | 38 | ||
38 | #include <linux/interrupt.h> /* For task queue support */ | 39 | #include <linux/interrupt.h> /* For task queue support */ |
39 | #include <linux/slab.h> | 40 | #include <linux/slab.h> |
@@ -590,6 +591,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe, | |||
590 | return -ENOMEM; | 591 | return -ENOMEM; |
591 | 592 | ||
592 | e->pipe = pipe; | 593 | e->pipe = pipe; |
594 | e->base.pid = current->pid; | ||
593 | e->event.base.type = DRM_EVENT_VBLANK; | 595 | e->event.base.type = DRM_EVENT_VBLANK; |
594 | e->event.base.length = sizeof e->event; | 596 | e->event.base.length = sizeof e->event; |
595 | e->event.user_data = vblwait->request.signal; | 597 | e->event.user_data = vblwait->request.signal; |
@@ -617,6 +619,9 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe, | |||
617 | DRM_DEBUG("event on vblank count %d, current %d, crtc %d\n", | 619 | DRM_DEBUG("event on vblank count %d, current %d, crtc %d\n", |
618 | vblwait->request.sequence, seq, pipe); | 620 | vblwait->request.sequence, seq, pipe); |
619 | 621 | ||
622 | trace_drm_vblank_event_queued(current->pid, pipe, | ||
623 | vblwait->request.sequence); | ||
624 | |||
620 | e->event.sequence = vblwait->request.sequence; | 625 | e->event.sequence = vblwait->request.sequence; |
621 | if ((seq - vblwait->request.sequence) <= (1 << 23)) { | 626 | if ((seq - vblwait->request.sequence) <= (1 << 23)) { |
622 | e->event.tv_sec = now.tv_sec; | 627 | e->event.tv_sec = now.tv_sec; |
@@ -624,6 +629,8 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe, | |||
624 | drm_vblank_put(dev, e->pipe); | 629 | drm_vblank_put(dev, e->pipe); |
625 | list_add_tail(&e->base.link, &e->base.file_priv->event_list); | 630 | list_add_tail(&e->base.link, &e->base.file_priv->event_list); |
626 | wake_up_interruptible(&e->base.file_priv->event_wait); | 631 | wake_up_interruptible(&e->base.file_priv->event_wait); |
632 | trace_drm_vblank_event_delivered(current->pid, pipe, | ||
633 | vblwait->request.sequence); | ||
627 | } else { | 634 | } else { |
628 | list_add_tail(&e->base.link, &dev->vblank_event_list); | 635 | list_add_tail(&e->base.link, &dev->vblank_event_list); |
629 | } | 636 | } |
@@ -754,9 +761,13 @@ void drm_handle_vblank_events(struct drm_device *dev, int crtc) | |||
754 | drm_vblank_put(dev, e->pipe); | 761 | drm_vblank_put(dev, e->pipe); |
755 | list_move_tail(&e->base.link, &e->base.file_priv->event_list); | 762 | list_move_tail(&e->base.link, &e->base.file_priv->event_list); |
756 | wake_up_interruptible(&e->base.file_priv->event_wait); | 763 | wake_up_interruptible(&e->base.file_priv->event_wait); |
764 | trace_drm_vblank_event_delivered(e->base.pid, e->pipe, | ||
765 | e->event.sequence); | ||
757 | } | 766 | } |
758 | 767 | ||
759 | spin_unlock_irqrestore(&dev->event_lock, flags); | 768 | spin_unlock_irqrestore(&dev->event_lock, flags); |
769 | |||
770 | trace_drm_vblank_event(crtc, seq); | ||
760 | } | 771 | } |
761 | 772 | ||
762 | /** | 773 | /** |