diff options
-rw-r--r-- | arch/arm/kernel/smp.c | 1 | ||||
-rw-r--r-- | arch/arm/lib/bitops.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-integrator/platsmp.c | 2 | ||||
-rw-r--r-- | include/asm-arm/bitops.h | 5 |
4 files changed, 9 insertions, 1 deletions
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 295e0a8379cf..b2085735a2ba 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -176,6 +176,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
176 | cpu_set(cpu, mm->cpu_vm_mask); | 176 | cpu_set(cpu, mm->cpu_vm_mask); |
177 | cpu_switch_mm(mm->pgd, mm); | 177 | cpu_switch_mm(mm->pgd, mm); |
178 | enter_lazy_tlb(mm, current); | 178 | enter_lazy_tlb(mm, current); |
179 | local_flush_tlb_all(); | ||
179 | 180 | ||
180 | cpu_init(); | 181 | cpu_init(); |
181 | 182 | ||
diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h index 5382a3023602..2036ff15bda9 100644 --- a/arch/arm/lib/bitops.h +++ b/arch/arm/lib/bitops.h | |||
@@ -7,7 +7,7 @@ | |||
7 | 1: ldrexb r2, [r1] | 7 | 1: ldrexb r2, [r1] |
8 | \instr r2, r2, r3 | 8 | \instr r2, r2, r3 |
9 | strexb r0, r2, [r1] | 9 | strexb r0, r2, [r1] |
10 | cmpne r0, #0 | 10 | cmp r0, #0 |
11 | bne 1b | 11 | bne 1b |
12 | mov pc, lr | 12 | mov pc, lr |
13 | .endm | 13 | .endm |
diff --git a/arch/arm/mach-integrator/platsmp.c b/arch/arm/mach-integrator/platsmp.c index aecf47ba033a..ea10bd8c972c 100644 --- a/arch/arm/mach-integrator/platsmp.c +++ b/arch/arm/mach-integrator/platsmp.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
16 | 16 | ||
17 | #include <asm/atomic.h> | 17 | #include <asm/atomic.h> |
18 | #include <asm/cacheflush.h> | ||
18 | #include <asm/delay.h> | 19 | #include <asm/delay.h> |
19 | #include <asm/mmu_context.h> | 20 | #include <asm/mmu_context.h> |
20 | #include <asm/procinfo.h> | 21 | #include <asm/procinfo.h> |
@@ -80,6 +81,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
80 | * "cpu" is Linux's internal ID. | 81 | * "cpu" is Linux's internal ID. |
81 | */ | 82 | */ |
82 | pen_release = cpu; | 83 | pen_release = cpu; |
84 | flush_cache_all(); | ||
83 | 85 | ||
84 | /* | 86 | /* |
85 | * XXX | 87 | * XXX |
diff --git a/include/asm-arm/bitops.h b/include/asm-arm/bitops.h index c1adc6b3e86d..aad7aad026b3 100644 --- a/include/asm-arm/bitops.h +++ b/include/asm-arm/bitops.h | |||
@@ -229,6 +229,7 @@ extern int _find_next_zero_bit_be(const void * p, int size, int offset); | |||
229 | extern int _find_first_bit_be(const unsigned long *p, unsigned size); | 229 | extern int _find_first_bit_be(const unsigned long *p, unsigned size); |
230 | extern int _find_next_bit_be(const unsigned long *p, int size, int offset); | 230 | extern int _find_next_bit_be(const unsigned long *p, int size, int offset); |
231 | 231 | ||
232 | #ifndef CONFIG_SMP | ||
232 | /* | 233 | /* |
233 | * The __* form of bitops are non-atomic and may be reordered. | 234 | * The __* form of bitops are non-atomic and may be reordered. |
234 | */ | 235 | */ |
@@ -241,6 +242,10 @@ extern int _find_next_bit_be(const unsigned long *p, int size, int offset); | |||
241 | (__builtin_constant_p(nr) ? \ | 242 | (__builtin_constant_p(nr) ? \ |
242 | ____atomic_##name(nr, p) : \ | 243 | ____atomic_##name(nr, p) : \ |
243 | _##name##_be(nr,p)) | 244 | _##name##_be(nr,p)) |
245 | #else | ||
246 | #define ATOMIC_BITOP_LE(name,nr,p) _##name##_le(nr,p) | ||
247 | #define ATOMIC_BITOP_BE(name,nr,p) _##name##_be(nr,p) | ||
248 | #endif | ||
244 | 249 | ||
245 | #define NONATOMIC_BITOP(name,nr,p) \ | 250 | #define NONATOMIC_BITOP(name,nr,p) \ |
246 | (____nonatomic_##name(nr, p)) | 251 | (____nonatomic_##name(nr, p)) |