|
@@ -1270,19 +1270,15 @@ void unmap_kernel_range(unsigned long addr, unsigned long size)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(unmap_kernel_range);
|
|
|
|
|
|
-int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page ***pages)
|
|
|
+int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page **pages)
|
|
|
{
|
|
|
unsigned long addr = (unsigned long)area->addr;
|
|
|
unsigned long end = addr + get_vm_area_size(area);
|
|
|
int err;
|
|
|
|
|
|
- err = vmap_page_range(addr, end, prot, *pages);
|
|
|
- if (err > 0) {
|
|
|
- *pages += err;
|
|
|
- err = 0;
|
|
|
- }
|
|
|
+ err = vmap_page_range(addr, end, prot, pages);
|
|
|
|
|
|
- return err;
|
|
|
+ return err > 0 ? 0 : err;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(map_vm_area);
|
|
|
|
|
@@ -1548,7 +1544,7 @@ void *vmap(struct page **pages, unsigned int count,
|
|
|
if (!area)
|
|
|
return NULL;
|
|
|
|
|
|
- if (map_vm_area(area, prot, &pages)) {
|
|
|
+ if (map_vm_area(area, prot, pages)) {
|
|
|
vunmap(area->addr);
|
|
|
return NULL;
|
|
|
}
|
|
@@ -1606,7 +1602,7 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
|
|
|
cond_resched();
|
|
|
}
|
|
|
|
|
|
- if (map_vm_area(area, prot, &pages))
|
|
|
+ if (map_vm_area(area, prot, pages))
|
|
|
goto fail;
|
|
|
return area->addr;
|
|
|
|