aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/kernel')
-rw-r--r--arch/mips/kernel/cpu-probe.c4
-rw-r--r--arch/mips/kernel/irixsig.c4
-rw-r--r--arch/mips/kernel/scall32-o32.S18
-rw-r--r--arch/mips/kernel/scall64-64.S18
-rw-r--r--arch/mips/kernel/scall64-n32.S4
-rw-r--r--arch/mips/kernel/scall64-o32.S4
-rw-r--r--arch/mips/kernel/signal.c2
-rw-r--r--arch/mips/kernel/signal32.c2
-rw-r--r--arch/mips/kernel/traps.c5
9 files changed, 19 insertions, 42 deletions
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
index a263fb7a3971..5e1b08b00a33 100644
--- a/arch/mips/kernel/cpu-probe.c
+++ b/arch/mips/kernel/cpu-probe.c
@@ -417,7 +417,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c)
417 case PRID_IMP_R10000: 417 case PRID_IMP_R10000:
418 c->cputype = CPU_R10000; 418 c->cputype = CPU_R10000;
419 c->isa_level = MIPS_CPU_ISA_IV; 419 c->isa_level = MIPS_CPU_ISA_IV;
420 c->options = MIPS_CPU_TLB | MIPS_CPU_4KEX | 420 c->options = MIPS_CPU_TLB | MIPS_CPU_4K_CACHE | MIPS_CPU_4KEX |
421 MIPS_CPU_FPU | MIPS_CPU_32FPR | 421 MIPS_CPU_FPU | MIPS_CPU_32FPR |
422 MIPS_CPU_COUNTER | MIPS_CPU_WATCH | 422 MIPS_CPU_COUNTER | MIPS_CPU_WATCH |
423 MIPS_CPU_LLSC; 423 MIPS_CPU_LLSC;
@@ -426,7 +426,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c)
426 case PRID_IMP_R12000: 426 case PRID_IMP_R12000:
427 c->cputype = CPU_R12000; 427 c->cputype = CPU_R12000;
428 c->isa_level = MIPS_CPU_ISA_IV; 428 c->isa_level = MIPS_CPU_ISA_IV;
429 c->options = MIPS_CPU_TLB | MIPS_CPU_4KEX | 429 c->options = MIPS_CPU_TLB | MIPS_CPU_4K_CACHE | MIPS_CPU_4KEX |
430 MIPS_CPU_FPU | MIPS_CPU_32FPR | 430 MIPS_CPU_FPU | MIPS_CPU_32FPR |
431 MIPS_CPU_COUNTER | MIPS_CPU_WATCH | 431 MIPS_CPU_COUNTER | MIPS_CPU_WATCH |
432 MIPS_CPU_LLSC; 432 MIPS_CPU_LLSC;
diff --git a/arch/mips/kernel/irixsig.c b/arch/mips/kernel/irixsig.c
index dd118c60bcd0..08273a2a501d 100644
--- a/arch/mips/kernel/irixsig.c
+++ b/arch/mips/kernel/irixsig.c
@@ -279,8 +279,6 @@ irix_sigreturn(struct pt_regs *regs)
279 /* 279 /*
280 * Don't let your children do this ... 280 * Don't let your children do this ...
281 */ 281 */
282 if (current_thread_info()->flags & TIF_SYSCALL_TRACE)
283 do_syscall_trace(regs, 1);
284 __asm__ __volatile__( 282 __asm__ __volatile__(
285 "move\t$29,%0\n\t" 283 "move\t$29,%0\n\t"
286 "j\tsyscall_exit" 284 "j\tsyscall_exit"
@@ -783,8 +781,6 @@ asmlinkage void irix_setcontext(struct pt_regs *regs)
783 /* 781 /*
784 * Don't let your children do this ... 782 * Don't let your children do this ...
785 */ 783 */
786 if (current_thread_info()->flags & TIF_SYSCALL_TRACE)
787 do_syscall_trace(regs, 1);
788 __asm__ __volatile__( 784 __asm__ __volatile__(
789 "move\t$29,%0\n\t" 785 "move\t$29,%0\n\t"
790 "j\tsyscall_exit" 786 "j\tsyscall_exit"
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
index 4dd8e8b4fbc2..a42e0e8caa7b 100644
--- a/arch/mips/kernel/scall32-o32.S
+++ b/arch/mips/kernel/scall32-o32.S
@@ -94,11 +94,13 @@ syscall_trace_entry:
94 li a1, 0 94 li a1, 0
95 jal do_syscall_trace 95 jal do_syscall_trace
96 96
97 move t0, s0
98 RESTORE_STATIC
97 lw a0, PT_R4(sp) # Restore argument registers 99 lw a0, PT_R4(sp) # Restore argument registers
98 lw a1, PT_R5(sp) 100 lw a1, PT_R5(sp)
99 lw a2, PT_R6(sp) 101 lw a2, PT_R6(sp)
100 lw a3, PT_R7(sp) 102 lw a3, PT_R7(sp)
101 jalr s0 103 jalr t0
102 104
103 li t0, -EMAXERRNO - 1 # error? 105 li t0, -EMAXERRNO - 1 # error?
104 sltu t0, t0, v0 106 sltu t0, t0, v0
@@ -241,19 +243,7 @@ illegal_syscall:
241 sw zero, PT_R7(sp) # success 243 sw zero, PT_R7(sp) # success
242 sw v0, PT_R2(sp) # result 244 sw v0, PT_R2(sp) # result
243 245
244 /* Success, so skip usual error handling garbage. */ 246 j o32_syscall_exit # continue like a normal syscall
245 lw a2, TI_FLAGS($28) # syscall tracing enabled?
246 li t0, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
247 and t0, a2, t0
248 bnez t0, 1f
249
250 j o32_syscall_exit
251
2521: SAVE_STATIC
253 move a0, sp
254 li a1, 1
255 jal do_syscall_trace
256 j syscall_exit
257 247
258no_mem: li v0, -ENOMEM 248no_mem: li v0, -ENOMEM
259 jr ra 249 jr ra
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S
index 9085838d6ce3..47bfbd416709 100644
--- a/arch/mips/kernel/scall64-64.S
+++ b/arch/mips/kernel/scall64-64.S
@@ -93,13 +93,15 @@ syscall_trace_entry:
93 li a1, 0 93 li a1, 0
94 jal do_syscall_trace 94 jal do_syscall_trace
95 95
96 move t0, s0
97 RESTORE_STATIC
96 ld a0, PT_R4(sp) # Restore argument registers 98 ld a0, PT_R4(sp) # Restore argument registers
97 ld a1, PT_R5(sp) 99 ld a1, PT_R5(sp)
98 ld a2, PT_R6(sp) 100 ld a2, PT_R6(sp)
99 ld a3, PT_R7(sp) 101 ld a3, PT_R7(sp)
100 ld a4, PT_R8(sp) 102 ld a4, PT_R8(sp)
101 ld a5, PT_R9(sp) 103 ld a5, PT_R9(sp)
102 jalr s0 104 jalr t0
103 105
104 li t0, -EMAXERRNO - 1 # error? 106 li t0, -EMAXERRNO - 1 # error?
105 sltu t0, t0, v0 107 sltu t0, t0, v0
@@ -174,19 +176,7 @@ illegal_syscall:
174 sd zero, PT_R7(sp) # success 176 sd zero, PT_R7(sp) # success
175 sd v0, PT_R2(sp) # result 177 sd v0, PT_R2(sp) # result
176 178
177 /* Success, so skip usual error handling garbage. */ 179 j n64_syscall_exit # continue like a normal syscall
178 li t0, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
179 LONG_L a2, TI_FLAGS($28) # syscall tracing enabled?
180 and t0, a2, t0
181 bnez t0, 1f
182
183 j n64_syscall_exit
184
1851: SAVE_STATIC
186 move a0, sp
187 li a1, 1
188 jal do_syscall_trace
189 j syscall_exit
190 180
191no_mem: li v0, -ENOMEM 181no_mem: li v0, -ENOMEM
192 jr ra 182 jr ra
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
index 7e66eb823bf6..b465ced1758f 100644
--- a/arch/mips/kernel/scall64-n32.S
+++ b/arch/mips/kernel/scall64-n32.S
@@ -90,13 +90,15 @@ n32_syscall_trace_entry:
90 li a1, 0 90 li a1, 0
91 jal do_syscall_trace 91 jal do_syscall_trace
92 92
93 move t0, s0
94 RESTORE_STATIC
93 ld a0, PT_R4(sp) # Restore argument registers 95 ld a0, PT_R4(sp) # Restore argument registers
94 ld a1, PT_R5(sp) 96 ld a1, PT_R5(sp)
95 ld a2, PT_R6(sp) 97 ld a2, PT_R6(sp)
96 ld a3, PT_R7(sp) 98 ld a3, PT_R7(sp)
97 ld a4, PT_R8(sp) 99 ld a4, PT_R8(sp)
98 ld a5, PT_R9(sp) 100 ld a5, PT_R9(sp)
99 jalr s0 101 jalr t0
100 102
101 li t0, -EMAXERRNO - 1 # error? 103 li t0, -EMAXERRNO - 1 # error?
102 sltu t0, t0, v0 104 sltu t0, t0, v0
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
index 5a16401e443a..3d338ca7eeeb 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -124,6 +124,8 @@ trace_a_syscall:
124 li a1, 0 124 li a1, 0
125 jal do_syscall_trace 125 jal do_syscall_trace
126 126
127 move t0, s0
128 RESTORE_STATIC
127 ld a0, PT_R4(sp) # Restore argument registers 129 ld a0, PT_R4(sp) # Restore argument registers
128 ld a1, PT_R5(sp) 130 ld a1, PT_R5(sp)
129 ld a2, PT_R6(sp) 131 ld a2, PT_R6(sp)
@@ -132,7 +134,7 @@ trace_a_syscall:
132 ld a5, PT_R9(sp) 134 ld a5, PT_R9(sp)
133 ld a6, PT_R10(sp) 135 ld a6, PT_R10(sp)
134 ld a7, PT_R11(sp) # For indirect syscalls 136 ld a7, PT_R11(sp) # For indirect syscalls
135 jalr s0 137 jalr t0
136 138
137 li t0, -EMAXERRNO - 1 # error? 139 li t0, -EMAXERRNO - 1 # error?
138 sltu t0, t0, v0 140 sltu t0, t0, v0
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
index 05e09eedabff..7d1800fe7038 100644
--- a/arch/mips/kernel/signal.c
+++ b/arch/mips/kernel/signal.c
@@ -220,8 +220,6 @@ _sys_sigreturn(nabi_no_regargs struct pt_regs regs)
220 /* 220 /*
221 * Don't let your children do this ... 221 * Don't let your children do this ...
222 */ 222 */
223 if (current_thread_info()->flags & TIF_SYSCALL_TRACE)
224 do_syscall_trace(&regs, 1);
225 __asm__ __volatile__( 223 __asm__ __volatile__(
226 "move\t$29, %0\n\t" 224 "move\t$29, %0\n\t"
227 "j\tsyscall_exit" 225 "j\tsyscall_exit"
diff --git a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c
index e315d3f6aa6e..c856dbc52abb 100644
--- a/arch/mips/kernel/signal32.c
+++ b/arch/mips/kernel/signal32.c
@@ -497,8 +497,6 @@ _sys32_sigreturn(nabi_no_regargs struct pt_regs regs)
497 /* 497 /*
498 * Don't let your children do this ... 498 * Don't let your children do this ...
499 */ 499 */
500 if (current_thread_info()->flags & TIF_SYSCALL_TRACE)
501 do_syscall_trace(&regs, 1);
502 __asm__ __volatile__( 500 __asm__ __volatile__(
503 "move\t$29, %0\n\t" 501 "move\t$29, %0\n\t"
504 "j\tsyscall_exit" 502 "j\tsyscall_exit"
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index 6f3ff9690686..7058893d5ad2 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -534,13 +534,14 @@ static inline int simulate_rdhwr(struct pt_regs *regs)
534 switch (rd) { 534 switch (rd) {
535 case 29: 535 case 29:
536 regs->regs[rt] = ti->tp_value; 536 regs->regs[rt] = ti->tp_value;
537 break; 537 return 0;
538 default: 538 default:
539 return -EFAULT; 539 return -EFAULT;
540 } 540 }
541 } 541 }
542 542
543 return 0; 543 /* Not ours. */
544 return -EFAULT;
544} 545}
545 546
546asmlinkage void do_ov(struct pt_regs *regs) 547asmlinkage void do_ov(struct pt_regs *regs)