diff options
Diffstat (limited to 'kernel/trace/ring_buffer.c')
-rw-r--r-- | kernel/trace/ring_buffer.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 96fc3c043ad6..ca47a4fa2986 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
@@ -3405,11 +3405,23 @@ EXPORT_SYMBOL_GPL(ring_buffer_iter_reset); | |||
3405 | int ring_buffer_iter_empty(struct ring_buffer_iter *iter) | 3405 | int ring_buffer_iter_empty(struct ring_buffer_iter *iter) |
3406 | { | 3406 | { |
3407 | struct ring_buffer_per_cpu *cpu_buffer; | 3407 | struct ring_buffer_per_cpu *cpu_buffer; |
3408 | struct buffer_page *reader; | ||
3409 | struct buffer_page *head_page; | ||
3410 | struct buffer_page *commit_page; | ||
3411 | unsigned commit; | ||
3408 | 3412 | ||
3409 | cpu_buffer = iter->cpu_buffer; | 3413 | cpu_buffer = iter->cpu_buffer; |
3410 | 3414 | ||
3411 | return iter->head_page == cpu_buffer->commit_page && | 3415 | /* Remember, trace recording is off when iterator is in use */ |
3412 | iter->head == rb_commit_index(cpu_buffer); | 3416 | reader = cpu_buffer->reader_page; |
3417 | head_page = cpu_buffer->head_page; | ||
3418 | commit_page = cpu_buffer->commit_page; | ||
3419 | commit = rb_page_commit(commit_page); | ||
3420 | |||
3421 | return ((iter->head_page == commit_page && iter->head == commit) || | ||
3422 | (iter->head_page == reader && commit_page == head_page && | ||
3423 | head_page->read == commit && | ||
3424 | iter->head == rb_page_commit(cpu_buffer->reader_page))); | ||
3413 | } | 3425 | } |
3414 | EXPORT_SYMBOL_GPL(ring_buffer_iter_empty); | 3426 | EXPORT_SYMBOL_GPL(ring_buffer_iter_empty); |
3415 | 3427 | ||
@@ -4826,9 +4838,9 @@ static __init int test_ringbuffer(void) | |||
4826 | rb_data[cpu].cnt = cpu; | 4838 | rb_data[cpu].cnt = cpu; |
4827 | rb_threads[cpu] = kthread_create(rb_test, &rb_data[cpu], | 4839 | rb_threads[cpu] = kthread_create(rb_test, &rb_data[cpu], |
4828 | "rbtester/%d", cpu); | 4840 | "rbtester/%d", cpu); |
4829 | if (WARN_ON(!rb_threads[cpu])) { | 4841 | if (WARN_ON(IS_ERR(rb_threads[cpu]))) { |
4830 | pr_cont("FAILED\n"); | 4842 | pr_cont("FAILED\n"); |
4831 | ret = -1; | 4843 | ret = PTR_ERR(rb_threads[cpu]); |
4832 | goto out_free; | 4844 | goto out_free; |
4833 | } | 4845 | } |
4834 | 4846 | ||
@@ -4838,9 +4850,9 @@ static __init int test_ringbuffer(void) | |||
4838 | 4850 | ||
4839 | /* Now create the rb hammer! */ | 4851 | /* Now create the rb hammer! */ |
4840 | rb_hammer = kthread_run(rb_hammer_test, NULL, "rbhammer"); | 4852 | rb_hammer = kthread_run(rb_hammer_test, NULL, "rbhammer"); |
4841 | if (WARN_ON(!rb_hammer)) { | 4853 | if (WARN_ON(IS_ERR(rb_hammer))) { |
4842 | pr_cont("FAILED\n"); | 4854 | pr_cont("FAILED\n"); |
4843 | ret = -1; | 4855 | ret = PTR_ERR(rb_hammer); |
4844 | goto out_free; | 4856 | goto out_free; |
4845 | } | 4857 | } |
4846 | 4858 | ||