diff options
Diffstat (limited to 'kernel/trace/ring_buffer.c')
| -rw-r--r-- | kernel/trace/ring_buffer.c | 14 | 
1 files changed, 9 insertions, 5 deletions
| diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 529cc50d7243..81279c6602ff 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -4386,15 +4386,19 @@ EXPORT_SYMBOL_GPL(ring_buffer_swap_cpu);   * the page that was allocated, with the read page of the buffer.   *   * Returns: - *  The page allocated, or NULL on error. + *  The page allocated, or ERR_PTR   */  void *ring_buffer_alloc_read_page(struct ring_buffer *buffer, int cpu)  { -	struct ring_buffer_per_cpu *cpu_buffer = buffer->buffers[cpu]; +	struct ring_buffer_per_cpu *cpu_buffer;  	struct buffer_data_page *bpage = NULL;  	unsigned long flags;  	struct page *page; +	if (!cpumask_test_cpu(cpu, buffer->cpumask)) +		return ERR_PTR(-ENODEV); + +	cpu_buffer = buffer->buffers[cpu];  	local_irq_save(flags);  	arch_spin_lock(&cpu_buffer->lock); @@ -4412,7 +4416,7 @@ void *ring_buffer_alloc_read_page(struct ring_buffer *buffer, int cpu)  	page = alloc_pages_node(cpu_to_node(cpu),  				GFP_KERNEL | __GFP_NORETRY, 0);  	if (!page) -		return NULL; +		return ERR_PTR(-ENOMEM);  	bpage = page_address(page); @@ -4467,8 +4471,8 @@ EXPORT_SYMBOL_GPL(ring_buffer_free_read_page);   *   * for example:   *	rpage = ring_buffer_alloc_read_page(buffer, cpu); - *	if (!rpage) - *		return error; + *	if (IS_ERR(rpage)) + *		return PTR_ERR(rpage);   *	ret = ring_buffer_read_page(buffer, &rpage, len, cpu, 0);   *	if (ret >= 0)   *		process_page(rpage, ret); |