|
@@ -1968,7 +1968,7 @@ rb_add_time_stamp(struct ring_buffer_event *event, u64 delta)
|
|
|
|
|
|
/**
|
|
|
* rb_update_event - update event type and data
|
|
|
- * @event: the even to update
|
|
|
+ * @event: the event to update
|
|
|
* @type: the type of event
|
|
|
* @length: the size of the event field in the ring buffer
|
|
|
*
|
|
@@ -3341,21 +3341,16 @@ static void rb_iter_reset(struct ring_buffer_iter *iter)
|
|
|
struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
|
|
|
|
|
|
/* Iterator usage is expected to have record disabled */
|
|
|
- if (list_empty(&cpu_buffer->reader_page->list)) {
|
|
|
- iter->head_page = rb_set_head_page(cpu_buffer);
|
|
|
- if (unlikely(!iter->head_page))
|
|
|
- return;
|
|
|
- iter->head = iter->head_page->read;
|
|
|
- } else {
|
|
|
- iter->head_page = cpu_buffer->reader_page;
|
|
|
- iter->head = cpu_buffer->reader_page->read;
|
|
|
- }
|
|
|
+ iter->head_page = cpu_buffer->reader_page;
|
|
|
+ iter->head = cpu_buffer->reader_page->read;
|
|
|
+
|
|
|
+ iter->cache_reader_page = iter->head_page;
|
|
|
+ iter->cache_read = iter->head;
|
|
|
+
|
|
|
if (iter->head)
|
|
|
iter->read_stamp = cpu_buffer->read_stamp;
|
|
|
else
|
|
|
iter->read_stamp = iter->head_page->page->time_stamp;
|
|
|
- iter->cache_reader_page = cpu_buffer->reader_page;
|
|
|
- iter->cache_read = cpu_buffer->read;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -3748,12 +3743,14 @@ rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts)
|
|
|
return NULL;
|
|
|
|
|
|
/*
|
|
|
- * We repeat when a time extend is encountered.
|
|
|
- * Since the time extend is always attached to a data event,
|
|
|
- * we should never loop more than once.
|
|
|
- * (We never hit the following condition more than twice).
|
|
|
+ * We repeat when a time extend is encountered or we hit
|
|
|
+ * the end of the page. Since the time extend is always attached
|
|
|
+ * to a data event, we should never loop more than three times.
|
|
|
+ * Once for going to next page, once on time extend, and
|
|
|
+ * finally once to get the event.
|
|
|
+ * (We never hit the following condition more than thrice).
|
|
|
*/
|
|
|
- if (RB_WARN_ON(cpu_buffer, ++nr_loops > 2))
|
|
|
+ if (RB_WARN_ON(cpu_buffer, ++nr_loops > 3))
|
|
|
return NULL;
|
|
|
|
|
|
if (rb_per_cpu_empty(cpu_buffer))
|