diff options
Diffstat (limited to 'kernel/trace/ring_buffer.c')
| -rw-r--r-- | kernel/trace/ring_buffer.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index ec01803e0a55..4cb5e5147165 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
| @@ -3783,12 +3783,17 @@ void | |||
| 3783 | ring_buffer_read_finish(struct ring_buffer_iter *iter) | 3783 | ring_buffer_read_finish(struct ring_buffer_iter *iter) |
| 3784 | { | 3784 | { |
| 3785 | struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer; | 3785 | struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer; |
| 3786 | unsigned long flags; | ||
| 3786 | 3787 | ||
| 3787 | /* | 3788 | /* |
| 3788 | * Ring buffer is disabled from recording, here's a good place | 3789 | * Ring buffer is disabled from recording, here's a good place |
| 3789 | * to check the integrity of the ring buffer. | 3790 | * to check the integrity of the ring buffer. |
| 3791 | * Must prevent readers from trying to read, as the check | ||
| 3792 | * clears the HEAD page and readers require it. | ||
| 3790 | */ | 3793 | */ |
| 3794 | raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags); | ||
| 3791 | rb_check_pages(cpu_buffer); | 3795 | rb_check_pages(cpu_buffer); |
| 3796 | raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); | ||
| 3792 | 3797 | ||
| 3793 | atomic_dec(&cpu_buffer->record_disabled); | 3798 | atomic_dec(&cpu_buffer->record_disabled); |
| 3794 | atomic_dec(&cpu_buffer->buffer->resize_disabled); | 3799 | atomic_dec(&cpu_buffer->buffer->resize_disabled); |
