diff options
Diffstat (limited to 'kernel/trace/ring_buffer.c')
| -rw-r--r-- | kernel/trace/ring_buffer.c | 11 | 
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 199759c73519..9712083832f4 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -937,6 +937,9 @@ void ring_buffer_wake_waiters(struct trace_buffer *buffer, int cpu)  	struct ring_buffer_per_cpu *cpu_buffer;  	struct rb_irq_work *rbwork; +	if (!buffer) +		return; +  	if (cpu == RING_BUFFER_ALL_CPUS) {  		/* Wake up individual ones too. One level recursion */ @@ -945,7 +948,15 @@ void ring_buffer_wake_waiters(struct trace_buffer *buffer, int cpu)  		rbwork = &buffer->irq_work;  	} else { +		if (WARN_ON_ONCE(!buffer->buffers)) +			return; +		if (WARN_ON_ONCE(cpu >= nr_cpu_ids)) +			return; +  		cpu_buffer = buffer->buffers[cpu]; +		/* The CPU buffer may not have been initialized yet */ +		if (!cpu_buffer) +			return;  		rbwork = &cpu_buffer->irq_work;  	}  | 
