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 d4f9ccb..82005d2 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 f5f790c..77239e8 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 3fadc4a..67b3481 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 14054a4..23be968 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 e77ce66..3f7f54d 100644 (file)
@@ -23,25 +23,6 @@ static inline int _access_ok(unsigned long addr, unsigned long size)
 }
 
 /*
- * 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 093b7c4..6f945bb 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 a926d2c..c1cc4e9 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 bd66a0b..2795e4c 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)