|
@@ -266,6 +266,27 @@ void *vmalloc_node(unsigned long size, int node)
|
|
|
}
|
|
|
EXPORT_SYMBOL(vmalloc_node);
|
|
|
|
|
|
+#ifndef PAGE_KERNEL_EXEC
|
|
|
+# define PAGE_KERNEL_EXEC PAGE_KERNEL
|
|
|
+#endif
|
|
|
+
|
|
|
+/**
|
|
|
+ * vmalloc_exec - allocate virtually contiguous, executable memory
|
|
|
+ * @size: allocation size
|
|
|
+ *
|
|
|
+ * Kernel-internal function to allocate enough pages to cover @size
|
|
|
+ * the page level allocator and map them into contiguous and
|
|
|
+ * executable kernel virtual space.
|
|
|
+ *
|
|
|
+ * For tight control over page level allocator and protection flags
|
|
|
+ * use __vmalloc() instead.
|
|
|
+ */
|
|
|
+
|
|
|
+void *vmalloc_exec(unsigned long size)
|
|
|
+{
|
|
|
+ return __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL_EXEC);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* vmalloc_32 - allocate virtually contiguous memory (32bit addressable)
|
|
|
* @size: allocation size
|