Merge branch 'mv-merge'
[sfrench/cifs-2.6.git] / arch / sparc64 / kernel / binfmt_aout32.c
index edf52d06b28042312c796ac0227884312194658d..d7caa60a00743ce1fc8b496cc3f657a9ea2f6122 100644 (file)
 #include <asm/system.h>
 #include <asm/uaccess.h>
 #include <asm/pgalloc.h>
+#include <asm/mmu_context.h>
 
 static int load_aout32_binary(struct linux_binprm *, struct pt_regs * regs);
 static int load_aout32_library(struct file*);
 static int aout32_core_dump(long signr, struct pt_regs * regs, struct file *file);
 
-extern void dump_thread(struct pt_regs *, struct user *);
-
 static struct linux_binfmt aout32_format = {
        NULL, THIS_MODULE, load_aout32_binary, load_aout32_library, aout32_core_dump,
        PAGE_SIZE
@@ -240,6 +239,8 @@ static int load_aout32_binary(struct linux_binprm * bprm, struct pt_regs * regs)
                (current->mm->start_data = N_DATADDR(ex));
        current->mm->brk = ex.a_bss +
                (current->mm->start_brk = N_BSSADDR(ex));
+       current->mm->free_area_cache = current->mm->mmap_base;
+       current->mm->cached_hole_size = 0;
 
        current->mm->mmap = NULL;
        compute_creds(bprm);
@@ -331,15 +332,8 @@ beyond_if:
 
        current->mm->start_stack =
                (unsigned long) create_aout32_tables((char __user *)bprm->p, bprm);
-       if (!(orig_thr_flags & _TIF_32BIT)) {
-               unsigned long pgd_cache = get_pgd_cache(current->mm->pgd);
-
-               __asm__ __volatile__("stxa\t%0, [%1] %2\n\t"
-                                    "membar #Sync"
-                                    : /* no outputs */
-                                    : "r" (pgd_cache),
-                                      "r" (TSB_REG), "i" (ASI_DMMU));
-       }
+       tsb_context_switch(current->mm);
+
        start_thread32(regs, ex.a_entry, current->mm->start_stack);
        if (current->ptrace & PT_PTRACED)
                send_sig(SIGTRAP, current, 0);