mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
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>
This commit is contained in:
parent
c0e5e10bf3
commit
c398df30d5
3 changed files with 12 additions and 11 deletions
|
@ -53,16 +53,21 @@ extern unsigned long end_iomem;
|
||||||
#else
|
#else
|
||||||
# define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE)
|
# define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE)
|
||||||
#endif
|
#endif
|
||||||
|
#define MODULES_VADDR VMALLOC_START
|
||||||
|
#define MODULES_END VMALLOC_END
|
||||||
|
#define MODULES_LEN (MODULES_VADDR - MODULES_END)
|
||||||
|
|
||||||
#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
|
#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
|
||||||
#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
|
#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
|
||||||
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
|
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
|
||||||
|
#define __PAGE_KERNEL_EXEC \
|
||||||
|
(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
|
||||||
#define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED)
|
#define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED)
|
||||||
#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)
|
#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)
|
||||||
#define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
|
#define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
|
||||||
#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
|
#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
|
||||||
#define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
|
#define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
|
||||||
|
#define PAGE_KERNEL_EXEC __pgprot(__PAGE_KERNEL_EXEC)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The i386 can't do page protection for execute, and considers that the same
|
* The i386 can't do page protection for execute, and considers that the same
|
||||||
|
|
|
@ -46,6 +46,10 @@ extern bool __vmalloc_start_set; /* set once high_memory is set */
|
||||||
# define VMALLOC_END (FIXADDR_START - 2 * PAGE_SIZE)
|
# define VMALLOC_END (FIXADDR_START - 2 * PAGE_SIZE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MODULES_VADDR VMALLOC_START
|
||||||
|
#define MODULES_END VMALLOC_END
|
||||||
|
#define MODULES_LEN (MODULES_VADDR - MODULES_END)
|
||||||
|
|
||||||
#define MAXMEM (VMALLOC_END - PAGE_OFFSET - __VMALLOC_RESERVE)
|
#define MAXMEM (VMALLOC_END - PAGE_OFFSET - __VMALLOC_RESERVE)
|
||||||
|
|
||||||
#endif /* _ASM_X86_PGTABLE_32_DEFS_H */
|
#endif /* _ASM_X86_PGTABLE_32_DEFS_H */
|
||||||
|
|
|
@ -34,14 +34,6 @@
|
||||||
#define DEBUGP(fmt...)
|
#define DEBUGP(fmt...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_UML) || defined(CONFIG_X86_32)
|
|
||||||
void *module_alloc(unsigned long size)
|
|
||||||
{
|
|
||||||
if (size == 0)
|
|
||||||
return NULL;
|
|
||||||
return vmalloc_exec(size);
|
|
||||||
}
|
|
||||||
#else /*X86_64*/
|
|
||||||
void *module_alloc(unsigned long size)
|
void *module_alloc(unsigned long size)
|
||||||
{
|
{
|
||||||
struct vm_struct *area;
|
struct vm_struct *area;
|
||||||
|
@ -56,9 +48,9 @@ void *module_alloc(unsigned long size)
|
||||||
if (!area)
|
if (!area)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL_EXEC);
|
return __vmalloc_area(area, GFP_KERNEL | __GFP_HIGHMEM,
|
||||||
|
PAGE_KERNEL_EXEC);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Free memory returned from module_alloc */
|
/* Free memory returned from module_alloc */
|
||||||
void module_free(struct module *mod, void *module_region)
|
void module_free(struct module *mod, void *module_region)
|
||||||
|
|
Loading…
Reference in a new issue