diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2020-07-16 20:05:36 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2021-01-04 02:05:18 +0100 |
commit | b4edf06c8aaae30ef926bd6853df6e59a7579ee9 (patch) | |
tree | 734b80c130634179fe3f3cfaf413cddc7d016817 /arch/sparc/kernel/unaligned_32.c | |
parent | sparc32: switch copy_user.S away from range exception table entries (diff) | |
download | linux-b4edf06c8aaae30ef926bd6853df6e59a7579ee9.tar.xz linux-b4edf06c8aaae30ef926bd6853df6e59a7579ee9.zip |
sparc32: switch to generic extables
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/sparc/kernel/unaligned_32.c')
-rw-r--r-- | arch/sparc/kernel/unaligned_32.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/sparc/kernel/unaligned_32.c b/arch/sparc/kernel/unaligned_32.c index 83db94c0b431..1d7c3eaabdd4 100644 --- a/arch/sparc/kernel/unaligned_32.c +++ b/arch/sparc/kernel/unaligned_32.c @@ -16,6 +16,7 @@ #include <linux/uaccess.h> #include <linux/smp.h> #include <linux/perf_event.h> +#include <linux/extable.h> #include <asm/setup.h> @@ -213,10 +214,10 @@ static inline int ok_for_kernel(unsigned int insn) static void kernel_mna_trap_fault(struct pt_regs *regs, unsigned int insn) { - unsigned long g2 = regs->u_regs [UREG_G2]; - unsigned long fixup = search_extables_range(regs->pc, &g2); + const struct exception_table_entry *entry; - if (!fixup) { + entry = search_exception_tables(regs->pc); + if (!entry) { unsigned long address = compute_effective_address(regs, insn); if(address < PAGE_SIZE) { printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference in mna handler"); @@ -232,9 +233,8 @@ static void kernel_mna_trap_fault(struct pt_regs *regs, unsigned int insn) die_if_kernel("Oops", regs); /* Not reached */ } - regs->pc = fixup; + regs->pc = entry->fixup; regs->npc = regs->pc + 4; - regs->u_regs [UREG_G2] = g2; } asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn) |