|
@@ -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);
|