Commit e3386988 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Linus Torvalds

[PATCH] vmalloc: use __vmalloc_area in arch/arm

Replace open coded __vmalloc() with __vmalloc_area().
Signed-off-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 21367bf0
......@@ -35,44 +35,16 @@ extern void _etext;
void *module_alloc(unsigned long size)
{
struct vm_struct *area;
struct page **pages;
unsigned int array_size, i;
size = PAGE_ALIGN(size);
if (!size)
goto out_null;
return NULL;
area = __get_vm_area(size, VM_ALLOC, MODULE_START, MODULE_END);
if (!area)
goto out_null;
area->nr_pages = size >> PAGE_SHIFT;
array_size = area->nr_pages * sizeof(struct page *);
area->pages = pages = kmalloc(array_size, GFP_KERNEL);
if (!area->pages) {
remove_vm_area(area->addr);
kfree(area);
goto out_null;
}
memset(pages, 0, array_size);
for (i = 0; i < area->nr_pages; i++) {
pages[i] = alloc_page(GFP_KERNEL);
if (unlikely(!pages[i])) {
area->nr_pages = i;
goto out_no_pages;
}
}
if (map_vm_area(area, PAGE_KERNEL, &pages))
goto out_no_pages;
return area->addr;
return NULL;
out_no_pages:
vfree(area->addr);
out_null:
return NULL;
return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL);
}
void module_free(struct module *module, void *region)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment