diff options
Diffstat (limited to 'arch/mips/kernel')
-rw-r--r-- | arch/mips/kernel/binfmt_elfo32.c | 20 | ||||
-rw-r--r-- | arch/mips/kernel/cevt-ds1287.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/cevt-gt641xx.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/csrc-ioasic.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/irq-gic.c | 19 | ||||
-rw-r--r-- | arch/mips/kernel/irq-gt641xx.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/scall32-o32.S | 2 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-64.S | 2 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-n32.S | 2 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-o32.S | 2 | ||||
-rw-r--r-- | arch/mips/kernel/smp-cmp.c | 66 | ||||
-rw-r--r-- | arch/mips/kernel/sync-r4k.c | 31 | ||||
-rw-r--r-- | arch/mips/kernel/vpe.c | 2 |
13 files changed, 59 insertions, 95 deletions
diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c index e1333d7319e2..ff448233dab5 100644 --- a/arch/mips/kernel/binfmt_elfo32.c +++ b/arch/mips/kernel/binfmt_elfo32.c | |||
@@ -53,6 +53,23 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | |||
53 | #define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2) | 53 | #define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2) |
54 | 54 | ||
55 | #include <asm/processor.h> | 55 | #include <asm/processor.h> |
56 | |||
57 | /* | ||
58 | * When this file is selected, we are definitely running a 64bit kernel. | ||
59 | * So using the right regs define in asm/reg.h | ||
60 | */ | ||
61 | #define WANT_COMPAT_REG_H | ||
62 | |||
63 | /* These MUST be defined before elf.h gets included */ | ||
64 | extern void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs); | ||
65 | #define ELF_CORE_COPY_REGS(_dest, _regs) elf32_core_copy_regs(_dest, _regs); | ||
66 | #define ELF_CORE_COPY_TASK_REGS(_tsk, _dest) \ | ||
67 | ({ \ | ||
68 | int __res = 1; \ | ||
69 | elf32_core_copy_regs(*(_dest), task_pt_regs(_tsk)); \ | ||
70 | __res; \ | ||
71 | }) | ||
72 | |||
56 | #include <linux/module.h> | 73 | #include <linux/module.h> |
57 | #include <linux/elfcore.h> | 74 | #include <linux/elfcore.h> |
58 | #include <linux/compat.h> | 75 | #include <linux/compat.h> |
@@ -110,9 +127,6 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value) | |||
110 | value->tv_usec = rem / NSEC_PER_USEC; | 127 | value->tv_usec = rem / NSEC_PER_USEC; |
111 | } | 128 | } |
112 | 129 | ||
113 | #undef ELF_CORE_COPY_REGS | ||
114 | #define ELF_CORE_COPY_REGS(_dest, _regs) elf32_core_copy_regs(_dest, _regs); | ||
115 | |||
116 | void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs) | 130 | void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs) |
117 | { | 131 | { |
118 | int i; | 132 | int i; |
diff --git a/arch/mips/kernel/cevt-ds1287.c b/arch/mips/kernel/cevt-ds1287.c index 1ada45ea0700..6996da4d74a2 100644 --- a/arch/mips/kernel/cevt-ds1287.c +++ b/arch/mips/kernel/cevt-ds1287.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * DS1287 clockevent driver | 2 | * DS1287 clockevent driver |
3 | * | 3 | * |
4 | * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/kernel/cevt-gt641xx.c b/arch/mips/kernel/cevt-gt641xx.c index e9b787feedcb..92351e00ae0e 100644 --- a/arch/mips/kernel/cevt-gt641xx.c +++ b/arch/mips/kernel/cevt-gt641xx.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * GT641xx clockevent routines. | 2 | * GT641xx clockevent routines. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/kernel/csrc-ioasic.c b/arch/mips/kernel/csrc-ioasic.c index b551f48d3a07..23da108506b0 100644 --- a/arch/mips/kernel/csrc-ioasic.c +++ b/arch/mips/kernel/csrc-ioasic.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * DEC I/O ASIC's counter clocksource | 2 | * DEC I/O ASIC's counter clocksource |
3 | * | 3 | * |
4 | * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/kernel/irq-gic.c b/arch/mips/kernel/irq-gic.c index 39000f103f2c..d2072cd38592 100644 --- a/arch/mips/kernel/irq-gic.c +++ b/arch/mips/kernel/irq-gic.c | |||
@@ -107,9 +107,7 @@ static unsigned int gic_irq_startup(unsigned int irq) | |||
107 | { | 107 | { |
108 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | 108 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
109 | irq -= _irqbase; | 109 | irq -= _irqbase; |
110 | /* FIXME: this is wrong for !GICISWORDLITTLEENDIAN */ | 110 | GIC_SET_INTR_MASK(irq, 1); |
111 | GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_SMASK_31_0_OFS + (irq / 32))), | ||
112 | 1 << (irq % 32)); | ||
113 | return 0; | 111 | return 0; |
114 | } | 112 | } |
115 | 113 | ||
@@ -120,8 +118,7 @@ static void gic_irq_ack(unsigned int irq) | |||
120 | #endif | 118 | #endif |
121 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | 119 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
122 | irq -= _irqbase; | 120 | irq -= _irqbase; |
123 | GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_RMASK_31_0_OFS + (irq / 32))), | 121 | GIC_CLR_INTR_MASK(irq, 1); |
124 | 1 << (irq % 32)); | ||
125 | 122 | ||
126 | if (_intrmap[irq].trigtype == GIC_TRIG_EDGE) { | 123 | if (_intrmap[irq].trigtype == GIC_TRIG_EDGE) { |
127 | if (!gic_wedgeb2bok) | 124 | if (!gic_wedgeb2bok) |
@@ -138,18 +135,14 @@ static void gic_mask_irq(unsigned int irq) | |||
138 | { | 135 | { |
139 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | 136 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
140 | irq -= _irqbase; | 137 | irq -= _irqbase; |
141 | /* FIXME: this is wrong for !GICISWORDLITTLEENDIAN */ | 138 | GIC_CLR_INTR_MASK(irq, 1); |
142 | GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_RMASK_31_0_OFS + (irq / 32))), | ||
143 | 1 << (irq % 32)); | ||
144 | } | 139 | } |
145 | 140 | ||
146 | static void gic_unmask_irq(unsigned int irq) | 141 | static void gic_unmask_irq(unsigned int irq) |
147 | { | 142 | { |
148 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | 143 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
149 | irq -= _irqbase; | 144 | irq -= _irqbase; |
150 | /* FIXME: this is wrong for !GICISWORDLITTLEENDIAN */ | 145 | GIC_SET_INTR_MASK(irq, 1); |
151 | GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_SMASK_31_0_OFS + (irq / 32))), | ||
152 | 1 << (irq % 32)); | ||
153 | } | 146 | } |
154 | 147 | ||
155 | #ifdef CONFIG_SMP | 148 | #ifdef CONFIG_SMP |
@@ -254,6 +247,10 @@ static void __init gic_basic_init(void) | |||
254 | if (cpu == X) | 247 | if (cpu == X) |
255 | continue; | 248 | continue; |
256 | 249 | ||
250 | if (cpu == 0 && i != 0 && _intrmap[i].intrnum == 0 && | ||
251 | _intrmap[i].ipiflag == 0) | ||
252 | continue; | ||
253 | |||
257 | setup_intr(_intrmap[i].intrnum, | 254 | setup_intr(_intrmap[i].intrnum, |
258 | _intrmap[i].cpunum, | 255 | _intrmap[i].cpunum, |
259 | _intrmap[i].pin, | 256 | _intrmap[i].pin, |
diff --git a/arch/mips/kernel/irq-gt641xx.c b/arch/mips/kernel/irq-gt641xx.c index 1b81b131f43c..ebcc5f7ad9c2 100644 --- a/arch/mips/kernel/irq-gt641xx.c +++ b/arch/mips/kernel/irq-gt641xx.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * GT641xx IRQ routines. | 2 | * GT641xx IRQ routines. |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index 0b31b9bda048..20a86e08fd58 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S | |||
@@ -652,6 +652,8 @@ einval: li v0, -ENOSYS | |||
652 | sys sys_inotify_init1 1 | 652 | sys sys_inotify_init1 1 |
653 | sys sys_preadv 6 /* 4330 */ | 653 | sys sys_preadv 6 /* 4330 */ |
654 | sys sys_pwritev 6 | 654 | sys sys_pwritev 6 |
655 | sys sys_rt_tgsigqueueinfo 4 | ||
656 | sys sys_perf_counter_open 5 | ||
655 | .endm | 657 | .endm |
656 | 658 | ||
657 | /* We pre-compute the number of _instruction_ bytes needed to | 659 | /* 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 c647fd6e722f..b046130d4c5d 100644 --- a/arch/mips/kernel/scall64-64.S +++ b/arch/mips/kernel/scall64-64.S | |||
@@ -489,4 +489,6 @@ sys_call_table: | |||
489 | PTR sys_inotify_init1 | 489 | PTR sys_inotify_init1 |
490 | PTR sys_preadv | 490 | PTR sys_preadv |
491 | PTR sys_pwritev /* 5390 */ | 491 | PTR sys_pwritev /* 5390 */ |
492 | PTR sys_rt_tgsigqueueinfo | ||
493 | PTR sys_perf_counter_open | ||
492 | .size sys_call_table,.-sys_call_table | 494 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index 93cc672f4522..15874f9812cc 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
@@ -415,4 +415,6 @@ EXPORT(sysn32_call_table) | |||
415 | PTR sys_inotify_init1 | 415 | PTR sys_inotify_init1 |
416 | PTR sys_preadv | 416 | PTR sys_preadv |
417 | PTR sys_pwritev | 417 | PTR sys_pwritev |
418 | PTR compat_sys_rt_tgsigqueueinfo /* 5295 */ | ||
419 | PTR sys_perf_counter_open | ||
418 | .size sysn32_call_table,.-sysn32_call_table | 420 | .size sysn32_call_table,.-sysn32_call_table |
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index a5598b2339dd..781e0f1e9533 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
@@ -535,4 +535,6 @@ sys_call_table: | |||
535 | PTR sys_inotify_init1 | 535 | PTR sys_inotify_init1 |
536 | PTR compat_sys_preadv /* 4330 */ | 536 | PTR compat_sys_preadv /* 4330 */ |
537 | PTR compat_sys_pwritev | 537 | PTR compat_sys_pwritev |
538 | PTR compat_sys_rt_tgsigqueueinfo | ||
539 | PTR sys_perf_counter_open | ||
538 | .size sys_call_table,.-sys_call_table | 540 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/smp-cmp.c b/arch/mips/kernel/smp-cmp.c index 653be061b9ec..ad0ff5dc4d59 100644 --- a/arch/mips/kernel/smp-cmp.c +++ b/arch/mips/kernel/smp-cmp.c | |||
@@ -37,80 +37,24 @@ | |||
37 | #include <asm/mipsregs.h> | 37 | #include <asm/mipsregs.h> |
38 | #include <asm/mipsmtregs.h> | 38 | #include <asm/mipsmtregs.h> |
39 | #include <asm/mips_mt.h> | 39 | #include <asm/mips_mt.h> |
40 | 40 | #include <asm/amon.h> | |
41 | /* | 41 | #include <asm/gic.h> |
42 | * Crude manipulation of the CPU masks to control which | ||
43 | * which CPU's are brought online during initialisation | ||
44 | * | ||
45 | * Beware... this needs to be called after CPU discovery | ||
46 | * but before CPU bringup | ||
47 | */ | ||
48 | static int __init allowcpus(char *str) | ||
49 | { | ||
50 | cpumask_t cpu_allow_map; | ||
51 | char buf[256]; | ||
52 | int len; | ||
53 | |||
54 | cpus_clear(cpu_allow_map); | ||
55 | if (cpulist_parse(str, &cpu_allow_map) == 0) { | ||
56 | cpu_set(0, cpu_allow_map); | ||
57 | cpus_and(cpu_possible_map, cpu_possible_map, cpu_allow_map); | ||
58 | len = cpulist_scnprintf(buf, sizeof(buf)-1, &cpu_possible_map); | ||
59 | buf[len] = '\0'; | ||
60 | pr_debug("Allowable CPUs: %s\n", buf); | ||
61 | return 1; | ||
62 | } else | ||
63 | return 0; | ||
64 | } | ||
65 | __setup("allowcpus=", allowcpus); | ||
66 | 42 | ||
67 | static void ipi_call_function(unsigned int cpu) | 43 | static void ipi_call_function(unsigned int cpu) |
68 | { | 44 | { |
69 | unsigned int action = 0; | ||
70 | |||
71 | pr_debug("CPU%d: %s cpu %d status %08x\n", | 45 | pr_debug("CPU%d: %s cpu %d status %08x\n", |
72 | smp_processor_id(), __func__, cpu, read_c0_status()); | 46 | smp_processor_id(), __func__, cpu, read_c0_status()); |
73 | 47 | ||
74 | switch (cpu) { | 48 | gic_send_ipi(plat_ipi_call_int_xlate(cpu)); |
75 | case 0: | ||
76 | action = GIC_IPI_EXT_INTR_CALLFNC_VPE0; | ||
77 | break; | ||
78 | case 1: | ||
79 | action = GIC_IPI_EXT_INTR_CALLFNC_VPE1; | ||
80 | break; | ||
81 | case 2: | ||
82 | action = GIC_IPI_EXT_INTR_CALLFNC_VPE2; | ||
83 | break; | ||
84 | case 3: | ||
85 | action = GIC_IPI_EXT_INTR_CALLFNC_VPE3; | ||
86 | break; | ||
87 | } | ||
88 | gic_send_ipi(action); | ||
89 | } | 49 | } |
90 | 50 | ||
91 | 51 | ||
92 | static void ipi_resched(unsigned int cpu) | 52 | static void ipi_resched(unsigned int cpu) |
93 | { | 53 | { |
94 | unsigned int action = 0; | ||
95 | |||
96 | pr_debug("CPU%d: %s cpu %d status %08x\n", | 54 | pr_debug("CPU%d: %s cpu %d status %08x\n", |
97 | smp_processor_id(), __func__, cpu, read_c0_status()); | 55 | smp_processor_id(), __func__, cpu, read_c0_status()); |
98 | 56 | ||
99 | switch (cpu) { | 57 | gic_send_ipi(plat_ipi_resched_int_xlate(cpu)); |
100 | case 0: | ||
101 | action = GIC_IPI_EXT_INTR_RESCHED_VPE0; | ||
102 | break; | ||
103 | case 1: | ||
104 | action = GIC_IPI_EXT_INTR_RESCHED_VPE1; | ||
105 | break; | ||
106 | case 2: | ||
107 | action = GIC_IPI_EXT_INTR_RESCHED_VPE2; | ||
108 | break; | ||
109 | case 3: | ||
110 | action = GIC_IPI_EXT_INTR_RESCHED_VPE3; | ||
111 | break; | ||
112 | } | ||
113 | gic_send_ipi(action); | ||
114 | } | 58 | } |
115 | 59 | ||
116 | /* | 60 | /* |
@@ -206,7 +150,7 @@ static void cmp_boot_secondary(int cpu, struct task_struct *idle) | |||
206 | (unsigned long)(gp + sizeof(struct thread_info))); | 150 | (unsigned long)(gp + sizeof(struct thread_info))); |
207 | #endif | 151 | #endif |
208 | 152 | ||
209 | amon_cpu_start(cpu, pc, sp, gp, a0); | 153 | amon_cpu_start(cpu, pc, sp, (unsigned long)gp, a0); |
210 | } | 154 | } |
211 | 155 | ||
212 | /* | 156 | /* |
diff --git a/arch/mips/kernel/sync-r4k.c b/arch/mips/kernel/sync-r4k.c index 9021108eb9c1..05dd170a83f7 100644 --- a/arch/mips/kernel/sync-r4k.c +++ b/arch/mips/kernel/sync-r4k.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Count register synchronisation. | 2 | * Count register synchronisation. |
3 | * | 3 | * |
4 | * All CPUs will have their count registers synchronised to the CPU0 expirelo | 4 | * All CPUs will have their count registers synchronised to the CPU0 next time |
5 | * value. This can cause a small timewarp for CPU0. All other CPU's should | 5 | * value. This can cause a small timewarp for CPU0. All other CPU's should |
6 | * not have done anything significant (but they may have had interrupts | 6 | * not have done anything significant (but they may have had interrupts |
7 | * enabled briefly - prom_smp_finish() should not be responsible for enabling | 7 | * enabled briefly - prom_smp_finish() should not be responsible for enabling |
@@ -13,21 +13,22 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/irqflags.h> | 15 | #include <linux/irqflags.h> |
16 | #include <linux/r4k-timer.h> | 16 | #include <linux/cpumask.h> |
17 | 17 | ||
18 | #include <asm/r4k-timer.h> | ||
18 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
19 | #include <asm/barrier.h> | 20 | #include <asm/barrier.h> |
20 | #include <asm/cpumask.h> | ||
21 | #include <asm/mipsregs.h> | 21 | #include <asm/mipsregs.h> |
22 | 22 | ||
23 | static atomic_t __initdata count_start_flag = ATOMIC_INIT(0); | 23 | static atomic_t __cpuinitdata count_start_flag = ATOMIC_INIT(0); |
24 | static atomic_t __initdata count_count_start = ATOMIC_INIT(0); | 24 | static atomic_t __cpuinitdata count_count_start = ATOMIC_INIT(0); |
25 | static atomic_t __initdata count_count_stop = ATOMIC_INIT(0); | 25 | static atomic_t __cpuinitdata count_count_stop = ATOMIC_INIT(0); |
26 | static atomic_t __cpuinitdata count_reference = ATOMIC_INIT(0); | ||
26 | 27 | ||
27 | #define COUNTON 100 | 28 | #define COUNTON 100 |
28 | #define NR_LOOPS 5 | 29 | #define NR_LOOPS 5 |
29 | 30 | ||
30 | void __init synchronise_count_master(void) | 31 | void __cpuinit synchronise_count_master(void) |
31 | { | 32 | { |
32 | int i; | 33 | int i; |
33 | unsigned long flags; | 34 | unsigned long flags; |
@@ -42,19 +43,20 @@ void __init synchronise_count_master(void) | |||
42 | return; | 43 | return; |
43 | #endif | 44 | #endif |
44 | 45 | ||
45 | pr_info("Checking COUNT synchronization across %u CPUs: ", | 46 | printk(KERN_INFO "Synchronize counters across %u CPUs: ", |
46 | num_online_cpus()); | 47 | num_online_cpus()); |
47 | 48 | ||
48 | local_irq_save(flags); | 49 | local_irq_save(flags); |
49 | 50 | ||
50 | /* | 51 | /* |
51 | * Notify the slaves that it's time to start | 52 | * Notify the slaves that it's time to start |
52 | */ | 53 | */ |
54 | atomic_set(&count_reference, read_c0_count()); | ||
53 | atomic_set(&count_start_flag, 1); | 55 | atomic_set(&count_start_flag, 1); |
54 | smp_wmb(); | 56 | smp_wmb(); |
55 | 57 | ||
56 | /* Count will be initialised to expirelo for all CPU's */ | 58 | /* Count will be initialised to current timer for all CPU's */ |
57 | initcount = expirelo; | 59 | initcount = read_c0_count(); |
58 | 60 | ||
59 | /* | 61 | /* |
60 | * We loop a few times to get a primed instruction cache, | 62 | * We loop a few times to get a primed instruction cache, |
@@ -106,7 +108,7 @@ void __init synchronise_count_master(void) | |||
106 | printk("done.\n"); | 108 | printk("done.\n"); |
107 | } | 109 | } |
108 | 110 | ||
109 | void __init synchronise_count_slave(void) | 111 | void __cpuinit synchronise_count_slave(void) |
110 | { | 112 | { |
111 | int i; | 113 | int i; |
112 | unsigned long flags; | 114 | unsigned long flags; |
@@ -131,8 +133,8 @@ void __init synchronise_count_slave(void) | |||
131 | while (!atomic_read(&count_start_flag)) | 133 | while (!atomic_read(&count_start_flag)) |
132 | mb(); | 134 | mb(); |
133 | 135 | ||
134 | /* Count will be initialised to expirelo for all CPU's */ | 136 | /* Count will be initialised to next expire for all CPU's */ |
135 | initcount = expirelo; | 137 | initcount = atomic_read(&count_reference); |
136 | 138 | ||
137 | ncpus = num_online_cpus(); | 139 | ncpus = num_online_cpus(); |
138 | for (i = 0; i < NR_LOOPS; i++) { | 140 | for (i = 0; i < NR_LOOPS; i++) { |
@@ -156,4 +158,3 @@ void __init synchronise_count_slave(void) | |||
156 | local_irq_restore(flags); | 158 | local_irq_restore(flags); |
157 | } | 159 | } |
158 | #undef NR_LOOPS | 160 | #undef NR_LOOPS |
159 | #endif | ||
diff --git a/arch/mips/kernel/vpe.c b/arch/mips/kernel/vpe.c index 3ca5f42e819d..07b9ec2c6e3d 100644 --- a/arch/mips/kernel/vpe.c +++ b/arch/mips/kernel/vpe.c | |||
@@ -1387,7 +1387,7 @@ static ssize_t store_ntcs(struct device *dev, struct device_attribute *attr, | |||
1387 | return len; | 1387 | return len; |
1388 | 1388 | ||
1389 | out_einval: | 1389 | out_einval: |
1390 | return -EINVAL;; | 1390 | return -EINVAL; |
1391 | } | 1391 | } |
1392 | 1392 | ||
1393 | static struct device_attribute vpe_class_attributes[] = { | 1393 | static struct device_attribute vpe_class_attributes[] = { |