diff options
Diffstat (limited to 'kernel/trace/ring_buffer.c')
| -rw-r--r-- | kernel/trace/ring_buffer.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 75f1d05ea82d..9c6045a27ba3 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
| @@ -1887,12 +1887,6 @@ rb_event_index(struct ring_buffer_event *event) | |||
| 1887 | return (addr & ~PAGE_MASK) - BUF_PAGE_HDR_SIZE; | 1887 | return (addr & ~PAGE_MASK) - BUF_PAGE_HDR_SIZE; |
| 1888 | } | 1888 | } |
| 1889 | 1889 | ||
| 1890 | static void rb_reset_reader_page(struct ring_buffer_per_cpu *cpu_buffer) | ||
| 1891 | { | ||
| 1892 | cpu_buffer->read_stamp = cpu_buffer->reader_page->page->time_stamp; | ||
| 1893 | cpu_buffer->reader_page->read = 0; | ||
| 1894 | } | ||
| 1895 | |||
| 1896 | static void rb_inc_iter(struct ring_buffer_iter *iter) | 1890 | static void rb_inc_iter(struct ring_buffer_iter *iter) |
| 1897 | { | 1891 | { |
| 1898 | struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer; | 1892 | struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer; |
| @@ -2803,8 +2797,11 @@ rb_reserve_next_event(struct ring_buffer *buffer, | |||
| 2803 | 2797 | ||
| 2804 | event = __rb_reserve_next(cpu_buffer, &info); | 2798 | event = __rb_reserve_next(cpu_buffer, &info); |
| 2805 | 2799 | ||
| 2806 | if (unlikely(PTR_ERR(event) == -EAGAIN)) | 2800 | if (unlikely(PTR_ERR(event) == -EAGAIN)) { |
| 2801 | if (info.add_timestamp) | ||
| 2802 | info.length -= RB_LEN_TIME_EXTEND; | ||
| 2807 | goto again; | 2803 | goto again; |
| 2804 | } | ||
| 2808 | 2805 | ||
| 2809 | if (!event) | 2806 | if (!event) |
| 2810 | goto out_fail; | 2807 | goto out_fail; |
| @@ -3626,7 +3623,7 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) | |||
| 3626 | 3623 | ||
| 3627 | /* Finally update the reader page to the new head */ | 3624 | /* Finally update the reader page to the new head */ |
| 3628 | cpu_buffer->reader_page = reader; | 3625 | cpu_buffer->reader_page = reader; |
| 3629 | rb_reset_reader_page(cpu_buffer); | 3626 | cpu_buffer->reader_page->read = 0; |
| 3630 | 3627 | ||
| 3631 | if (overwrite != cpu_buffer->last_overrun) { | 3628 | if (overwrite != cpu_buffer->last_overrun) { |
| 3632 | cpu_buffer->lost_events = overwrite - cpu_buffer->last_overrun; | 3629 | cpu_buffer->lost_events = overwrite - cpu_buffer->last_overrun; |
| @@ -3636,6 +3633,10 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) | |||
| 3636 | goto again; | 3633 | goto again; |
| 3637 | 3634 | ||
| 3638 | out: | 3635 | out: |
| 3636 | /* Update the read_stamp on the first event */ | ||
| 3637 | if (reader && reader->read == 0) | ||
| 3638 | cpu_buffer->read_stamp = reader->page->time_stamp; | ||
| 3639 | |||
| 3639 | arch_spin_unlock(&cpu_buffer->lock); | 3640 | arch_spin_unlock(&cpu_buffer->lock); |
| 3640 | local_irq_restore(flags); | 3641 | local_irq_restore(flags); |
| 3641 | 3642 | ||
