diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2009-10-17 19:09:09 -0400 |
---|---|---|
committer | Frederic Weisbecker <fweisbec@gmail.com> | 2009-10-17 19:12:33 -0400 |
commit | 0f8f86c7bdd1c954fbe153af437a0d91a6c5721a (patch) | |
tree | 94a8d419a470a4f9852ca397bb9bbe48db92ff5c /kernel/trace/ring_buffer.c | |
parent | dca2d6ac09d9ef59ff46820d4f0c94b08a671202 (diff) | |
parent | f39cdf25bf77219676ec5360980ac40b1a7e144a (diff) |
Merge commit 'perf/core' into perf/hw-breakpoint
Conflicts:
kernel/Makefile
kernel/trace/Makefile
kernel/trace/trace.h
samples/Makefile
Merge reason: We need to be uptodate with the perf events development
branch because we plan to rewrite the breakpoints API on top of
perf events.
Diffstat (limited to 'kernel/trace/ring_buffer.c')
-rw-r--r-- | kernel/trace/ring_buffer.c | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 454e74e718cf..e43c928356ee 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
@@ -201,8 +201,6 @@ int tracing_is_on(void) | |||
201 | } | 201 | } |
202 | EXPORT_SYMBOL_GPL(tracing_is_on); | 202 | EXPORT_SYMBOL_GPL(tracing_is_on); |
203 | 203 | ||
204 | #include "trace.h" | ||
205 | |||
206 | #define RB_EVNT_HDR_SIZE (offsetof(struct ring_buffer_event, array)) | 204 | #define RB_EVNT_HDR_SIZE (offsetof(struct ring_buffer_event, array)) |
207 | #define RB_ALIGNMENT 4U | 205 | #define RB_ALIGNMENT 4U |
208 | #define RB_MAX_SMALL_DATA (RB_ALIGNMENT * RINGBUF_TYPE_DATA_TYPE_LEN_MAX) | 206 | #define RB_MAX_SMALL_DATA (RB_ALIGNMENT * RINGBUF_TYPE_DATA_TYPE_LEN_MAX) |
@@ -399,18 +397,21 @@ int ring_buffer_print_page_header(struct trace_seq *s) | |||
399 | int ret; | 397 | int ret; |
400 | 398 | ||
401 | ret = trace_seq_printf(s, "\tfield: u64 timestamp;\t" | 399 | ret = trace_seq_printf(s, "\tfield: u64 timestamp;\t" |
402 | "offset:0;\tsize:%u;\n", | 400 | "offset:0;\tsize:%u;\tsigned:%u;\n", |
403 | (unsigned int)sizeof(field.time_stamp)); | 401 | (unsigned int)sizeof(field.time_stamp), |
402 | (unsigned int)is_signed_type(u64)); | ||
404 | 403 | ||
405 | ret = trace_seq_printf(s, "\tfield: local_t commit;\t" | 404 | ret = trace_seq_printf(s, "\tfield: local_t commit;\t" |
406 | "offset:%u;\tsize:%u;\n", | 405 | "offset:%u;\tsize:%u;\tsigned:%u;\n", |
407 | (unsigned int)offsetof(typeof(field), commit), | 406 | (unsigned int)offsetof(typeof(field), commit), |
408 | (unsigned int)sizeof(field.commit)); | 407 | (unsigned int)sizeof(field.commit), |
408 | (unsigned int)is_signed_type(long)); | ||
409 | 409 | ||
410 | ret = trace_seq_printf(s, "\tfield: char data;\t" | 410 | ret = trace_seq_printf(s, "\tfield: char data;\t" |
411 | "offset:%u;\tsize:%u;\n", | 411 | "offset:%u;\tsize:%u;\tsigned:%u;\n", |
412 | (unsigned int)offsetof(typeof(field), data), | 412 | (unsigned int)offsetof(typeof(field), data), |
413 | (unsigned int)BUF_PAGE_SIZE); | 413 | (unsigned int)BUF_PAGE_SIZE, |
414 | (unsigned int)is_signed_type(char)); | ||
414 | 415 | ||
415 | return ret; | 416 | return ret; |
416 | } | 417 | } |
@@ -701,8 +702,8 @@ static int rb_head_page_set(struct ring_buffer_per_cpu *cpu_buffer, | |||
701 | 702 | ||
702 | val &= ~RB_FLAG_MASK; | 703 | val &= ~RB_FLAG_MASK; |
703 | 704 | ||
704 | ret = (unsigned long)cmpxchg(&list->next, | 705 | ret = cmpxchg((unsigned long *)&list->next, |
705 | val | old_flag, val | new_flag); | 706 | val | old_flag, val | new_flag); |
706 | 707 | ||
707 | /* check if the reader took the page */ | 708 | /* check if the reader took the page */ |
708 | if ((ret & ~RB_FLAG_MASK) != val) | 709 | if ((ret & ~RB_FLAG_MASK) != val) |
@@ -794,7 +795,7 @@ static int rb_head_page_replace(struct buffer_page *old, | |||
794 | val = *ptr & ~RB_FLAG_MASK; | 795 | val = *ptr & ~RB_FLAG_MASK; |
795 | val |= RB_PAGE_HEAD; | 796 | val |= RB_PAGE_HEAD; |
796 | 797 | ||
797 | ret = cmpxchg(ptr, val, &new->list); | 798 | ret = cmpxchg(ptr, val, (unsigned long)&new->list); |
798 | 799 | ||
799 | return ret == val; | 800 | return ret == val; |
800 | } | 801 | } |
@@ -2997,15 +2998,12 @@ static void rb_advance_iter(struct ring_buffer_iter *iter) | |||
2997 | } | 2998 | } |
2998 | 2999 | ||
2999 | static struct ring_buffer_event * | 3000 | static struct ring_buffer_event * |
3000 | rb_buffer_peek(struct ring_buffer *buffer, int cpu, u64 *ts) | 3001 | rb_buffer_peek(struct ring_buffer_per_cpu *cpu_buffer, u64 *ts) |
3001 | { | 3002 | { |
3002 | struct ring_buffer_per_cpu *cpu_buffer; | ||
3003 | struct ring_buffer_event *event; | 3003 | struct ring_buffer_event *event; |
3004 | struct buffer_page *reader; | 3004 | struct buffer_page *reader; |
3005 | int nr_loops = 0; | 3005 | int nr_loops = 0; |
3006 | 3006 | ||
3007 | cpu_buffer = buffer->buffers[cpu]; | ||
3008 | |||
3009 | again: | 3007 | again: |
3010 | /* | 3008 | /* |
3011 | * We repeat when a timestamp is encountered. It is possible | 3009 | * We repeat when a timestamp is encountered. It is possible |
@@ -3049,7 +3047,7 @@ rb_buffer_peek(struct ring_buffer *buffer, int cpu, u64 *ts) | |||
3049 | case RINGBUF_TYPE_DATA: | 3047 | case RINGBUF_TYPE_DATA: |
3050 | if (ts) { | 3048 | if (ts) { |
3051 | *ts = cpu_buffer->read_stamp + event->time_delta; | 3049 | *ts = cpu_buffer->read_stamp + event->time_delta; |
3052 | ring_buffer_normalize_time_stamp(buffer, | 3050 | ring_buffer_normalize_time_stamp(cpu_buffer->buffer, |
3053 | cpu_buffer->cpu, ts); | 3051 | cpu_buffer->cpu, ts); |
3054 | } | 3052 | } |
3055 | return event; | 3053 | return event; |
@@ -3168,7 +3166,7 @@ ring_buffer_peek(struct ring_buffer *buffer, int cpu, u64 *ts) | |||
3168 | local_irq_save(flags); | 3166 | local_irq_save(flags); |
3169 | if (dolock) | 3167 | if (dolock) |
3170 | spin_lock(&cpu_buffer->reader_lock); | 3168 | spin_lock(&cpu_buffer->reader_lock); |
3171 | event = rb_buffer_peek(buffer, cpu, ts); | 3169 | event = rb_buffer_peek(cpu_buffer, ts); |
3172 | if (event && event->type_len == RINGBUF_TYPE_PADDING) | 3170 | if (event && event->type_len == RINGBUF_TYPE_PADDING) |
3173 | rb_advance_reader(cpu_buffer); | 3171 | rb_advance_reader(cpu_buffer); |
3174 | if (dolock) | 3172 | if (dolock) |
@@ -3237,7 +3235,7 @@ ring_buffer_consume(struct ring_buffer *buffer, int cpu, u64 *ts) | |||
3237 | if (dolock) | 3235 | if (dolock) |
3238 | spin_lock(&cpu_buffer->reader_lock); | 3236 | spin_lock(&cpu_buffer->reader_lock); |
3239 | 3237 | ||
3240 | event = rb_buffer_peek(buffer, cpu, ts); | 3238 | event = rb_buffer_peek(cpu_buffer, ts); |
3241 | if (event) | 3239 | if (event) |
3242 | rb_advance_reader(cpu_buffer); | 3240 | rb_advance_reader(cpu_buffer); |
3243 | 3241 | ||