diff options
-rw-r--r-- | kernel/trace/ring_buffer.c | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 925f629658d6..afb04b9b818a 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
@@ -1968,7 +1968,7 @@ rb_add_time_stamp(struct ring_buffer_event *event, u64 delta) | |||
1968 | 1968 | ||
1969 | /** | 1969 | /** |
1970 | * rb_update_event - update event type and data | 1970 | * rb_update_event - update event type and data |
1971 | * @event: the even to update | 1971 | * @event: the event to update |
1972 | * @type: the type of event | 1972 | * @type: the type of event |
1973 | * @length: the size of the event field in the ring buffer | 1973 | * @length: the size of the event field in the ring buffer |
1974 | * | 1974 | * |
@@ -3341,21 +3341,16 @@ static void rb_iter_reset(struct ring_buffer_iter *iter) | |||
3341 | struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer; | 3341 | struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer; |
3342 | 3342 | ||
3343 | /* Iterator usage is expected to have record disabled */ | 3343 | /* Iterator usage is expected to have record disabled */ |
3344 | if (list_empty(&cpu_buffer->reader_page->list)) { | 3344 | iter->head_page = cpu_buffer->reader_page; |
3345 | iter->head_page = rb_set_head_page(cpu_buffer); | 3345 | iter->head = cpu_buffer->reader_page->read; |
3346 | if (unlikely(!iter->head_page)) | 3346 | |
3347 | return; | 3347 | iter->cache_reader_page = iter->head_page; |
3348 | iter->head = iter->head_page->read; | 3348 | iter->cache_read = iter->head; |
3349 | } else { | 3349 | |
3350 | iter->head_page = cpu_buffer->reader_page; | ||
3351 | iter->head = cpu_buffer->reader_page->read; | ||
3352 | } | ||
3353 | if (iter->head) | 3350 | if (iter->head) |
3354 | iter->read_stamp = cpu_buffer->read_stamp; | 3351 | iter->read_stamp = cpu_buffer->read_stamp; |
3355 | else | 3352 | else |
3356 | iter->read_stamp = iter->head_page->page->time_stamp; | 3353 | iter->read_stamp = iter->head_page->page->time_stamp; |
3357 | iter->cache_reader_page = cpu_buffer->reader_page; | ||
3358 | iter->cache_read = cpu_buffer->read; | ||
3359 | } | 3354 | } |
3360 | 3355 | ||
3361 | /** | 3356 | /** |
@@ -3748,12 +3743,14 @@ rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts) | |||
3748 | return NULL; | 3743 | return NULL; |
3749 | 3744 | ||
3750 | /* | 3745 | /* |
3751 | * We repeat when a time extend is encountered. | 3746 | * We repeat when a time extend is encountered or we hit |
3752 | * Since the time extend is always attached to a data event, | 3747 | * the end of the page. Since the time extend is always attached |
3753 | * we should never loop more than once. | 3748 | * to a data event, we should never loop more than three times. |
3754 | * (We never hit the following condition more than twice). | 3749 | * Once for going to next page, once on time extend, and |
3750 | * finally once to get the event. | ||
3751 | * (We never hit the following condition more than thrice). | ||
3755 | */ | 3752 | */ |
3756 | if (RB_WARN_ON(cpu_buffer, ++nr_loops > 2)) | 3753 | if (RB_WARN_ON(cpu_buffer, ++nr_loops > 3)) |
3757 | return NULL; | 3754 | return NULL; |
3758 | 3755 | ||
3759 | if (rb_per_cpu_empty(cpu_buffer)) | 3756 | if (rb_per_cpu_empty(cpu_buffer)) |