diff options
Diffstat (limited to 'arch/mips/kernel')
-rw-r--r-- | arch/mips/kernel/apm.c | 1 | ||||
-rw-r--r-- | arch/mips/kernel/cpu-probe.c | 6 | ||||
-rw-r--r-- | arch/mips/kernel/entry.S | 15 | ||||
-rw-r--r-- | arch/mips/kernel/gdb-low.S | 2 | ||||
-rw-r--r-- | arch/mips/kernel/genex.S | 8 | ||||
-rw-r--r-- | arch/mips/kernel/head.S | 3 | ||||
-rw-r--r-- | arch/mips/kernel/i8259.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/irixelf.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/irq-msc01.c | 4 | ||||
-rw-r--r-- | arch/mips/kernel/irq-mv6434x.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/irq-rm7000.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/irq-rm9000.c | 4 | ||||
-rw-r--r-- | arch/mips/kernel/irq.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/irq_cpu.c | 4 | ||||
-rw-r--r-- | arch/mips/kernel/mips-mt.c | 1 | ||||
-rw-r--r-- | arch/mips/kernel/scall32-o32.S | 17 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-64.S | 4 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-n32.S | 4 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-o32.S | 4 | ||||
-rw-r--r-- | arch/mips/kernel/setup.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/smp.c | 35 | ||||
-rw-r--r-- | arch/mips/kernel/smtc-asm.S | 1 | ||||
-rw-r--r-- | arch/mips/kernel/smtc.c | 60 | ||||
-rw-r--r-- | arch/mips/kernel/time.c | 5 | ||||
-rw-r--r-- | arch/mips/kernel/traps.c | 24 | ||||
-rw-r--r-- | arch/mips/kernel/vpe.c | 1 |
26 files changed, 144 insertions, 71 deletions
diff --git a/arch/mips/kernel/apm.c b/arch/mips/kernel/apm.c index 7bdbcd811b57..528e731049c1 100644 --- a/arch/mips/kernel/apm.c +++ b/arch/mips/kernel/apm.c | |||
@@ -10,7 +10,6 @@ | |||
10 | * [This document is available from Microsoft at: | 10 | * [This document is available from Microsoft at: |
11 | * http://www.microsoft.com/hwdev/busbios/amp_12.htm] | 11 | * http://www.microsoft.com/hwdev/busbios/amp_12.htm] |
12 | */ | 12 | */ |
13 | #include <linux/config.h> | ||
14 | #include <linux/module.h> | 13 | #include <linux/module.h> |
15 | #include <linux/poll.h> | 14 | #include <linux/poll.h> |
16 | #include <linux/timer.h> | 15 | #include <linux/timer.h> |
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index ba08f055feb2..aa2caa67299a 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -459,7 +459,7 @@ static inline unsigned int decode_config0(struct cpuinfo_mips *c) | |||
459 | isa = (config0 & MIPS_CONF_AT) >> 13; | 459 | isa = (config0 & MIPS_CONF_AT) >> 13; |
460 | switch (isa) { | 460 | switch (isa) { |
461 | case 0: | 461 | case 0: |
462 | switch ((config0 >> 10) & 7) { | 462 | switch ((config0 & MIPS_CONF_AR) >> 10) { |
463 | case 0: | 463 | case 0: |
464 | c->isa_level = MIPS_CPU_ISA_M32R1; | 464 | c->isa_level = MIPS_CPU_ISA_M32R1; |
465 | break; | 465 | break; |
@@ -471,7 +471,7 @@ static inline unsigned int decode_config0(struct cpuinfo_mips *c) | |||
471 | } | 471 | } |
472 | break; | 472 | break; |
473 | case 2: | 473 | case 2: |
474 | switch ((config0 >> 10) & 7) { | 474 | switch ((config0 & MIPS_CONF_AR) >> 10) { |
475 | case 0: | 475 | case 0: |
476 | c->isa_level = MIPS_CPU_ISA_M64R1; | 476 | c->isa_level = MIPS_CPU_ISA_M64R1; |
477 | break; | 477 | break; |
@@ -548,7 +548,7 @@ static inline unsigned int decode_config3(struct cpuinfo_mips *c) | |||
548 | return config3 & MIPS_CONF_M; | 548 | return config3 & MIPS_CONF_M; |
549 | } | 549 | } |
550 | 550 | ||
551 | static inline void decode_configs(struct cpuinfo_mips *c) | 551 | static void __init decode_configs(struct cpuinfo_mips *c) |
552 | { | 552 | { |
553 | /* MIPS32 or MIPS64 compliant CPU. */ | 553 | /* MIPS32 or MIPS64 compliant CPU. */ |
554 | c->options = MIPS_CPU_4KEX | MIPS_CPU_4K_CACHE | MIPS_CPU_COUNTER | | 554 | c->options = MIPS_CPU_4KEX | MIPS_CPU_4K_CACHE | MIPS_CPU_COUNTER | |
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S index 01e7fa86aa43..766655f35250 100644 --- a/arch/mips/kernel/entry.S +++ b/arch/mips/kernel/entry.S | |||
@@ -113,6 +113,21 @@ FEXPORT(restore_all) # restore full frame | |||
113 | RESTORE_AT | 113 | RESTORE_AT |
114 | RESTORE_STATIC | 114 | RESTORE_STATIC |
115 | FEXPORT(restore_partial) # restore partial frame | 115 | FEXPORT(restore_partial) # restore partial frame |
116 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
117 | SAVE_STATIC | ||
118 | SAVE_AT | ||
119 | SAVE_TEMP | ||
120 | LONG_L v0, PT_STATUS(sp) | ||
121 | and v0, 1 | ||
122 | beqz v0, 1f | ||
123 | jal trace_hardirqs_on | ||
124 | b 2f | ||
125 | 1: jal trace_hardirqs_off | ||
126 | 2: | ||
127 | RESTORE_TEMP | ||
128 | RESTORE_AT | ||
129 | RESTORE_STATIC | ||
130 | #endif | ||
116 | RESTORE_SOME | 131 | RESTORE_SOME |
117 | RESTORE_SP_AND_RET | 132 | RESTORE_SP_AND_RET |
118 | .set at | 133 | .set at |
diff --git a/arch/mips/kernel/gdb-low.S b/arch/mips/kernel/gdb-low.S index 666bc9014cbd..2c446063636a 100644 --- a/arch/mips/kernel/gdb-low.S +++ b/arch/mips/kernel/gdb-low.S | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include <asm/asm.h> | 8 | #include <asm/asm.h> |
9 | #include <asm/errno.h> | 9 | #include <asm/errno.h> |
10 | #include <asm/irqflags.h> | ||
10 | #include <asm/mipsregs.h> | 11 | #include <asm/mipsregs.h> |
11 | #include <asm/regdef.h> | 12 | #include <asm/regdef.h> |
12 | #include <asm/stackframe.h> | 13 | #include <asm/stackframe.h> |
@@ -120,6 +121,7 @@ | |||
120 | LONG_S $31, GDB_FR_REG31(sp) | 121 | LONG_S $31, GDB_FR_REG31(sp) |
121 | 122 | ||
122 | CLI /* disable interrupts */ | 123 | CLI /* disable interrupts */ |
124 | TRACE_IRQS_OFF | ||
123 | 125 | ||
124 | /* | 126 | /* |
125 | * Followed by the floating point registers | 127 | * Followed by the floating point registers |
diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S index 5254a2222d2b..37fda3dcdfc5 100644 --- a/arch/mips/kernel/genex.S +++ b/arch/mips/kernel/genex.S | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <asm/asm.h> | 13 | #include <asm/asm.h> |
14 | #include <asm/asmmacro.h> | 14 | #include <asm/asmmacro.h> |
15 | #include <asm/cacheops.h> | 15 | #include <asm/cacheops.h> |
16 | #include <asm/irqflags.h> | ||
16 | #include <asm/regdef.h> | 17 | #include <asm/regdef.h> |
17 | #include <asm/fpregdef.h> | 18 | #include <asm/fpregdef.h> |
18 | #include <asm/mipsregs.h> | 19 | #include <asm/mipsregs.h> |
@@ -128,6 +129,7 @@ handle_vcei: | |||
128 | NESTED(handle_int, PT_SIZE, sp) | 129 | NESTED(handle_int, PT_SIZE, sp) |
129 | SAVE_ALL | 130 | SAVE_ALL |
130 | CLI | 131 | CLI |
132 | TRACE_IRQS_OFF | ||
131 | 133 | ||
132 | PTR_LA ra, ret_from_irq | 134 | PTR_LA ra, ret_from_irq |
133 | move a0, sp | 135 | move a0, sp |
@@ -216,6 +218,7 @@ NESTED(except_vec_vi_handler, 0, sp) | |||
216 | _ehb | 218 | _ehb |
217 | #endif /* CONFIG_MIPS_MT_SMTC */ | 219 | #endif /* CONFIG_MIPS_MT_SMTC */ |
218 | CLI | 220 | CLI |
221 | TRACE_IRQS_OFF | ||
219 | move a0, sp | 222 | move a0, sp |
220 | jalr v0 | 223 | jalr v0 |
221 | j ret_from_irq | 224 | j ret_from_irq |
@@ -288,11 +291,13 @@ NESTED(nmi_handler, PT_SIZE, sp) | |||
288 | .endm | 291 | .endm |
289 | 292 | ||
290 | .macro __build_clear_sti | 293 | .macro __build_clear_sti |
294 | TRACE_IRQS_ON | ||
291 | STI | 295 | STI |
292 | .endm | 296 | .endm |
293 | 297 | ||
294 | .macro __build_clear_cli | 298 | .macro __build_clear_cli |
295 | CLI | 299 | CLI |
300 | TRACE_IRQS_OFF | ||
296 | .endm | 301 | .endm |
297 | 302 | ||
298 | .macro __build_clear_fpe | 303 | .macro __build_clear_fpe |
@@ -300,6 +305,7 @@ NESTED(nmi_handler, PT_SIZE, sp) | |||
300 | li a2, ~(0x3f << 12) | 305 | li a2, ~(0x3f << 12) |
301 | and a2, a1 | 306 | and a2, a1 |
302 | ctc1 a2, fcr31 | 307 | ctc1 a2, fcr31 |
308 | TRACE_IRQS_ON | ||
303 | STI | 309 | STI |
304 | .endm | 310 | .endm |
305 | 311 | ||
@@ -365,7 +371,7 @@ NESTED(nmi_handler, PT_SIZE, sp) | |||
365 | BUILD_HANDLER mdmx mdmx sti silent /* #22 */ | 371 | BUILD_HANDLER mdmx mdmx sti silent /* #22 */ |
366 | BUILD_HANDLER watch watch sti verbose /* #23 */ | 372 | BUILD_HANDLER watch watch sti verbose /* #23 */ |
367 | BUILD_HANDLER mcheck mcheck cli verbose /* #24 */ | 373 | BUILD_HANDLER mcheck mcheck cli verbose /* #24 */ |
368 | BUILD_HANDLER mt mt sti verbose /* #25 */ | 374 | BUILD_HANDLER mt mt sti silent /* #25 */ |
369 | BUILD_HANDLER dsp dsp sti silent /* #26 */ | 375 | BUILD_HANDLER dsp dsp sti silent /* #26 */ |
370 | BUILD_HANDLER reserved reserved sti verbose /* others */ | 376 | BUILD_HANDLER reserved reserved sti verbose /* others */ |
371 | 377 | ||
diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S index 476c1eb33c94..8c6db0fc72f0 100644 --- a/arch/mips/kernel/head.S +++ b/arch/mips/kernel/head.S | |||
@@ -5,7 +5,7 @@ | |||
5 | * | 5 | * |
6 | * Copyright (C) 1994, 1995 Waldorf Electronics | 6 | * Copyright (C) 1994, 1995 Waldorf Electronics |
7 | * Written by Ralf Baechle and Andreas Busse | 7 | * Written by Ralf Baechle and Andreas Busse |
8 | * Copyright (C) 1994, 95, 96, 97, 98, 99, 2003 Ralf Baechle | 8 | * Copyright (C) 1994 - 99, 2003, 06 Ralf Baechle |
9 | * Copyright (C) 1996 Paul M. Antoine | 9 | * Copyright (C) 1996 Paul M. Antoine |
10 | * Modified for DECStation and hence R3000 support by Paul M. Antoine | 10 | * Modified for DECStation and hence R3000 support by Paul M. Antoine |
11 | * Further modifications by David S. Miller and Harald Koerfgen | 11 | * Further modifications by David S. Miller and Harald Koerfgen |
@@ -18,6 +18,7 @@ | |||
18 | 18 | ||
19 | #include <asm/asm.h> | 19 | #include <asm/asm.h> |
20 | #include <asm/asmmacro.h> | 20 | #include <asm/asmmacro.h> |
21 | #include <asm/irqflags.h> | ||
21 | #include <asm/regdef.h> | 22 | #include <asm/regdef.h> |
22 | #include <asm/page.h> | 23 | #include <asm/page.h> |
23 | #include <asm/mipsregs.h> | 24 | #include <asm/mipsregs.h> |
diff --git a/arch/mips/kernel/i8259.c b/arch/mips/kernel/i8259.c index 91ffb1233cad..ea36c8e8852c 100644 --- a/arch/mips/kernel/i8259.c +++ b/arch/mips/kernel/i8259.c | |||
@@ -51,7 +51,7 @@ static unsigned int startup_8259A_irq(unsigned int irq) | |||
51 | return 0; /* never anything pending */ | 51 | return 0; /* never anything pending */ |
52 | } | 52 | } |
53 | 53 | ||
54 | static struct hw_interrupt_type i8259A_irq_type = { | 54 | static struct irq_chip i8259A_irq_type = { |
55 | .typename = "XT-PIC", | 55 | .typename = "XT-PIC", |
56 | .startup = startup_8259A_irq, | 56 | .startup = startup_8259A_irq, |
57 | .shutdown = shutdown_8259A_irq, | 57 | .shutdown = shutdown_8259A_irq, |
diff --git a/arch/mips/kernel/irixelf.c b/arch/mips/kernel/irixelf.c index 10d3644e3608..ab12c8f01518 100644 --- a/arch/mips/kernel/irixelf.c +++ b/arch/mips/kernel/irixelf.c | |||
@@ -999,8 +999,6 @@ static inline int maydump(struct vm_area_struct *vma) | |||
999 | return 1; | 999 | return 1; |
1000 | } | 1000 | } |
1001 | 1001 | ||
1002 | #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) | ||
1003 | |||
1004 | /* An ELF note in memory. */ | 1002 | /* An ELF note in memory. */ |
1005 | struct memelfnote | 1003 | struct memelfnote |
1006 | { | 1004 | { |
diff --git a/arch/mips/kernel/irq-msc01.c b/arch/mips/kernel/irq-msc01.c index f8cd1ac64d88..63dfeb41796b 100644 --- a/arch/mips/kernel/irq-msc01.c +++ b/arch/mips/kernel/irq-msc01.c | |||
@@ -137,7 +137,7 @@ msc_bind_eic_interrupt (unsigned int irq, unsigned int set) | |||
137 | 137 | ||
138 | #define shutdown_msc_irq disable_msc_irq | 138 | #define shutdown_msc_irq disable_msc_irq |
139 | 139 | ||
140 | struct hw_interrupt_type msc_levelirq_type = { | 140 | struct irq_chip msc_levelirq_type = { |
141 | .typename = "SOC-it-Level", | 141 | .typename = "SOC-it-Level", |
142 | .startup = startup_msc_irq, | 142 | .startup = startup_msc_irq, |
143 | .shutdown = shutdown_msc_irq, | 143 | .shutdown = shutdown_msc_irq, |
@@ -147,7 +147,7 @@ struct hw_interrupt_type msc_levelirq_type = { | |||
147 | .end = end_msc_irq, | 147 | .end = end_msc_irq, |
148 | }; | 148 | }; |
149 | 149 | ||
150 | struct hw_interrupt_type msc_edgeirq_type = { | 150 | struct irq_chip msc_edgeirq_type = { |
151 | .typename = "SOC-it-Edge", | 151 | .typename = "SOC-it-Edge", |
152 | .startup =startup_msc_irq, | 152 | .startup =startup_msc_irq, |
153 | .shutdown = shutdown_msc_irq, | 153 | .shutdown = shutdown_msc_irq, |
diff --git a/arch/mips/kernel/irq-mv6434x.c b/arch/mips/kernel/irq-mv6434x.c index f9c763a65547..b117e64da64d 100644 --- a/arch/mips/kernel/irq-mv6434x.c +++ b/arch/mips/kernel/irq-mv6434x.c | |||
@@ -136,7 +136,7 @@ void ll_mv64340_irq(struct pt_regs *regs) | |||
136 | 136 | ||
137 | #define shutdown_mv64340_irq disable_mv64340_irq | 137 | #define shutdown_mv64340_irq disable_mv64340_irq |
138 | 138 | ||
139 | struct hw_interrupt_type mv64340_irq_type = { | 139 | struct irq_chip mv64340_irq_type = { |
140 | .typename = "MV-64340", | 140 | .typename = "MV-64340", |
141 | .startup = startup_mv64340_irq, | 141 | .startup = startup_mv64340_irq, |
142 | .shutdown = shutdown_mv64340_irq, | 142 | .shutdown = shutdown_mv64340_irq, |
diff --git a/arch/mips/kernel/irq-rm7000.c b/arch/mips/kernel/irq-rm7000.c index 121da385a94d..6b54c7109e2e 100644 --- a/arch/mips/kernel/irq-rm7000.c +++ b/arch/mips/kernel/irq-rm7000.c | |||
@@ -71,7 +71,7 @@ static void rm7k_cpu_irq_end(unsigned int irq) | |||
71 | unmask_rm7k_irq(irq); | 71 | unmask_rm7k_irq(irq); |
72 | } | 72 | } |
73 | 73 | ||
74 | static hw_irq_controller rm7k_irq_controller = { | 74 | static struct irq_chip rm7k_irq_controller = { |
75 | .typename = "RM7000", | 75 | .typename = "RM7000", |
76 | .startup = rm7k_cpu_irq_startup, | 76 | .startup = rm7k_cpu_irq_startup, |
77 | .shutdown = rm7k_cpu_irq_shutdown, | 77 | .shutdown = rm7k_cpu_irq_shutdown, |
diff --git a/arch/mips/kernel/irq-rm9000.c b/arch/mips/kernel/irq-rm9000.c index 25109c103e44..62f011ba97a2 100644 --- a/arch/mips/kernel/irq-rm9000.c +++ b/arch/mips/kernel/irq-rm9000.c | |||
@@ -105,7 +105,7 @@ static void rm9k_cpu_irq_end(unsigned int irq) | |||
105 | unmask_rm9k_irq(irq); | 105 | unmask_rm9k_irq(irq); |
106 | } | 106 | } |
107 | 107 | ||
108 | static hw_irq_controller rm9k_irq_controller = { | 108 | static struct irq_chip rm9k_irq_controller = { |
109 | .typename = "RM9000", | 109 | .typename = "RM9000", |
110 | .startup = rm9k_cpu_irq_startup, | 110 | .startup = rm9k_cpu_irq_startup, |
111 | .shutdown = rm9k_cpu_irq_shutdown, | 111 | .shutdown = rm9k_cpu_irq_shutdown, |
@@ -115,7 +115,7 @@ static hw_irq_controller rm9k_irq_controller = { | |||
115 | .end = rm9k_cpu_irq_end, | 115 | .end = rm9k_cpu_irq_end, |
116 | }; | 116 | }; |
117 | 117 | ||
118 | static hw_irq_controller rm9k_perfcounter_irq = { | 118 | static struct irq_chip rm9k_perfcounter_irq = { |
119 | .typename = "RM9000", | 119 | .typename = "RM9000", |
120 | .startup = rm9k_perfcounter_irq_startup, | 120 | .startup = rm9k_perfcounter_irq_startup, |
121 | .shutdown = rm9k_perfcounter_irq_shutdown, | 121 | .shutdown = rm9k_perfcounter_irq_shutdown, |
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index cde5e5afa179..d955aaefbb8e 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c | |||
@@ -136,7 +136,7 @@ void __init init_IRQ(void) | |||
136 | irq_desc[i].status = IRQ_DISABLED; | 136 | irq_desc[i].status = IRQ_DISABLED; |
137 | irq_desc[i].action = NULL; | 137 | irq_desc[i].action = NULL; |
138 | irq_desc[i].depth = 1; | 138 | irq_desc[i].depth = 1; |
139 | irq_desc[i].chip = &no_irq_type; | 139 | irq_desc[i].chip = &no_irq_chip; |
140 | spin_lock_init(&irq_desc[i].lock); | 140 | spin_lock_init(&irq_desc[i].lock); |
141 | #ifdef CONFIG_MIPS_MT_SMTC | 141 | #ifdef CONFIG_MIPS_MT_SMTC |
142 | irq_hwmask[i] = 0; | 142 | irq_hwmask[i] = 0; |
diff --git a/arch/mips/kernel/irq_cpu.c b/arch/mips/kernel/irq_cpu.c index 0e455a8ad860..9bb21c7f2149 100644 --- a/arch/mips/kernel/irq_cpu.c +++ b/arch/mips/kernel/irq_cpu.c | |||
@@ -94,7 +94,7 @@ static void mips_cpu_irq_end(unsigned int irq) | |||
94 | unmask_mips_irq(irq); | 94 | unmask_mips_irq(irq); |
95 | } | 95 | } |
96 | 96 | ||
97 | static hw_irq_controller mips_cpu_irq_controller = { | 97 | static struct irq_chip mips_cpu_irq_controller = { |
98 | .typename = "MIPS", | 98 | .typename = "MIPS", |
99 | .startup = mips_cpu_irq_startup, | 99 | .startup = mips_cpu_irq_startup, |
100 | .shutdown = mips_cpu_irq_shutdown, | 100 | .shutdown = mips_cpu_irq_shutdown, |
@@ -140,7 +140,7 @@ static void mips_mt_cpu_irq_ack(unsigned int irq) | |||
140 | 140 | ||
141 | #define mips_mt_cpu_irq_end mips_cpu_irq_end | 141 | #define mips_mt_cpu_irq_end mips_cpu_irq_end |
142 | 142 | ||
143 | static hw_irq_controller mips_mt_cpu_irq_controller = { | 143 | static struct irq_chip mips_mt_cpu_irq_controller = { |
144 | .typename = "MIPS", | 144 | .typename = "MIPS", |
145 | .startup = mips_mt_cpu_irq_startup, | 145 | .startup = mips_mt_cpu_irq_startup, |
146 | .shutdown = mips_mt_cpu_irq_shutdown, | 146 | .shutdown = mips_mt_cpu_irq_shutdown, |
diff --git a/arch/mips/kernel/mips-mt.c b/arch/mips/kernel/mips-mt.c index 4dcc39f42951..c1373a6e668b 100644 --- a/arch/mips/kernel/mips-mt.c +++ b/arch/mips/kernel/mips-mt.c | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
8 | #include <linux/cpumask.h> | 8 | #include <linux/cpumask.h> |
9 | #include <linux/interrupt.h> | 9 | #include <linux/interrupt.h> |
10 | #include <linux/security.h> | ||
10 | 11 | ||
11 | #include <asm/cpu.h> | 12 | #include <asm/cpu.h> |
12 | #include <asm/processor.h> | 13 | #include <asm/processor.h> |
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index 8f8101f878ca..ba1bcd83c7d3 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S | |||
@@ -3,13 +3,14 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 1995, 96, 97, 98, 99, 2000, 01, 02 by Ralf Baechle | 6 | * Copyright (C) 1995-99, 2000- 02, 06 Ralf Baechle <ralf@linux-mips.org> |
7 | * Copyright (C) 2001 MIPS Technologies, Inc. | 7 | * Copyright (C) 2001 MIPS Technologies, Inc. |
8 | * Copyright (C) 2004 Thiemo Seufer | 8 | * Copyright (C) 2004 Thiemo Seufer |
9 | */ | 9 | */ |
10 | #include <linux/errno.h> | 10 | #include <linux/errno.h> |
11 | #include <asm/asm.h> | 11 | #include <asm/asm.h> |
12 | #include <asm/asmmacro.h> | 12 | #include <asm/asmmacro.h> |
13 | #include <asm/irqflags.h> | ||
13 | #include <asm/mipsregs.h> | 14 | #include <asm/mipsregs.h> |
14 | #include <asm/regdef.h> | 15 | #include <asm/regdef.h> |
15 | #include <asm/stackframe.h> | 16 | #include <asm/stackframe.h> |
@@ -27,6 +28,18 @@ | |||
27 | NESTED(handle_sys, PT_SIZE, sp) | 28 | NESTED(handle_sys, PT_SIZE, sp) |
28 | .set noat | 29 | .set noat |
29 | SAVE_SOME | 30 | SAVE_SOME |
31 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
32 | TRACE_IRQS_ON | ||
33 | #ifdef CONFIG_64BIT | ||
34 | LONG_L $8, PT_R8(sp) | ||
35 | LONG_L $9, PT_R9(sp) | ||
36 | #endif | ||
37 | LONG_L $7, PT_R7(sp) | ||
38 | LONG_L $6, PT_R6(sp) | ||
39 | LONG_L $5, PT_R5(sp) | ||
40 | LONG_L $4, PT_R4(sp) | ||
41 | LONG_L $2, PT_R2(sp) | ||
42 | #endif | ||
30 | STI | 43 | STI |
31 | .set at | 44 | .set at |
32 | 45 | ||
@@ -647,6 +660,8 @@ einval: li v0, -EINVAL | |||
647 | sys sys_splice 4 | 660 | sys sys_splice 4 |
648 | sys sys_sync_file_range 7 /* 4305 */ | 661 | sys sys_sync_file_range 7 /* 4305 */ |
649 | sys sys_tee 4 | 662 | sys sys_tee 4 |
663 | sys sys_vmsplice 4 | ||
664 | sys sys_move_pages 6 | ||
650 | .endm | 665 | .endm |
651 | 666 | ||
652 | /* We pre-compute the number of _instruction_ bytes needed to | 667 | /* We pre-compute the number of _instruction_ bytes needed to |
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S index b4a34a625a2e..939e172db953 100644 --- a/arch/mips/kernel/scall64-64.S +++ b/arch/mips/kernel/scall64-64.S | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/errno.h> | 10 | #include <linux/errno.h> |
11 | #include <asm/asm.h> | 11 | #include <asm/asm.h> |
12 | #include <asm/asmmacro.h> | 12 | #include <asm/asmmacro.h> |
13 | #include <asm/irqflags.h> | ||
13 | #include <asm/mipsregs.h> | 14 | #include <asm/mipsregs.h> |
14 | #include <asm/regdef.h> | 15 | #include <asm/regdef.h> |
15 | #include <asm/stackframe.h> | 16 | #include <asm/stackframe.h> |
@@ -33,6 +34,7 @@ NESTED(handle_sys64, PT_SIZE, sp) | |||
33 | */ | 34 | */ |
34 | .set noat | 35 | .set noat |
35 | SAVE_SOME | 36 | SAVE_SOME |
37 | TRACE_IRQS_ON | ||
36 | STI | 38 | STI |
37 | .set at | 39 | .set at |
38 | #endif | 40 | #endif |
@@ -462,3 +464,5 @@ sys_call_table: | |||
462 | PTR sys_splice | 464 | PTR sys_splice |
463 | PTR sys_sync_file_range | 465 | PTR sys_sync_file_range |
464 | PTR sys_tee /* 5265 */ | 466 | PTR sys_tee /* 5265 */ |
467 | PTR sys_vmsplice | ||
468 | PTR sys_move_pages | ||
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index df8c4f8ccd61..98abbc5a9f13 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/errno.h> | 10 | #include <linux/errno.h> |
11 | #include <asm/asm.h> | 11 | #include <asm/asm.h> |
12 | #include <asm/asmmacro.h> | 12 | #include <asm/asmmacro.h> |
13 | #include <asm/irqflags.h> | ||
13 | #include <asm/mipsregs.h> | 14 | #include <asm/mipsregs.h> |
14 | #include <asm/regdef.h> | 15 | #include <asm/regdef.h> |
15 | #include <asm/stackframe.h> | 16 | #include <asm/stackframe.h> |
@@ -32,6 +33,7 @@ NESTED(handle_sysn32, PT_SIZE, sp) | |||
32 | #ifndef CONFIG_MIPS32_O32 | 33 | #ifndef CONFIG_MIPS32_O32 |
33 | .set noat | 34 | .set noat |
34 | SAVE_SOME | 35 | SAVE_SOME |
36 | TRACE_IRQS_ON | ||
35 | STI | 37 | STI |
36 | .set at | 38 | .set at |
37 | #endif | 39 | #endif |
@@ -388,3 +390,5 @@ EXPORT(sysn32_call_table) | |||
388 | PTR sys_splice | 390 | PTR sys_splice |
389 | PTR sys_sync_file_range | 391 | PTR sys_sync_file_range |
390 | PTR sys_tee | 392 | PTR sys_tee |
393 | PTR sys_vmsplice /* 6271 */ | ||
394 | PTR sys_move_pages | ||
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index f04fe4f085c3..505c9ee54009 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/errno.h> | 16 | #include <linux/errno.h> |
17 | #include <asm/asm.h> | 17 | #include <asm/asm.h> |
18 | #include <asm/asmmacro.h> | 18 | #include <asm/asmmacro.h> |
19 | #include <asm/irqflags.h> | ||
19 | #include <asm/mipsregs.h> | 20 | #include <asm/mipsregs.h> |
20 | #include <asm/regdef.h> | 21 | #include <asm/regdef.h> |
21 | #include <asm/stackframe.h> | 22 | #include <asm/stackframe.h> |
@@ -27,6 +28,7 @@ | |||
27 | NESTED(handle_sys, PT_SIZE, sp) | 28 | NESTED(handle_sys, PT_SIZE, sp) |
28 | .set noat | 29 | .set noat |
29 | SAVE_SOME | 30 | SAVE_SOME |
31 | TRACE_IRQS_ON | ||
30 | STI | 32 | STI |
31 | .set at | 33 | .set at |
32 | ld t1, PT_EPC(sp) # skip syscall on return | 34 | ld t1, PT_EPC(sp) # skip syscall on return |
@@ -510,4 +512,6 @@ sys_call_table: | |||
510 | PTR sys_splice | 512 | PTR sys_splice |
511 | PTR sys32_sync_file_range /* 4305 */ | 513 | PTR sys32_sync_file_range /* 4305 */ |
512 | PTR sys_tee | 514 | PTR sys_tee |
515 | PTR sys_vmsplice | ||
516 | PTR compat_sys_move_pages | ||
513 | .size sys_call_table,.-sys_call_table | 517 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index 5edd8d4bb665..8c2b596a136f 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/user.h> | 24 | #include <linux/user.h> |
25 | #include <linux/utsname.h> | 25 | #include <linux/utsname.h> |
26 | #include <linux/a.out.h> | 26 | #include <linux/a.out.h> |
27 | #include <linux/tty.h> | 27 | #include <linux/screen_info.h> |
28 | #include <linux/bootmem.h> | 28 | #include <linux/bootmem.h> |
29 | #include <linux/initrd.h> | 29 | #include <linux/initrd.h> |
30 | #include <linux/major.h> | 30 | #include <linux/major.h> |
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 9096a5ea4229..221895802dca 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
@@ -319,6 +319,32 @@ static void flush_tlb_mm_ipi(void *mm) | |||
319 | } | 319 | } |
320 | 320 | ||
321 | /* | 321 | /* |
322 | * Special Variant of smp_call_function for use by TLB functions: | ||
323 | * | ||
324 | * o No return value | ||
325 | * o collapses to normal function call on UP kernels | ||
326 | * o collapses to normal function call on systems with a single shared | ||
327 | * primary cache. | ||
328 | * o CONFIG_MIPS_MT_SMTC currently implies there is only one physical core. | ||
329 | */ | ||
330 | static inline void smp_on_other_tlbs(void (*func) (void *info), void *info) | ||
331 | { | ||
332 | #ifndef CONFIG_MIPS_MT_SMTC | ||
333 | smp_call_function(func, info, 1, 1); | ||
334 | #endif | ||
335 | } | ||
336 | |||
337 | static inline void smp_on_each_tlb(void (*func) (void *info), void *info) | ||
338 | { | ||
339 | preempt_disable(); | ||
340 | |||
341 | smp_on_other_tlbs(func, info); | ||
342 | func(info); | ||
343 | |||
344 | preempt_enable(); | ||
345 | } | ||
346 | |||
347 | /* | ||
322 | * The following tlb flush calls are invoked when old translations are | 348 | * The following tlb flush calls are invoked when old translations are |
323 | * being torn down, or pte attributes are changing. For single threaded | 349 | * being torn down, or pte attributes are changing. For single threaded |
324 | * address spaces, a new context is obtained on the current cpu, and tlb | 350 | * address spaces, a new context is obtained on the current cpu, and tlb |
@@ -336,7 +362,7 @@ void flush_tlb_mm(struct mm_struct *mm) | |||
336 | preempt_disable(); | 362 | preempt_disable(); |
337 | 363 | ||
338 | if ((atomic_read(&mm->mm_users) != 1) || (current->mm != mm)) { | 364 | if ((atomic_read(&mm->mm_users) != 1) || (current->mm != mm)) { |
339 | smp_call_function(flush_tlb_mm_ipi, (void *)mm, 1, 1); | 365 | smp_on_other_tlbs(flush_tlb_mm_ipi, (void *)mm); |
340 | } else { | 366 | } else { |
341 | int i; | 367 | int i; |
342 | for (i = 0; i < num_online_cpus(); i++) | 368 | for (i = 0; i < num_online_cpus(); i++) |
@@ -372,7 +398,7 @@ void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned l | |||
372 | fd.vma = vma; | 398 | fd.vma = vma; |
373 | fd.addr1 = start; | 399 | fd.addr1 = start; |
374 | fd.addr2 = end; | 400 | fd.addr2 = end; |
375 | smp_call_function(flush_tlb_range_ipi, (void *)&fd, 1, 1); | 401 | smp_on_other_tlbs(flush_tlb_range_ipi, (void *)&fd); |
376 | } else { | 402 | } else { |
377 | int i; | 403 | int i; |
378 | for (i = 0; i < num_online_cpus(); i++) | 404 | for (i = 0; i < num_online_cpus(); i++) |
@@ -414,7 +440,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) | |||
414 | 440 | ||
415 | fd.vma = vma; | 441 | fd.vma = vma; |
416 | fd.addr1 = page; | 442 | fd.addr1 = page; |
417 | smp_call_function(flush_tlb_page_ipi, (void *)&fd, 1, 1); | 443 | smp_on_other_tlbs(flush_tlb_page_ipi, (void *)&fd); |
418 | } else { | 444 | } else { |
419 | int i; | 445 | int i; |
420 | for (i = 0; i < num_online_cpus(); i++) | 446 | for (i = 0; i < num_online_cpus(); i++) |
@@ -434,8 +460,7 @@ static void flush_tlb_one_ipi(void *info) | |||
434 | 460 | ||
435 | void flush_tlb_one(unsigned long vaddr) | 461 | void flush_tlb_one(unsigned long vaddr) |
436 | { | 462 | { |
437 | smp_call_function(flush_tlb_one_ipi, (void *) vaddr, 1, 1); | 463 | smp_on_each_tlb(flush_tlb_one_ipi, (void *) vaddr); |
438 | local_flush_tlb_one(vaddr); | ||
439 | } | 464 | } |
440 | 465 | ||
441 | static DEFINE_PER_CPU(struct cpu, cpu_devices); | 466 | static DEFINE_PER_CPU(struct cpu, cpu_devices); |
diff --git a/arch/mips/kernel/smtc-asm.S b/arch/mips/kernel/smtc-asm.S index 72c6d98f8854..4cc3dea36612 100644 --- a/arch/mips/kernel/smtc-asm.S +++ b/arch/mips/kernel/smtc-asm.S | |||
@@ -96,6 +96,7 @@ FEXPORT(__smtc_ipi_vector) | |||
96 | /* Save all will redundantly recompute the SP, but use it for now */ | 96 | /* Save all will redundantly recompute the SP, but use it for now */ |
97 | SAVE_ALL | 97 | SAVE_ALL |
98 | CLI | 98 | CLI |
99 | TRACE_IRQS_OFF | ||
99 | move a0,sp | 100 | move a0,sp |
100 | /* Function to be invoked passed stack pad slot 5 */ | 101 | /* Function to be invoked passed stack pad slot 5 */ |
101 | lw t0,PT_PADSLOT5(sp) | 102 | lw t0,PT_PADSLOT5(sp) |
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index a48d9e553083..604bcc5cb7c8 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c | |||
@@ -127,7 +127,7 @@ static int __init stlb_disable(char *s) | |||
127 | static int __init asidmask_set(char *str) | 127 | static int __init asidmask_set(char *str) |
128 | { | 128 | { |
129 | get_option(&str, &asidmask); | 129 | get_option(&str, &asidmask); |
130 | switch(asidmask) { | 130 | switch (asidmask) { |
131 | case 0x1: | 131 | case 0x1: |
132 | case 0x3: | 132 | case 0x3: |
133 | case 0x7: | 133 | case 0x7: |
@@ -249,7 +249,7 @@ void smtc_configure_tlb(void) | |||
249 | /* | 249 | /* |
250 | * Only count if the MMU Type indicated is TLB | 250 | * Only count if the MMU Type indicated is TLB |
251 | */ | 251 | */ |
252 | if(((read_vpe_c0_config() & MIPS_CONF_MT) >> 7) == 1) { | 252 | if (((read_vpe_c0_config() & MIPS_CONF_MT) >> 7) == 1) { |
253 | config1val = read_vpe_c0_config1(); | 253 | config1val = read_vpe_c0_config1(); |
254 | tlbsiz += ((config1val >> 25) & 0x3f) + 1; | 254 | tlbsiz += ((config1val >> 25) & 0x3f) + 1; |
255 | } | 255 | } |
@@ -500,7 +500,7 @@ void mipsmt_prepare_cpus(void) | |||
500 | /* Set up coprocessor affinity CPU mask(s) */ | 500 | /* Set up coprocessor affinity CPU mask(s) */ |
501 | 501 | ||
502 | for (tc = 0; tc < ntc; tc++) { | 502 | for (tc = 0; tc < ntc; tc++) { |
503 | if(cpu_data[tc].options & MIPS_CPU_FPU) | 503 | if (cpu_data[tc].options & MIPS_CPU_FPU) |
504 | cpu_set(tc, mt_fpu_cpumask); | 504 | cpu_set(tc, mt_fpu_cpumask); |
505 | } | 505 | } |
506 | 506 | ||
@@ -577,13 +577,13 @@ void smtc_init_secondary(void) | |||
577 | { | 577 | { |
578 | /* | 578 | /* |
579 | * Start timer on secondary VPEs if necessary. | 579 | * Start timer on secondary VPEs if necessary. |
580 | * mips_timer_setup should already have been invoked by init/main | 580 | * plat_timer_setup has already have been invoked by init/main |
581 | * on "boot" TC. Like per_cpu_trap_init() hack, this assumes that | 581 | * on "boot" TC. Like per_cpu_trap_init() hack, this assumes that |
582 | * SMTC init code assigns TCs consdecutively and in ascending order | 582 | * SMTC init code assigns TCs consdecutively and in ascending order |
583 | * to across available VPEs. | 583 | * to across available VPEs. |
584 | */ | 584 | */ |
585 | if(((read_c0_tcbind() & TCBIND_CURTC) != 0) | 585 | if (((read_c0_tcbind() & TCBIND_CURTC) != 0) && |
586 | && ((read_c0_tcbind() & TCBIND_CURVPE) | 586 | ((read_c0_tcbind() & TCBIND_CURVPE) |
587 | != cpu_data[smp_processor_id() - 1].vpe_id)){ | 587 | != cpu_data[smp_processor_id() - 1].vpe_id)){ |
588 | write_c0_compare (read_c0_count() + mips_hpt_frequency/HZ); | 588 | write_c0_compare (read_c0_count() + mips_hpt_frequency/HZ); |
589 | } | 589 | } |
@@ -757,8 +757,8 @@ void smtc_send_ipi(int cpu, int type, unsigned int action) | |||
757 | write_tc_c0_tchalt(0); | 757 | write_tc_c0_tchalt(0); |
758 | UNLOCK_CORE_PRA(); | 758 | UNLOCK_CORE_PRA(); |
759 | /* Try to reduce redundant timer interrupt messages */ | 759 | /* Try to reduce redundant timer interrupt messages */ |
760 | if(type == SMTC_CLOCK_TICK) { | 760 | if (type == SMTC_CLOCK_TICK) { |
761 | if(atomic_postincrement(&ipi_timer_latch[cpu])!=0) { | 761 | if (atomic_postincrement(&ipi_timer_latch[cpu])!=0){ |
762 | smtc_ipi_nq(&freeIPIq, pipi); | 762 | smtc_ipi_nq(&freeIPIq, pipi); |
763 | return; | 763 | return; |
764 | } | 764 | } |
@@ -797,7 +797,7 @@ void post_direct_ipi(int cpu, struct smtc_ipi *pipi) | |||
797 | * CU bit of Status is indicator that TC was | 797 | * CU bit of Status is indicator that TC was |
798 | * already running on a kernel stack... | 798 | * already running on a kernel stack... |
799 | */ | 799 | */ |
800 | if(tcstatus & ST0_CU0) { | 800 | if (tcstatus & ST0_CU0) { |
801 | /* Note that this "- 1" is pointer arithmetic */ | 801 | /* Note that this "- 1" is pointer arithmetic */ |
802 | kstack = ((struct pt_regs *)read_tc_gpr_sp()) - 1; | 802 | kstack = ((struct pt_regs *)read_tc_gpr_sp()) - 1; |
803 | } else { | 803 | } else { |
@@ -840,31 +840,31 @@ void ipi_decode(struct pt_regs *regs, struct smtc_ipi *pipi) | |||
840 | 840 | ||
841 | smtc_ipi_nq(&freeIPIq, pipi); | 841 | smtc_ipi_nq(&freeIPIq, pipi); |
842 | switch (type_copy) { | 842 | switch (type_copy) { |
843 | case SMTC_CLOCK_TICK: | 843 | case SMTC_CLOCK_TICK: |
844 | /* Invoke Clock "Interrupt" */ | 844 | /* Invoke Clock "Interrupt" */ |
845 | ipi_timer_latch[dest_copy] = 0; | 845 | ipi_timer_latch[dest_copy] = 0; |
846 | #ifdef SMTC_IDLE_HOOK_DEBUG | 846 | #ifdef SMTC_IDLE_HOOK_DEBUG |
847 | clock_hang_reported[dest_copy] = 0; | 847 | clock_hang_reported[dest_copy] = 0; |
848 | #endif /* SMTC_IDLE_HOOK_DEBUG */ | 848 | #endif /* SMTC_IDLE_HOOK_DEBUG */ |
849 | local_timer_interrupt(0, NULL, regs); | 849 | local_timer_interrupt(0, NULL, regs); |
850 | break; | ||
851 | case LINUX_SMP_IPI: | ||
852 | switch ((int)arg_copy) { | ||
853 | case SMP_RESCHEDULE_YOURSELF: | ||
854 | ipi_resched_interrupt(regs); | ||
850 | break; | 855 | break; |
851 | case LINUX_SMP_IPI: | 856 | case SMP_CALL_FUNCTION: |
852 | switch ((int)arg_copy) { | 857 | ipi_call_interrupt(regs); |
853 | case SMP_RESCHEDULE_YOURSELF: | ||
854 | ipi_resched_interrupt(regs); | ||
855 | break; | ||
856 | case SMP_CALL_FUNCTION: | ||
857 | ipi_call_interrupt(regs); | ||
858 | break; | ||
859 | default: | ||
860 | printk("Impossible SMTC IPI Argument 0x%x\n", | ||
861 | (int)arg_copy); | ||
862 | break; | ||
863 | } | ||
864 | break; | 858 | break; |
865 | default: | 859 | default: |
866 | printk("Impossible SMTC IPI Type 0x%x\n", type_copy); | 860 | printk("Impossible SMTC IPI Argument 0x%x\n", |
861 | (int)arg_copy); | ||
867 | break; | 862 | break; |
863 | } | ||
864 | break; | ||
865 | default: | ||
866 | printk("Impossible SMTC IPI Type 0x%x\n", type_copy); | ||
867 | break; | ||
868 | } | 868 | } |
869 | } | 869 | } |
870 | 870 | ||
@@ -879,7 +879,7 @@ void deferred_smtc_ipi(struct pt_regs *regs) | |||
879 | * Test is not atomic, but much faster than a dequeue, | 879 | * Test is not atomic, but much faster than a dequeue, |
880 | * and the vast majority of invocations will have a null queue. | 880 | * and the vast majority of invocations will have a null queue. |
881 | */ | 881 | */ |
882 | if(IPIQ[q].head != NULL) { | 882 | if (IPIQ[q].head != NULL) { |
883 | while((pipi = smtc_ipi_dq(&IPIQ[q])) != NULL) { | 883 | while((pipi = smtc_ipi_dq(&IPIQ[q])) != NULL) { |
884 | /* ipi_decode() should be called with interrupts off */ | 884 | /* ipi_decode() should be called with interrupts off */ |
885 | local_irq_save(flags); | 885 | local_irq_save(flags); |
@@ -1254,7 +1254,7 @@ void smtc_flush_tlb_asid(unsigned long asid) | |||
1254 | tlb_read(); | 1254 | tlb_read(); |
1255 | ehb(); | 1255 | ehb(); |
1256 | ehi = read_c0_entryhi(); | 1256 | ehi = read_c0_entryhi(); |
1257 | if((ehi & ASID_MASK) == asid) { | 1257 | if ((ehi & ASID_MASK) == asid) { |
1258 | /* | 1258 | /* |
1259 | * Invalidate only entries with specified ASID, | 1259 | * Invalidate only entries with specified ASID, |
1260 | * makiing sure all entries differ. | 1260 | * makiing sure all entries differ. |
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c index 2393c11d5a20..170cb67f4ede 100644 --- a/arch/mips/kernel/time.c +++ b/arch/mips/kernel/time.c | |||
@@ -566,14 +566,13 @@ asmlinkage void ll_local_timer_interrupt(int irq, struct pt_regs *regs) | |||
566 | * 2) setup xtime based on rtc_mips_get_time(). | 566 | * 2) setup xtime based on rtc_mips_get_time(). |
567 | * 3) choose a appropriate gettimeoffset routine. | 567 | * 3) choose a appropriate gettimeoffset routine. |
568 | * 4) calculate a couple of cached variables for later usage | 568 | * 4) calculate a couple of cached variables for later usage |
569 | * 5) board_timer_setup() - | 569 | * 5) plat_timer_setup() - |
570 | * a) (optional) over-write any choices made above by time_init(). | 570 | * a) (optional) over-write any choices made above by time_init(). |
571 | * b) machine specific code should setup the timer irqaction. | 571 | * b) machine specific code should setup the timer irqaction. |
572 | * c) enable the timer interrupt | 572 | * c) enable the timer interrupt |
573 | */ | 573 | */ |
574 | 574 | ||
575 | void (*board_time_init)(void); | 575 | void (*board_time_init)(void); |
576 | void (*board_timer_setup)(struct irqaction *irq); | ||
577 | 576 | ||
578 | unsigned int mips_hpt_frequency; | 577 | unsigned int mips_hpt_frequency; |
579 | 578 | ||
@@ -718,7 +717,7 @@ void __init time_init(void) | |||
718 | * to be NULL function so that we are sure the high-level code | 717 | * to be NULL function so that we are sure the high-level code |
719 | * is not invoked accidentally. | 718 | * is not invoked accidentally. |
720 | */ | 719 | */ |
721 | board_timer_setup(&timer_irqaction); | 720 | plat_timer_setup(&timer_irqaction); |
722 | } | 721 | } |
723 | 722 | ||
724 | #define FEBRUARY 2 | 723 | #define FEBRUARY 2 |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 8b95eca9ac74..954a198494ef 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -569,6 +569,8 @@ asmlinkage void do_ov(struct pt_regs *regs) | |||
569 | */ | 569 | */ |
570 | asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31) | 570 | asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31) |
571 | { | 571 | { |
572 | die_if_kernel("FP exception in kernel code", regs); | ||
573 | |||
572 | if (fcr31 & FPU_CSR_UNI_X) { | 574 | if (fcr31 & FPU_CSR_UNI_X) { |
573 | int sig; | 575 | int sig; |
574 | 576 | ||
@@ -847,31 +849,29 @@ asmlinkage void do_mt(struct pt_regs *regs) | |||
847 | { | 849 | { |
848 | int subcode; | 850 | int subcode; |
849 | 851 | ||
850 | die_if_kernel("MIPS MT Thread exception in kernel", regs); | ||
851 | |||
852 | subcode = (read_vpe_c0_vpecontrol() & VPECONTROL_EXCPT) | 852 | subcode = (read_vpe_c0_vpecontrol() & VPECONTROL_EXCPT) |
853 | >> VPECONTROL_EXCPT_SHIFT; | 853 | >> VPECONTROL_EXCPT_SHIFT; |
854 | switch (subcode) { | 854 | switch (subcode) { |
855 | case 0: | 855 | case 0: |
856 | printk(KERN_ERR "Thread Underflow\n"); | 856 | printk(KERN_DEBUG "Thread Underflow\n"); |
857 | break; | 857 | break; |
858 | case 1: | 858 | case 1: |
859 | printk(KERN_ERR "Thread Overflow\n"); | 859 | printk(KERN_DEBUG "Thread Overflow\n"); |
860 | break; | 860 | break; |
861 | case 2: | 861 | case 2: |
862 | printk(KERN_ERR "Invalid YIELD Qualifier\n"); | 862 | printk(KERN_DEBUG "Invalid YIELD Qualifier\n"); |
863 | break; | 863 | break; |
864 | case 3: | 864 | case 3: |
865 | printk(KERN_ERR "Gating Storage Exception\n"); | 865 | printk(KERN_DEBUG "Gating Storage Exception\n"); |
866 | break; | 866 | break; |
867 | case 4: | 867 | case 4: |
868 | printk(KERN_ERR "YIELD Scheduler Exception\n"); | 868 | printk(KERN_DEBUG "YIELD Scheduler Exception\n"); |
869 | break; | 869 | break; |
870 | case 5: | 870 | case 5: |
871 | printk(KERN_ERR "Gating Storage Schedulier Exception\n"); | 871 | printk(KERN_DEBUG "Gating Storage Schedulier Exception\n"); |
872 | break; | 872 | break; |
873 | default: | 873 | default: |
874 | printk(KERN_ERR "*** UNKNOWN THREAD EXCEPTION %d ***\n", | 874 | printk(KERN_DEBUG "*** UNKNOWN THREAD EXCEPTION %d ***\n", |
875 | subcode); | 875 | subcode); |
876 | break; | 876 | break; |
877 | } | 877 | } |
@@ -980,10 +980,10 @@ void ejtag_exception_handler(struct pt_regs *regs) | |||
980 | unsigned long depc, old_epc; | 980 | unsigned long depc, old_epc; |
981 | unsigned int debug; | 981 | unsigned int debug; |
982 | 982 | ||
983 | printk("SDBBP EJTAG debug exception - not handled yet, just ignored!\n"); | 983 | printk(KERN_DEBUG "SDBBP EJTAG debug exception - not handled yet, just ignored!\n"); |
984 | depc = read_c0_depc(); | 984 | depc = read_c0_depc(); |
985 | debug = read_c0_debug(); | 985 | debug = read_c0_debug(); |
986 | printk("c0_depc = %0*lx, DEBUG = %08x\n", field, depc, debug); | 986 | printk(KERN_DEBUG "c0_depc = %0*lx, DEBUG = %08x\n", field, depc, debug); |
987 | if (debug & 0x80000000) { | 987 | if (debug & 0x80000000) { |
988 | /* | 988 | /* |
989 | * In branch delay slot. | 989 | * In branch delay slot. |
@@ -1001,7 +1001,7 @@ void ejtag_exception_handler(struct pt_regs *regs) | |||
1001 | write_c0_depc(depc); | 1001 | write_c0_depc(depc); |
1002 | 1002 | ||
1003 | #if 0 | 1003 | #if 0 |
1004 | printk("\n\n----- Enable EJTAG single stepping ----\n\n"); | 1004 | printk(KERN_DEBUG "\n\n----- Enable EJTAG single stepping ----\n\n"); |
1005 | write_c0_debug(debug | 0x100); | 1005 | write_c0_debug(debug | 0x100); |
1006 | #endif | 1006 | #endif |
1007 | } | 1007 | } |
diff --git a/arch/mips/kernel/vpe.c b/arch/mips/kernel/vpe.c index 85d7df7b18e1..9ee0ec2cd067 100644 --- a/arch/mips/kernel/vpe.c +++ b/arch/mips/kernel/vpe.c | |||
@@ -28,7 +28,6 @@ | |||
28 | * i.e cat spapp >/dev/vpe1. | 28 | * i.e cat spapp >/dev/vpe1. |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <linux/config.h> | ||
32 | #include <linux/kernel.h> | 31 | #include <linux/kernel.h> |
33 | #include <linux/module.h> | 32 | #include <linux/module.h> |
34 | #include <linux/fs.h> | 33 | #include <linux/fs.h> |