|
@@ -3405,11 +3405,23 @@ EXPORT_SYMBOL_GPL(ring_buffer_iter_reset);
|
|
|
int ring_buffer_iter_empty(struct ring_buffer_iter *iter)
|
|
|
{
|
|
|
struct ring_buffer_per_cpu *cpu_buffer;
|
|
|
+ struct buffer_page *reader;
|
|
|
+ struct buffer_page *head_page;
|
|
|
+ struct buffer_page *commit_page;
|
|
|
+ unsigned commit;
|
|
|
|
|
|
cpu_buffer = iter->cpu_buffer;
|
|
|
|
|
|
- return iter->head_page == cpu_buffer->commit_page &&
|
|
|
- iter->head == rb_commit_index(cpu_buffer);
|
|
|
+ /* Remember, trace recording is off when iterator is in use */
|
|
|
+ reader = cpu_buffer->reader_page;
|
|
|
+ head_page = cpu_buffer->head_page;
|
|
|
+ commit_page = cpu_buffer->commit_page;
|
|
|
+ commit = rb_page_commit(commit_page);
|
|
|
+
|
|
|
+ return ((iter->head_page == commit_page && iter->head == commit) ||
|
|
|
+ (iter->head_page == reader && commit_page == head_page &&
|
|
|
+ head_page->read == commit &&
|
|
|
+ iter->head == rb_page_commit(cpu_buffer->reader_page)));
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(ring_buffer_iter_empty);
|
|
|
|