diff options
Diffstat (limited to 'arch/mips/kernel/unaligned.c')
| -rw-r--r-- | arch/mips/kernel/unaligned.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/mips/kernel/unaligned.c b/arch/mips/kernel/unaligned.c index 36c5212e0928..5b5a3736cbbc 100644 --- a/arch/mips/kernel/unaligned.c +++ b/arch/mips/kernel/unaligned.c | |||
| @@ -94,7 +94,7 @@ unsigned long unaligned_instructions; | |||
| 94 | #endif | 94 | #endif |
| 95 | 95 | ||
| 96 | static inline int emulate_load_store_insn(struct pt_regs *regs, | 96 | static inline int emulate_load_store_insn(struct pt_regs *regs, |
| 97 | void *addr, unsigned long pc, | 97 | void __user *addr, unsigned int __user *pc, |
| 98 | unsigned long **regptr, unsigned long *newvalue) | 98 | unsigned long **regptr, unsigned long *newvalue) |
| 99 | { | 99 | { |
| 100 | union mips_instruction insn; | 100 | union mips_instruction insn; |
| @@ -107,7 +107,7 @@ static inline int emulate_load_store_insn(struct pt_regs *regs, | |||
| 107 | /* | 107 | /* |
| 108 | * This load never faults. | 108 | * This load never faults. |
| 109 | */ | 109 | */ |
| 110 | __get_user(insn.word, (unsigned int *)pc); | 110 | __get_user(insn.word, pc); |
| 111 | 111 | ||
| 112 | switch (insn.i_format.opcode) { | 112 | switch (insn.i_format.opcode) { |
| 113 | /* | 113 | /* |
| @@ -494,8 +494,8 @@ asmlinkage void do_ade(struct pt_regs *regs) | |||
| 494 | { | 494 | { |
| 495 | unsigned long *regptr, newval; | 495 | unsigned long *regptr, newval; |
| 496 | extern int do_dsemulret(struct pt_regs *); | 496 | extern int do_dsemulret(struct pt_regs *); |
| 497 | unsigned int __user *pc; | ||
| 497 | mm_segment_t seg; | 498 | mm_segment_t seg; |
| 498 | unsigned long pc; | ||
| 499 | 499 | ||
| 500 | /* | 500 | /* |
| 501 | * Address errors may be deliberately induced by the FPU emulator to | 501 | * Address errors may be deliberately induced by the FPU emulator to |
| @@ -515,7 +515,7 @@ asmlinkage void do_ade(struct pt_regs *regs) | |||
| 515 | if ((regs->cp0_badvaddr == regs->cp0_epc) || (regs->cp0_epc & 0x1)) | 515 | if ((regs->cp0_badvaddr == regs->cp0_epc) || (regs->cp0_epc & 0x1)) |
| 516 | goto sigbus; | 516 | goto sigbus; |
| 517 | 517 | ||
| 518 | pc = exception_epc(regs); | 518 | pc = (unsigned int __user *) exception_epc(regs); |
| 519 | if ((current->thread.mflags & MF_FIXADE) == 0) | 519 | if ((current->thread.mflags & MF_FIXADE) == 0) |
| 520 | goto sigbus; | 520 | goto sigbus; |
| 521 | 521 | ||
| @@ -526,7 +526,7 @@ asmlinkage void do_ade(struct pt_regs *regs) | |||
| 526 | seg = get_fs(); | 526 | seg = get_fs(); |
| 527 | if (!user_mode(regs)) | 527 | if (!user_mode(regs)) |
| 528 | set_fs(KERNEL_DS); | 528 | set_fs(KERNEL_DS); |
| 529 | if (!emulate_load_store_insn(regs, (void *)regs->cp0_badvaddr, pc, | 529 | if (!emulate_load_store_insn(regs, (void __user *)regs->cp0_badvaddr, pc, |
| 530 | ®ptr, &newval)) { | 530 | ®ptr, &newval)) { |
| 531 | compute_return_epc(regs); | 531 | compute_return_epc(regs); |
| 532 | /* | 532 | /* |
