projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use pfn rather than struct page in ring buffer array
[lttng-modules.git]
/
lib
/
ringbuffer
/
ring_buffer_backend.c
diff --git
a/lib/ringbuffer/ring_buffer_backend.c
b/lib/ringbuffer/ring_buffer_backend.c
index 5466325f10a3b95535cf6270128254d35d656074..83a6e39b4b2df692c955c6930f04d432e4a2c88a 100644
(file)
--- a/
lib/ringbuffer/ring_buffer_backend.c
+++ b/
lib/ringbuffer/ring_buffer_backend.c
@@
-52,7
+52,6
@@
int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config
unsigned long subbuf_size, mmap_offset = 0;
unsigned long num_subbuf_alloc;
struct page **pages;
unsigned long subbuf_size, mmap_offset = 0;
unsigned long num_subbuf_alloc;
struct page **pages;
- void **virt;
unsigned long i;
num_pages = size >> PAGE_SHIFT;
unsigned long i;
num_pages = size >> PAGE_SHIFT;
@@
-71,12
+70,6
@@
int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config
if (unlikely(!pages))
goto pages_error;
if (unlikely(!pages))
goto pages_error;
- virt = kmalloc_node(ALIGN(sizeof(*virt) * num_pages,
- 1 << INTERNODE_CACHE_SHIFT),
- GFP_KERNEL, cpu_to_node(max(bufb->cpu, 0)));
- if (unlikely(!virt))
- goto virt_error;
-
bufb->array = kmalloc_node(ALIGN(sizeof(*bufb->array)
* num_subbuf_alloc,
1 << INTERNODE_CACHE_SHIFT),
bufb->array = kmalloc_node(ALIGN(sizeof(*bufb->array)
* num_subbuf_alloc,
1 << INTERNODE_CACHE_SHIFT),
@@
-89,7
+82,6
@@
int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config
GFP_KERNEL | __GFP_ZERO, 0);
if (unlikely(!pages[i]))
goto depopulate;
GFP_KERNEL | __GFP_ZERO, 0);
if (unlikely(!pages[i]))
goto depopulate;
- virt[i] = page_address(pages[i]);
}
bufb->num_pages_per_subbuf = num_pages_per_subbuf;
}
bufb->num_pages_per_subbuf = num_pages_per_subbuf;
@@
-138,8
+130,8
@@
int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config
for (i = 0; i < num_subbuf_alloc; i++) {
for (j = 0; j < num_pages_per_subbuf; j++) {
CHAN_WARN_ON(chanb, page_idx > num_pages);
for (i = 0; i < num_subbuf_alloc; i++) {
for (j = 0; j < num_pages_per_subbuf; j++) {
CHAN_WARN_ON(chanb, page_idx > num_pages);
- bufb->array[i]->p[j].virt =
virt[page_idx]
;
- bufb->array[i]->p[j].p
age = pages[page_idx]
;
+ bufb->array[i]->p[j].virt =
page_address(pages[page_idx])
;
+ bufb->array[i]->p[j].p
fn = page_to_pfn(pages[page_idx])
;
page_idx++;
}
if (config->output == RING_BUFFER_MMAP) {
page_idx++;
}
if (config->output == RING_BUFFER_MMAP) {
@@
-153,7
+145,6
@@
int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config
* will not fault.
*/
wrapper_vmalloc_sync_all();
* will not fault.
*/
wrapper_vmalloc_sync_all();
- kfree(virt);
kfree(pages);
return 0;
kfree(pages);
return 0;
@@
-168,8
+159,6
@@
depopulate:
__free_page(pages[i]);
kfree(bufb->array);
array_error:
__free_page(pages[i]);
kfree(bufb->array);
array_error:
- kfree(virt);
-virt_error:
kfree(pages);
pages_error:
return -ENOMEM;
kfree(pages);
pages_error:
return -ENOMEM;
@@
-201,7
+190,7
@@
void lib_ring_buffer_backend_free(struct lib_ring_buffer_backend *bufb)
kfree(bufb->buf_cnt);
for (i = 0; i < num_subbuf_alloc; i++) {
for (j = 0; j < bufb->num_pages_per_subbuf; j++)
kfree(bufb->buf_cnt);
for (i = 0; i < num_subbuf_alloc; i++) {
for (j = 0; j < bufb->num_pages_per_subbuf; j++)
- __free_page(
bufb->array[i]->p[j].page
);
+ __free_page(
pfn_to_page(bufb->array[i]->p[j].pfn)
);
kfree(bufb->array[i]);
}
kfree(bufb->array);
kfree(bufb->array[i]);
}
kfree(bufb->array);
@@
-961,15
+950,15
@@
int lib_ring_buffer_read_cstr(struct lib_ring_buffer_backend *bufb, size_t offse
EXPORT_SYMBOL_GPL(lib_ring_buffer_read_cstr);
/**
EXPORT_SYMBOL_GPL(lib_ring_buffer_read_cstr);
/**
- * lib_ring_buffer_read_get_p
age - Get a whole page
to read from
+ * lib_ring_buffer_read_get_p
fn - Get a page frame number
to read from
* @bufb : buffer backend
* @offset : offset within the buffer
* @virt : pointer to page address (output)
*
* Should be protected by get_subbuf/put_subbuf.
* @bufb : buffer backend
* @offset : offset within the buffer
* @virt : pointer to page address (output)
*
* Should be protected by get_subbuf/put_subbuf.
- * Returns the pointer to the page
struct pointer
.
+ * Returns the pointer to the page
frame number unsigned long
.
*/
*/
-
struct page **lib_ring_buffer_read_get_page
(struct lib_ring_buffer_backend *bufb,
+
unsigned long *lib_ring_buffer_read_get_pfn
(struct lib_ring_buffer_backend *bufb,
size_t offset, void ***virt)
{
size_t index;
size_t offset, void ***virt)
{
size_t index;
@@
-986,9
+975,9
@@
struct page **lib_ring_buffer_read_get_page(struct lib_ring_buffer_backend *bufb
CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE
&& subbuffer_id_is_noref(config, id));
*virt = &rpages->p[index].virt;
CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE
&& subbuffer_id_is_noref(config, id));
*virt = &rpages->p[index].virt;
- return &rpages->p[index].p
age
;
+ return &rpages->p[index].p
fn
;
}
}
-EXPORT_SYMBOL_GPL(lib_ring_buffer_read_get_p
age
);
+EXPORT_SYMBOL_GPL(lib_ring_buffer_read_get_p
fn
);
/**
* lib_ring_buffer_read_offset_address - get address of a buffer location
/**
* lib_ring_buffer_read_offset_address - get address of a buffer location
This page took
0.028823 seconds
and
4
git commands to generate.