From: Changli Gao on 13 May 2010 06:00 use kvcalloc and kvfree use kvcalloc and kvfree Signed-off-by: Changli Gao <xiaosuo(a)gmail.com> ---- kernel/relay.c | 35 +++-------------------------------- 1 file changed, 3 insertions(+), 32 deletions(-) diff --git a/kernel/relay.c b/kernel/relay.c index 3d97f28..002d2f7 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -65,35 +65,6 @@ static const struct vm_operations_struct relay_file_mmap_ops = { .close = relay_file_mmap_close, }; -/* - * allocate an array of pointers of struct page - */ -static struct page **relay_alloc_page_array(unsigned int n_pages) -{ - struct page **array; - size_t pa_size = n_pages * sizeof(struct page *); - - if (pa_size > PAGE_SIZE) { - array = vmalloc(pa_size); - if (array) - memset(array, 0, pa_size); - } else { - array = kzalloc(pa_size, GFP_KERNEL); - } - return array; -} - -/* - * free an array of pointers of struct page - */ -static void relay_free_page_array(struct page **array) -{ - if (is_vmalloc_addr(array)) - vfree(array); - else - kfree(array); -} - /** * relay_mmap_buf: - mmap channel buffer to process address space * @buf: relay channel buffer @@ -138,7 +109,7 @@ static void *relay_alloc_buf(struct rchan_buf *buf, size_t *size) *size = PAGE_ALIGN(*size); n_pages = *size >> PAGE_SHIFT; - buf->page_array = relay_alloc_page_array(n_pages); + buf->page_array = kvcalloc(n_pages, sizeof(struct page *)); if (!buf->page_array) return NULL; @@ -159,7 +130,7 @@ static void *relay_alloc_buf(struct rchan_buf *buf, size_t *size) depopulate: for (j = 0; j < i; j++) __free_page(buf->page_array[j]); - relay_free_page_array(buf->page_array); + kvfree(buf->page_array); return NULL; } @@ -218,7 +189,7 @@ static void relay_destroy_buf(struct rchan_buf *buf) vunmap(buf->start); for (i = 0; i < buf->page_count; i++) __free_page(buf->page_array[i]); - relay_free_page_array(buf->page_array); + kvfree(buf->page_array); } chan->buf[buf->cpu] = NULL; kfree(buf->padding); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|
Pages: 1 Prev: [PATCH 0/9] mm: generic adaptive large memory allocation APIs Next: Loan Application |