aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/ring_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/ring_buffer.c')
-rw-r--r--kernel/trace/ring_buffer.c31
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))