diff options
author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2011-02-05 23:15:09 -0500 |
---|---|---|
committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2011-11-24 15:21:04 -0500 |
commit | 1dead199b4ae68ab98eacec4a661fd5ecb5a2704 (patch) | |
tree | f15c9a70f79bab4e7c6ca8937710b9f02ee76f0b /litmus | |
parent | 4490f9ecf94e28458069a02e8cfcf4f385390499 (diff) |
Feather-Trace: keep track of release latency
Diffstat (limited to 'litmus')
-rw-r--r-- | litmus/rt_domain.c | 4 | ||||
-rw-r--r-- | litmus/trace.c | 20 |
2 files changed, 23 insertions, 1 deletions
diff --git a/litmus/rt_domain.c b/litmus/rt_domain.c index 81a5ac16f164..d405854cd39c 100644 --- a/litmus/rt_domain.c +++ b/litmus/rt_domain.c | |||
@@ -55,12 +55,14 @@ static enum hrtimer_restart on_release_timer(struct hrtimer *timer) | |||
55 | { | 55 | { |
56 | unsigned long flags; | 56 | unsigned long flags; |
57 | struct release_heap* rh; | 57 | struct release_heap* rh; |
58 | rh = container_of(timer, struct release_heap, timer); | ||
59 | |||
60 | TS_RELEASE_LATENCY(rh->release_time); | ||
58 | 61 | ||
59 | VTRACE("on_release_timer(0x%p) starts.\n", timer); | 62 | VTRACE("on_release_timer(0x%p) starts.\n", timer); |
60 | 63 | ||
61 | TS_RELEASE_START; | 64 | TS_RELEASE_START; |
62 | 65 | ||
63 | rh = container_of(timer, struct release_heap, timer); | ||
64 | 66 | ||
65 | raw_spin_lock_irqsave(&rh->dom->release_lock, flags); | 67 | raw_spin_lock_irqsave(&rh->dom->release_lock, flags); |
66 | VTRACE("CB has the release_lock 0x%p\n", &rh->dom->release_lock); | 68 | VTRACE("CB has the release_lock 0x%p\n", &rh->dom->release_lock); |
diff --git a/litmus/trace.c b/litmus/trace.c index 1e916aa406b9..f0eb2c706488 100644 --- a/litmus/trace.c +++ b/litmus/trace.c | |||
@@ -61,6 +61,26 @@ feather_callback void save_timestamp_cpu(unsigned long event, | |||
61 | __save_timestamp_cpu(event, TSK_UNKNOWN, cpu); | 61 | __save_timestamp_cpu(event, TSK_UNKNOWN, cpu); |
62 | } | 62 | } |
63 | 63 | ||
64 | feather_callback void save_task_latency(unsigned long event, | ||
65 | unsigned long when_ptr) | ||
66 | { | ||
67 | lt_t now = litmus_clock(); | ||
68 | lt_t *when = (lt_t*) when_ptr; | ||
69 | unsigned int seq_no; | ||
70 | int cpu = raw_smp_processor_id(); | ||
71 | struct timestamp *ts; | ||
72 | |||
73 | seq_no = fetch_and_inc((int *) &ts_seq_no); | ||
74 | if (ft_buffer_start_write(trace_ts_buf, (void**) &ts)) { | ||
75 | ts->event = event; | ||
76 | ts->timestamp = now - *when; | ||
77 | ts->seq_no = seq_no; | ||
78 | ts->cpu = cpu; | ||
79 | ts->task_type = TSK_RT; | ||
80 | ft_buffer_finish_write(trace_ts_buf, ts); | ||
81 | } | ||
82 | } | ||
83 | |||
64 | /******************************************************************************/ | 84 | /******************************************************************************/ |
65 | /* DEVICE FILE DRIVER */ | 85 | /* DEVICE FILE DRIVER */ |
66 | /******************************************************************************/ | 86 | /******************************************************************************/ |