m68k: switch to generic extable.h

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2016-12-25 14:33:17 -05:00
parent d597580d37
commit 68acfdcb47
8 changed files with 11 additions and 51 deletions

View File

@ -5,6 +5,7 @@ generic-y += device.h
generic-y += emergency-restart.h generic-y += emergency-restart.h
generic-y += errno.h generic-y += errno.h
generic-y += exec.h generic-y += exec.h
generic-y += extable.h
generic-y += futex.h generic-y += futex.h
generic-y += hw_irq.h generic-y += hw_irq.h
generic-y += ioctl.h generic-y += ioctl.h

View File

@ -122,16 +122,6 @@ static inline void start_thread(struct pt_regs * regs, unsigned long pc,
wrusp(usp); 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 */ /* Forward declaration, a strange C thing */
struct task_struct; struct task_struct;

View File

@ -4,6 +4,7 @@
#include <asm/uaccess_mm.h> #include <asm/uaccess_mm.h>
#endif #endif
#include <asm/extable.h>
#ifdef CONFIG_CPU_HAS_NO_UNALIGNED #ifdef CONFIG_CPU_HAS_NO_UNALIGNED
#include <asm-generic/uaccess-unaligned.h> #include <asm-generic/uaccess-unaligned.h>
#else #else

View File

@ -31,24 +31,6 @@ static inline int access_ok(int type, const void __user *addr,
#define MOVES "move" #define MOVES "move"
#endif #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 __put_user_bad(void);
extern int __get_user_bad(void); extern int __get_user_bad(void);

View File

@ -22,25 +22,6 @@ static inline int _access_ok(unsigned long addr, unsigned long size)
return 1; 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 * These are the main single-value transfer routines. They automatically
* use the right size if we just have the right pointer type. * use the right size if we just have the right pointer type.

View File

@ -88,7 +88,7 @@ static inline int frame_extra_sizes(int f)
return frame_size_change[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; const struct exception_table_entry *fixup;
struct pt_regs *tregs; struct pt_regs *tregs;

View File

@ -1016,8 +1016,13 @@ asmlinkage void trap_c(struct frame *fp)
/* traced a trapping instruction on a 68020/30, /* traced a trapping instruction on a 68020/30,
* real exception will be executed afterwards. * real exception will be executed afterwards.
*/ */
} else if (!handle_kernel_fault(&fp->ptregs)) return;
bad_super_trap(fp); }
#ifdef CONFIG_MMU
if (fixup_exception(&fp->ptregs))
return;
#endif
bad_super_trap(fp);
return; return;
} }

View File

@ -32,7 +32,7 @@ int send_fault_sig(struct pt_regs *regs)
force_sig_info(siginfo.si_signo, force_sig_info(siginfo.si_signo,
&siginfo, current); &siginfo, current);
} else { } else {
if (handle_kernel_fault(regs)) if (fixup_exception(regs))
return -1; return -1;
//if (siginfo.si_signo == SIGBUS) //if (siginfo.si_signo == SIGBUS)