[S390] perf_counter: fix vdso detection
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Tue, 6 Oct 2009 08:34:08 +0000 (10:34 +0200)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Tue, 6 Oct 2009 08:35:09 +0000 (10:35 +0200)
s390 version of f2053f1a "powerpc/perf_counter: Fix vdso detection".

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/vdso.c

index 45a3e9a..adfb32a 100644 (file)
@@ -247,6 +247,13 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
        }
 
        /*
+        * Put vDSO base into mm struct. We need to do this before calling
+        * install_special_mapping or the perf counter mmap tracking code
+        * will fail to recognise it as a vDSO (since arch_vma_name fails).
+        */
+       current->mm->context.vdso_base = vdso_base;
+
+       /*
         * our vma flags don't have VM_WRITE so by default, the process
         * isn't allowed to write those pages.
         * gdb can break that with ptrace interface, and thus trigger COW
@@ -267,14 +274,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
                                     VM_ALWAYSDUMP,
                                     vdso_pagelist);
        if (rc)
-               goto out_up;
-
-       /* Put vDSO base into mm struct */
-       current->mm->context.vdso_base = vdso_base;
-
-       up_write(&mm->mmap_sem);
-       return 0;
-
+               current->mm->context.vdso_base = 0;
 out_up:
        up_write(&mm->mmap_sem);
        return rc;