aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/ring_buffer.c')
-rw-r--r--kernel/trace/ring_buffer.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index acbb0e73d3a2..1275175b0946 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -3440,11 +3440,23 @@ EXPORT_SYMBOL_GPL(ring_buffer_iter_reset);
3440int ring_buffer_iter_empty(struct ring_buffer_iter *iter) 3440int ring_buffer_iter_empty(struct ring_buffer_iter *iter)
3441{ 3441{
3442 struct ring_buffer_per_cpu *cpu_buffer; 3442 struct ring_buffer_per_cpu *cpu_buffer;
3443 struct buffer_page *reader;
3444 struct buffer_page *head_page;
3445 struct buffer_page *commit_page;
3446 unsigned commit;
3443 3447
3444 cpu_buffer = iter->cpu_buffer; 3448 cpu_buffer = iter->cpu_buffer;
3445 3449
3446 return iter->head_page == cpu_buffer->commit_page && 3450 /* Remember, trace recording is off when iterator is in use */
3447 iter->head == rb_commit_index(cpu_buffer); 3451 reader = cpu_buffer->reader_page;
3452 head_page = cpu_buffer->head_page;
3453 commit_page = cpu_buffer->commit_page;
3454 commit = rb_page_commit(commit_page);
3455
3456 return ((iter->head_page == commit_page && iter->head == commit) ||
3457 (iter->head_page == reader && commit_page == head_page &&
3458 head_page->read == commit &&
3459 iter->head == rb_page_commit(cpu_buffer->reader_page)));
3448} 3460}
3449EXPORT_SYMBOL_GPL(ring_buffer_iter_empty); 3461EXPORT_SYMBOL_GPL(ring_buffer_iter_empty);
3450 3462
@@ -4875,9 +4887,9 @@ static __init int test_ringbuffer(void)
4875 rb_data[cpu].cnt = cpu; 4887 rb_data[cpu].cnt = cpu;
4876 rb_threads[cpu] = kthread_create(rb_test, &rb_data[cpu], 4888 rb_threads[cpu] = kthread_create(rb_test, &rb_data[cpu],
4877 "rbtester/%d", cpu); 4889 "rbtester/%d", cpu);
4878 if (WARN_ON(!rb_threads[cpu])) { 4890 if (WARN_ON(IS_ERR(rb_threads[cpu]))) {
4879 pr_cont("FAILED\n"); 4891 pr_cont("FAILED\n");
4880 ret = -1; 4892 ret = PTR_ERR(rb_threads[cpu]);
4881 goto out_free; 4893 goto out_free;
4882 } 4894 }
4883 4895
@@ -4887,9 +4899,9 @@ static __init int test_ringbuffer(void)
4887 4899
4888 /* Now create the rb hammer! */ 4900 /* Now create the rb hammer! */
4889 rb_hammer = kthread_run(rb_hammer_test, NULL, "rbhammer"); 4901 rb_hammer = kthread_run(rb_hammer_test, NULL, "rbhammer");
4890 if (WARN_ON(!rb_hammer)) { 4902 if (WARN_ON(IS_ERR(rb_hammer))) {
4891 pr_cont("FAILED\n"); 4903 pr_cont("FAILED\n");
4892 ret = -1; 4904 ret = PTR_ERR(rb_hammer);
4893 goto out_free; 4905 goto out_free;
4894 } 4906 }
4895 4907