|
@@ -1596,6 +1596,13 @@ void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)
|
|
|
}
|
|
|
EXPORT_SYMBOL(__vmalloc);
|
|
|
|
|
|
+static inline void *__vmalloc_node_flags(unsigned long size,
|
|
|
+ int node, gfp_t flags)
|
|
|
+{
|
|
|
+ return __vmalloc_node(size, 1, flags, PAGE_KERNEL,
|
|
|
+ node, __builtin_return_address(0));
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* vmalloc - allocate virtually contiguous memory
|
|
|
* @size: allocation size
|
|
@@ -1607,11 +1614,27 @@ EXPORT_SYMBOL(__vmalloc);
|
|
|
*/
|
|
|
void *vmalloc(unsigned long size)
|
|
|
{
|
|
|
- return __vmalloc_node(size, 1, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL,
|
|
|
- -1, __builtin_return_address(0));
|
|
|
+ return __vmalloc_node_flags(size, -1, GFP_KERNEL | __GFP_HIGHMEM);
|
|
|
}
|
|
|
EXPORT_SYMBOL(vmalloc);
|
|
|
|
|
|
+/**
|
|
|
+ * vzalloc - allocate virtually contiguous memory with zero fill
|
|
|
+ * @size: allocation size
|
|
|
+ * Allocate enough pages to cover @size from the page level
|
|
|
+ * allocator and map them into contiguous kernel virtual space.
|
|
|
+ * The memory allocated is set to zero.
|
|
|
+ *
|
|
|
+ * For tight control over page level allocator and protection flags
|
|
|
+ * use __vmalloc() instead.
|
|
|
+ */
|
|
|
+void *vzalloc(unsigned long size)
|
|
|
+{
|
|
|
+ return __vmalloc_node_flags(size, -1,
|
|
|
+ GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(vzalloc);
|
|
|
+
|
|
|
/**
|
|
|
* vmalloc_user - allocate zeroed virtually contiguous memory for userspace
|
|
|
* @size: allocation size
|
|
@@ -1653,6 +1676,25 @@ void *vmalloc_node(unsigned long size, int node)
|
|
|
}
|
|
|
EXPORT_SYMBOL(vmalloc_node);
|
|
|
|
|
|
+/**
|
|
|
+ * vzalloc_node - allocate memory on a specific node with zero fill
|
|
|
+ * @size: allocation size
|
|
|
+ * @node: numa node
|
|
|
+ *
|
|
|
+ * Allocate enough pages to cover @size from the page level
|
|
|
+ * allocator and map them into contiguous kernel virtual space.
|
|
|
+ * The memory allocated is set to zero.
|
|
|
+ *
|
|
|
+ * For tight control over page level allocator and protection flags
|
|
|
+ * use __vmalloc_node() instead.
|
|
|
+ */
|
|
|
+void *vzalloc_node(unsigned long size, int node)
|
|
|
+{
|
|
|
+ return __vmalloc_node_flags(size, node,
|
|
|
+ GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(vzalloc_node);
|
|
|
+
|
|
|
#ifndef PAGE_KERNEL_EXEC
|
|
|
# define PAGE_KERNEL_EXEC PAGE_KERNEL
|
|
|
#endif
|