aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2010-07-07 04:38:44 -0400
committerDave Airlie <airlied@redhat.com>2010-07-07 04:38:44 -0400
commit102e73463e1bb921b3a829a1392a29dba16bbabd (patch)
tree8c569c1a6a7fd3ffc21cf1780bd8fa62be5b23b2
parent5c8d7171cc4984351af802a525675d50ae555a7b (diff)
parente5510fac98a706c424034950f55bb5e819c46f51 (diff)
Merge branch 'drm-tracepoints' into drm-testing
-rw-r--r--drivers/gpu/drm/Makefile5
-rw-r--r--drivers/gpu/drm/drm_irq.c11
-rw-r--r--drivers/gpu/drm/drm_trace.h66
-rw-r--r--drivers/gpu/drm/drm_trace_points.c4
-rw-r--r--drivers/gpu/drm/i915/i915_trace.h36
-rw-r--r--drivers/gpu/drm/i915/intel_display.c5
-rw-r--r--include/drm/drmP.h2
7 files changed, 128 insertions, 1 deletions
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index b4b2b480d0c..df8f9232286 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -11,7 +11,8 @@ drm-y := drm_auth.o drm_buffer.o drm_bufs.o drm_cache.o \
11 drm_agpsupport.o drm_scatter.o ati_pcigart.o drm_pci.o \ 11 drm_agpsupport.o drm_scatter.o ati_pcigart.o drm_pci.o \
12 drm_platform.o drm_sysfs.o drm_hashtab.o drm_sman.o drm_mm.o \ 12 drm_platform.o drm_sysfs.o drm_hashtab.o drm_sman.o drm_mm.o \
13 drm_crtc.o drm_modes.o drm_edid.o \ 13 drm_crtc.o drm_modes.o drm_edid.o \
14 drm_info.o drm_debugfs.o drm_encoder_slave.o 14 drm_info.o drm_debugfs.o drm_encoder_slave.o \
15 drm_trace_points.o
15 16
16drm-$(CONFIG_COMPAT) += drm_ioc32.o 17drm-$(CONFIG_COMPAT) += drm_ioc32.o
17 18
@@ -19,6 +20,8 @@ drm_kms_helper-y := drm_fb_helper.o drm_crtc_helper.o drm_dp_i2c_helper.o
19 20
20obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o 21obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
21 22
23CFLAGS_drm_trace_points.o := -I$(src)
24
22obj-$(CONFIG_DRM) += drm.o 25obj-$(CONFIG_DRM) += drm.o
23obj-$(CONFIG_DRM_TTM) += ttm/ 26obj-$(CONFIG_DRM_TTM) += ttm/
24obj-$(CONFIG_DRM_TDFX) += tdfx/ 27obj-$(CONFIG_DRM_TDFX) += tdfx/
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index 6353b625e09..9d3a5030b6e 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/**
diff --git a/drivers/gpu/drm/drm_trace.h b/drivers/gpu/drm/drm_trace.h
new file mode 100644
index 00000000000..03ea964aa60
--- /dev/null
+++ b/drivers/gpu/drm/drm_trace.h
@@ -0,0 +1,66 @@
1#if !defined(_DRM_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
2#define _DRM_TRACE_H_
3
4#include <linux/stringify.h>
5#include <linux/types.h>
6#include <linux/tracepoint.h>
7
8#undef TRACE_SYSTEM
9#define TRACE_SYSTEM drm
10#define TRACE_SYSTEM_STRING __stringify(TRACE_SYSTEM)
11#define TRACE_INCLUDE_FILE drm_trace
12
13TRACE_EVENT(drm_vblank_event,
14 TP_PROTO(int crtc, unsigned int seq),
15 TP_ARGS(crtc, seq),
16 TP_STRUCT__entry(
17 __field(int, crtc)
18 __field(unsigned int, seq)
19 ),
20 TP_fast_assign(
21 __entry->crtc = crtc;
22 __entry->seq = seq;
23 ),
24 TP_printk("crtc=%d, seq=%d", __entry->crtc, __entry->seq)
25);
26
27TRACE_EVENT(drm_vblank_event_queued,
28 TP_PROTO(pid_t pid, int crtc, unsigned int seq),
29 TP_ARGS(pid, crtc, seq),
30 TP_STRUCT__entry(
31 __field(pid_t, pid)
32 __field(int, crtc)
33 __field(unsigned int, seq)
34 ),
35 TP_fast_assign(
36 __entry->pid = pid;
37 __entry->crtc = crtc;
38 __entry->seq = seq;
39 ),
40 TP_printk("pid=%d, crtc=%d, seq=%d", __entry->pid, __entry->crtc, \
41 __entry->seq)
42);
43
44TRACE_EVENT(drm_vblank_event_delivered,
45 TP_PROTO(pid_t pid, int crtc, unsigned int seq),
46 TP_ARGS(pid, crtc, seq),
47 TP_STRUCT__entry(
48 __field(pid_t, pid)
49 __field(int, crtc)
50 __field(unsigned int, seq)
51 ),
52 TP_fast_assign(
53 __entry->pid = pid;
54 __entry->crtc = crtc;
55 __entry->seq = seq;
56 ),
57 TP_printk("pid=%d, crtc=%d, seq=%d", __entry->pid, __entry->crtc, \
58 __entry->seq)
59);
60
61#endif /* _DRM_TRACE_H_ */
62
63/* This part must be outside protection */
64#undef TRACE_INCLUDE_PATH
65#define TRACE_INCLUDE_PATH .
66#include <trace/define_trace.h>
diff --git a/drivers/gpu/drm/drm_trace_points.c b/drivers/gpu/drm/drm_trace_points.c
new file mode 100644
index 00000000000..0d0eb90864a
--- /dev/null
+++ b/drivers/gpu/drm/drm_trace_points.c
@@ -0,0 +1,4 @@
1#include "drmP.h"
2
3#define CREATE_TRACE_POINTS
4#include "drm_trace.h"
diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
index fab21760dd5..fea97a21cc1 100644
--- a/drivers/gpu/drm/i915/i915_trace.h
+++ b/drivers/gpu/drm/i915/i915_trace.h
@@ -262,6 +262,42 @@ DEFINE_EVENT(i915_ring, i915_ring_wait_end,
262 TP_ARGS(dev) 262 TP_ARGS(dev)
263); 263);
264 264
265TRACE_EVENT(i915_flip_request,
266 TP_PROTO(int plane, struct drm_gem_object *obj),
267
268 TP_ARGS(plane, obj),
269
270 TP_STRUCT__entry(
271 __field(int, plane)
272 __field(struct drm_gem_object *, obj)
273 ),
274
275 TP_fast_assign(
276 __entry->plane = plane;
277 __entry->obj = obj;
278 ),
279
280 TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
281);
282
283TRACE_EVENT(i915_flip_complete,
284 TP_PROTO(int plane, struct drm_gem_object *obj),
285
286 TP_ARGS(plane, obj),
287
288 TP_STRUCT__entry(
289 __field(int, plane)
290 __field(struct drm_gem_object *, obj)
291 ),
292
293 TP_fast_assign(
294 __entry->plane = plane;
295 __entry->obj = obj;
296 ),
297
298 TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
299);
300
265#endif /* _I915_TRACE_H_ */ 301#endif /* _I915_TRACE_H_ */
266 302
267/* This part must be outside protection */ 303/* This part must be outside protection */
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 68dcf36e279..f879589bead 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -33,6 +33,7 @@
33#include "intel_drv.h" 33#include "intel_drv.h"
34#include "i915_drm.h" 34#include "i915_drm.h"
35#include "i915_drv.h" 35#include "i915_drv.h"
36#include "i915_trace.h"
36#include "drm_dp_helper.h" 37#include "drm_dp_helper.h"
37 38
38#include "drm_crtc_helper.h" 39#include "drm_crtc_helper.h"
@@ -4650,6 +4651,8 @@ static void do_intel_finish_page_flip(struct drm_device *dev,
4650 atomic_dec_and_test(&obj_priv->pending_flip)) 4651 atomic_dec_and_test(&obj_priv->pending_flip))
4651 DRM_WAKEUP(&dev_priv->pending_flip_queue); 4652 DRM_WAKEUP(&dev_priv->pending_flip_queue);
4652 schedule_work(&work->work); 4653 schedule_work(&work->work);
4654
4655 trace_i915_flip_complete(intel_crtc->plane, work->pending_flip_obj);
4653} 4656}
4654 4657
4655void intel_finish_page_flip(struct drm_device *dev, int pipe) 4658void intel_finish_page_flip(struct drm_device *dev, int pipe)
@@ -4781,6 +4784,8 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
4781 4784
4782 mutex_unlock(&dev->struct_mutex); 4785 mutex_unlock(&dev->struct_mutex);
4783 4786
4787 trace_i915_flip_request(intel_crtc->plane, obj);
4788
4784 return 0; 4789 return 0;
4785} 4790}
4786 4791
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 6235169d595..04b564bfc4a 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -406,6 +406,8 @@ struct drm_pending_event {
406 struct drm_event *event; 406 struct drm_event *event;
407 struct list_head link; 407 struct list_head link;
408 struct drm_file *file_priv; 408 struct drm_file *file_priv;
409 pid_t pid; /* pid of requester, no guarantee it's valid by the time
410 we deliver the event, for tracing only */
409 void (*destroy)(struct drm_pending_event *event); 411 void (*destroy)(struct drm_pending_event *event);
410}; 412};
411 413