diff options
author | Andy Lutomirski <luto@amacapital.net> | 2014-08-08 17:23:40 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-08 18:57:27 -0400 |
commit | a6c19dfe39941a5d3f4d072121c0a4841e7e26fd (patch) | |
tree | 2324b68fd333c9b3ccaaa5fbccad1ab42ce59ee1 /mm | |
parent | e0d9bf4cc0888befd00b1a7db383681be68aada9 (diff) |
arm64,ia64,ppc,s390,sh,tile,um,x86,mm: remove default gate area
The core mm code will provide a default gate area based on
FIXADDR_USER_START and FIXADDR_USER_END if
!defined(__HAVE_ARCH_GATE_AREA) && defined(AT_SYSINFO_EHDR).
This default is only useful for ia64. arm64, ppc, s390, sh, tile, 64-bit
UML, and x86_32 have their own code just to disable it. arm, 32-bit UML,
and x86_64 have gate areas, but they have their own implementations.
This gets rid of the default and moves the code into ia64.
This should save some code on architectures without a gate area: it's now
possible to inline the gate_area functions in the default case.
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
Acked-by: Nathan Lynch <nathan_lynch@mentor.com>
Acked-by: H. Peter Anvin <hpa@linux.intel.com>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> [in principle]
Acked-by: Richard Weinberger <richard@nod.at> [for um]
Acked-by: Will Deacon <will.deacon@arm.com> [for arm64]
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Nathan Lynch <Nathan_Lynch@mentor.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memory.c | 38 | ||||
-rw-r--r-- | mm/nommu.c | 5 |
2 files changed, 0 insertions, 43 deletions
diff --git a/mm/memory.c b/mm/memory.c index 2a899e4e82ba..ab3537bcfed2 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -3430,44 +3430,6 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) | |||
3430 | } | 3430 | } |
3431 | #endif /* __PAGETABLE_PMD_FOLDED */ | 3431 | #endif /* __PAGETABLE_PMD_FOLDED */ |
3432 | 3432 | ||
3433 | #if !defined(__HAVE_ARCH_GATE_AREA) | ||
3434 | |||
3435 | #if defined(AT_SYSINFO_EHDR) | ||
3436 | static struct vm_area_struct gate_vma; | ||
3437 | |||
3438 | static int __init gate_vma_init(void) | ||
3439 | { | ||
3440 | gate_vma.vm_mm = NULL; | ||
3441 | gate_vma.vm_start = FIXADDR_USER_START; | ||
3442 | gate_vma.vm_end = FIXADDR_USER_END; | ||
3443 | gate_vma.vm_flags = VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC; | ||
3444 | gate_vma.vm_page_prot = __P101; | ||
3445 | |||
3446 | return 0; | ||
3447 | } | ||
3448 | __initcall(gate_vma_init); | ||
3449 | #endif | ||
3450 | |||
3451 | struct vm_area_struct *get_gate_vma(struct mm_struct *mm) | ||
3452 | { | ||
3453 | #ifdef AT_SYSINFO_EHDR | ||
3454 | return &gate_vma; | ||
3455 | #else | ||
3456 | return NULL; | ||
3457 | #endif | ||
3458 | } | ||
3459 | |||
3460 | int in_gate_area_no_mm(unsigned long addr) | ||
3461 | { | ||
3462 | #ifdef AT_SYSINFO_EHDR | ||
3463 | if ((addr >= FIXADDR_USER_START) && (addr < FIXADDR_USER_END)) | ||
3464 | return 1; | ||
3465 | #endif | ||
3466 | return 0; | ||
3467 | } | ||
3468 | |||
3469 | #endif /* __HAVE_ARCH_GATE_AREA */ | ||
3470 | |||
3471 | static int __follow_pte(struct mm_struct *mm, unsigned long address, | 3433 | static int __follow_pte(struct mm_struct *mm, unsigned long address, |
3472 | pte_t **ptepp, spinlock_t **ptlp) | 3434 | pte_t **ptepp, spinlock_t **ptlp) |
3473 | { | 3435 | { |
diff --git a/mm/nommu.c b/mm/nommu.c index 4a852f6c5709..a881d9673c6b 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -1981,11 +1981,6 @@ error: | |||
1981 | return -ENOMEM; | 1981 | return -ENOMEM; |
1982 | } | 1982 | } |
1983 | 1983 | ||
1984 | int in_gate_area_no_mm(unsigned long addr) | ||
1985 | { | ||
1986 | return 0; | ||
1987 | } | ||
1988 | |||
1989 | int filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf) | 1984 | int filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf) |
1990 | { | 1985 | { |
1991 | BUG(); | 1986 | BUG(); |