Merge branch 'x86/vdso' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip...
[firefly-linux-kernel-4.4.55.git] / arch / x86 / mm / init_64.c
index b92591fa89706357942ea0388d941f6afe890218..df1a9927ad29ef9aa727851e775badb0f43a5416 100644 (file)
@@ -1055,8 +1055,8 @@ void __init mem_init(void)
        after_bootmem = 1;
 
        /* Register memory areas for /proc/kcore */
-       kclist_add(&kcore_vsyscall, (void *)VSYSCALL_START,
-                        VSYSCALL_END - VSYSCALL_START, KCORE_OTHER);
+       kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR,
+                        PAGE_SIZE, KCORE_OTHER);
 
        mem_init_print_info(NULL);
 }
@@ -1185,11 +1185,19 @@ int kern_addr_valid(unsigned long addr)
  * covers the 64bit vsyscall page now. 32bit has a real VMA now and does
  * not need special handling anymore:
  */
+static const char *gate_vma_name(struct vm_area_struct *vma)
+{
+       return "[vsyscall]";
+}
+static struct vm_operations_struct gate_vma_ops = {
+       .name = gate_vma_name,
+};
 static struct vm_area_struct gate_vma = {
-       .vm_start       = VSYSCALL_START,
-       .vm_end         = VSYSCALL_START + (VSYSCALL_MAPPED_PAGES * PAGE_SIZE),
+       .vm_start       = VSYSCALL_ADDR,
+       .vm_end         = VSYSCALL_ADDR + PAGE_SIZE,
        .vm_page_prot   = PAGE_READONLY_EXEC,
-       .vm_flags       = VM_READ | VM_EXEC
+       .vm_flags       = VM_READ | VM_EXEC,
+       .vm_ops         = &gate_vma_ops,
 };
 
 struct vm_area_struct *get_gate_vma(struct mm_struct *mm)
@@ -1218,16 +1226,7 @@ int in_gate_area(struct mm_struct *mm, unsigned long addr)
  */
 int in_gate_area_no_mm(unsigned long addr)
 {
-       return (addr >= VSYSCALL_START) && (addr < VSYSCALL_END);
-}
-
-const char *arch_vma_name(struct vm_area_struct *vma)
-{
-       if (vma->vm_mm && vma->vm_start == (long)vma->vm_mm->context.vdso)
-               return "[vdso]";
-       if (vma == &gate_vma)
-               return "[vsyscall]";
-       return NULL;
+       return (addr & PAGE_MASK) == VSYSCALL_ADDR;
 }
 
 static unsigned long probe_memory_block_size(void)