diff options
author | Amerigo Wang <amwang@redhat.com> | 2009-06-03 21:46:46 -0400 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2009-06-12 08:17:03 -0400 |
commit | c398df30d5caad626ac72bfab0361a7b0f67a661 (patch) | |
tree | aec470204a0770d138f5d1e2a44ba5921e99bc02 | |
parent | c0e5e10bf380c7a7c4e8c8b7d42e0aba623e76a6 (diff) |
module: merge module_alloc() finally
As Christoph Hellwig suggested, module_alloc() actually can be
unified for i386 and x86_64 (of course, also UML).
Signed-off-by: WANG Cong <amwang@redhat.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: 'Ingo Molnar' <mingo@elte.hu>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r-- | arch/um/include/asm/pgtable.h | 7 | ||||
-rw-r--r-- | arch/x86/include/asm/pgtable_32_types.h | 4 | ||||
-rw-r--r-- | arch/x86/kernel/module.c | 12 |
3 files changed, 12 insertions, 11 deletions
diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h index 58da2480a7f4..9ce3f165111a 100644 --- a/arch/um/include/asm/pgtable.h +++ b/arch/um/include/asm/pgtable.h | |||
@@ -53,16 +53,21 @@ extern unsigned long end_iomem; | |||
53 | #else | 53 | #else |
54 | # define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) | 54 | # define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) |
55 | #endif | 55 | #endif |
56 | #define MODULES_VADDR VMALLOC_START | ||
57 | #define MODULES_END VMALLOC_END | ||
58 | #define MODULES_LEN (MODULES_VADDR - MODULES_END) | ||
56 | 59 | ||
57 | #define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) | 60 | #define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) |
58 | #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) | 61 | #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) |
59 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) | 62 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) |
60 | 63 | #define __PAGE_KERNEL_EXEC \ | |
64 | (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED) | ||
61 | #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED) | 65 | #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED) |
62 | #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED) | 66 | #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED) |
63 | #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED) | 67 | #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED) |
64 | #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED) | 68 | #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED) |
65 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED) | 69 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED) |
70 | #define PAGE_KERNEL_EXEC __pgprot(__PAGE_KERNEL_EXEC) | ||
66 | 71 | ||
67 | /* | 72 | /* |
68 | * The i386 can't do page protection for execute, and considers that the same | 73 | * The i386 can't do page protection for execute, and considers that the same |
diff --git a/arch/x86/include/asm/pgtable_32_types.h b/arch/x86/include/asm/pgtable_32_types.h index 2733fad45f98..5e67c1532314 100644 --- a/arch/x86/include/asm/pgtable_32_types.h +++ b/arch/x86/include/asm/pgtable_32_types.h | |||
@@ -46,6 +46,10 @@ extern bool __vmalloc_start_set; /* set once high_memory is set */ | |||
46 | # define VMALLOC_END (FIXADDR_START - 2 * PAGE_SIZE) | 46 | # define VMALLOC_END (FIXADDR_START - 2 * PAGE_SIZE) |
47 | #endif | 47 | #endif |
48 | 48 | ||
49 | #define MODULES_VADDR VMALLOC_START | ||
50 | #define MODULES_END VMALLOC_END | ||
51 | #define MODULES_LEN (MODULES_VADDR - MODULES_END) | ||
52 | |||
49 | #define MAXMEM (VMALLOC_END - PAGE_OFFSET - __VMALLOC_RESERVE) | 53 | #define MAXMEM (VMALLOC_END - PAGE_OFFSET - __VMALLOC_RESERVE) |
50 | 54 | ||
51 | #endif /* _ASM_X86_PGTABLE_32_DEFS_H */ | 55 | #endif /* _ASM_X86_PGTABLE_32_DEFS_H */ |
diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c index b92fbcf48609..894bb718a6fb 100644 --- a/arch/x86/kernel/module.c +++ b/arch/x86/kernel/module.c | |||
@@ -34,14 +34,6 @@ | |||
34 | #define DEBUGP(fmt...) | 34 | #define DEBUGP(fmt...) |
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | #if defined(CONFIG_UML) || defined(CONFIG_X86_32) | ||
38 | void *module_alloc(unsigned long size) | ||
39 | { | ||
40 | if (size == 0) | ||
41 | return NULL; | ||
42 | return vmalloc_exec(size); | ||
43 | } | ||
44 | #else /*X86_64*/ | ||
45 | void *module_alloc(unsigned long size) | 37 | void *module_alloc(unsigned long size) |
46 | { | 38 | { |
47 | struct vm_struct *area; | 39 | struct vm_struct *area; |
@@ -56,9 +48,9 @@ void *module_alloc(unsigned long size) | |||
56 | if (!area) | 48 | if (!area) |
57 | return NULL; | 49 | return NULL; |
58 | 50 | ||
59 | return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL_EXEC); | 51 | return __vmalloc_area(area, GFP_KERNEL | __GFP_HIGHMEM, |
52 | PAGE_KERNEL_EXEC); | ||
60 | } | 53 | } |
61 | #endif | ||
62 | 54 | ||
63 | /* Free memory returned from module_alloc */ | 55 | /* Free memory returned from module_alloc */ |
64 | void module_free(struct module *mod, void *module_region) | 56 | void module_free(struct module *mod, void *module_region) |