]> Pileus Git - ~andy/linux/blobdiff - arch/s390/mm/fault.c
Merge tag 'h8300-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck...
[~andy/linux] / arch / s390 / mm / fault.c
index fc6679210d83249e9b34c2f44070ab1021852e91..d95265b2719f8e7fb0b15305b49a52130069aebd 100644 (file)
@@ -115,13 +115,8 @@ static inline int user_space_fault(unsigned long trans_exc_code)
        if (trans_exc_code == 2)
                /* Access via secondary space, set_fs setting decides */
                return current->thread.mm_segment.ar4;
-       if (s390_user_mode == HOME_SPACE_MODE)
-               /* User space if the access has been done via home space. */
-               return trans_exc_code == 3;
        /*
-        * If the user space is not the home space the kernel runs in home
-        * space. Access via secondary space has already been covered,
-        * access via primary space or access register is from user space
+        * Access via primary space or access register is from user space
         * and access via home space is from the kernel.
         */
        return trans_exc_code != 3;
@@ -428,50 +423,13 @@ void __kprobes do_dat_exception(struct pt_regs *regs)
                do_fault_error(regs, fault);
 }
 
-#ifdef CONFIG_64BIT
-void __kprobes do_asce_exception(struct pt_regs *regs)
-{
-       struct mm_struct *mm = current->mm;
-       struct vm_area_struct *vma;
-       unsigned long trans_exc_code;
-
-       /*
-        * The instruction that caused the program check has
-        * been nullified. Don't signal single step via SIGTRAP.
-        */
-       clear_tsk_thread_flag(current, TIF_PER_TRAP);
-
-       trans_exc_code = regs->int_parm_long;
-       if (unlikely(!user_space_fault(trans_exc_code) || in_atomic() || !mm))
-               goto no_context;
-
-       down_read(&mm->mmap_sem);
-       vma = find_vma(mm, trans_exc_code & __FAIL_ADDR_MASK);
-       up_read(&mm->mmap_sem);
-
-       if (vma) {
-               update_mm(mm, current);
-               return;
-       }
-
-       /* User mode accesses just cause a SIGSEGV */
-       if (user_mode(regs)) {
-               do_sigsegv(regs, SEGV_MAPERR);
-               return;
-       }
-
-no_context:
-       do_no_context(regs);
-}
-#endif
-
 int __handle_fault(unsigned long uaddr, unsigned long pgm_int_code, int write)
 {
        struct pt_regs regs;
        int access, fault;
 
        /* Emulate a uaccess fault from kernel mode. */
-       regs.psw.mask = psw_kernel_bits | PSW_MASK_DAT | PSW_MASK_MCHECK;
+       regs.psw.mask = PSW_KERNEL_BITS | PSW_MASK_DAT | PSW_MASK_MCHECK;
        if (!irqs_disabled())
                regs.psw.mask |= PSW_MASK_IO | PSW_MASK_EXT;
        regs.psw.addr = (unsigned long) __builtin_return_address(0);