m68k: switch to generic extable.h
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 25 Dec 2016 19:33:17 +0000 (14:33 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 28 Mar 2017 22:23:40 +0000 (18:23 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/m68k/include/asm/Kbuild
arch/m68k/include/asm/processor.h
arch/m68k/include/asm/uaccess.h
arch/m68k/include/asm/uaccess_mm.h
arch/m68k/include/asm/uaccess_no.h
arch/m68k/kernel/signal.c
arch/m68k/kernel/traps.c
arch/m68k/mm/fault.c

index d4f9ccbfa85cd3cd55d4efae978c94093d2393a4..82005d2ff717988eba228d999f3bfbf1037c49a4 100644 (file)
@@ -5,6 +5,7 @@ generic-y += device.h
 generic-y += emergency-restart.h
 generic-y += errno.h
 generic-y += exec.h
+generic-y += extable.h
 generic-y += futex.h
 generic-y += hw_irq.h
 generic-y += ioctl.h
index f5f790c31bf809ac0f89f808614f34b557ca9df6..77239e81379b16b52e39cff979d1da4ceb2e1965 100644 (file)
@@ -122,16 +122,6 @@ static inline void start_thread(struct pt_regs * regs, unsigned long pc,
        wrusp(usp);
 }
 
-#ifdef CONFIG_MMU
-extern int handle_kernel_fault(struct pt_regs *regs);
-#else
-static inline  int handle_kernel_fault(struct pt_regs *regs)
-{
-       /* Any fault in kernel is fatal on non-mmu */
-       return 0;
-}
-#endif
-
 /* Forward declaration, a strange C thing */
 struct task_struct;
 
index 3fadc4a93d977ec96456bf194b7a34a97daa495e..67b3481d6020f80087a6a034389a495d4efa40db 100644 (file)
@@ -4,6 +4,7 @@
 #include <asm/uaccess_mm.h>
 #endif
 
+#include <asm/extable.h>
 #ifdef CONFIG_CPU_HAS_NO_UNALIGNED
 #include <asm-generic/uaccess-unaligned.h>
 #else
index 14054a4e4216e6ddc8d26a9665e4f5f09e527299..23be968a53fd2f26ab6e0b225ceb12dee572e62b 100644 (file)
@@ -31,24 +31,6 @@ static inline int access_ok(int type, const void __user *addr,
 #define        MOVES   "move"
 #endif
 
-/*
- * The exception table consists of pairs of addresses: the first is the
- * address of an instruction that is allowed to fault, and the second is
- * the address at which the program should continue.  No registers are
- * modified, so it is entirely up to the continuation code to figure out
- * what to do.
- *
- * All the routines below use bits of fixup code that are out of line
- * with the main instruction path.  This means when everything is well,
- * we don't even have to jump over them.  Further, they do not intrude
- * on our cache or tlb entries.
- */
-
-struct exception_table_entry
-{
-       unsigned long insn, fixup;
-};
-
 extern int __put_user_bad(void);
 extern int __get_user_bad(void);
 
index e77ce66c14d553a2b5c61fe3609d713e690d613e..3f7f54d5134ce8c23f79aa12bdb6c281ff337208 100644 (file)
@@ -22,25 +22,6 @@ static inline int _access_ok(unsigned long addr, unsigned long size)
        return 1;
 }
 
-/*
- * The exception table consists of pairs of addresses: the first is the
- * address of an instruction that is allowed to fault, and the second is
- * the address at which the program should continue.  No registers are
- * modified, so it is entirely up to the continuation code to figure out
- * what to do.
- *
- * All the routines below use bits of fixup code that are out of line
- * with the main instruction path.  This means when everything is well,
- * we don't even have to jump over them.  Further, they do not intrude
- * on our cache or tlb entries.
- */
-
-struct exception_table_entry
-{
-       unsigned long insn, fixup;
-};
-
-
 /*
  * These are the main single-value transfer routines.  They automatically
  * use the right size if we just have the right pointer type.
index 093b7c42fb85ae82c673cd93c71bf3f16e7123f2..6f945bb5ffbd27c67e98368ce316a89af71383ae 100644 (file)
@@ -88,7 +88,7 @@ static inline int frame_extra_sizes(int f)
        return frame_size_change[f];
 }
 
-int handle_kernel_fault(struct pt_regs *regs)
+int fixup_exception(struct pt_regs *regs)
 {
        const struct exception_table_entry *fixup;
        struct pt_regs *tregs;
index a926d2c88898c251edaa4af25cedcce638fef1ba..c1cc4e99aa945dd1a14cc6a7561c1b58f3b5f2fa 100644 (file)
@@ -1016,8 +1016,13 @@ asmlinkage void trap_c(struct frame *fp)
                        /* traced a trapping instruction on a 68020/30,
                         * real exception will be executed afterwards.
                         */
-               } else if (!handle_kernel_fault(&fp->ptregs))
-                       bad_super_trap(fp);
+                       return;
+               }
+#ifdef CONFIG_MMU
+               if (fixup_exception(&fp->ptregs))
+                       return;
+#endif
+               bad_super_trap(fp);
                return;
        }
 
index bd66a0b20c6b79dd51142822e84db79051b1a3a9..2795e4ca09d7b4df170a83ede8d694f20dee55e4 100644 (file)
@@ -32,7 +32,7 @@ int send_fault_sig(struct pt_regs *regs)
                force_sig_info(siginfo.si_signo,
                               &siginfo, current);
        } else {
-               if (handle_kernel_fault(regs))
+               if (fixup_exception(regs))
                        return -1;
 
                //if (siginfo.si_signo == SIGBUS)