diff options
author | Jens Axboe <jens.axboe@oracle.com> | 2009-10-05 03:30:10 -0400 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2009-10-05 03:30:10 -0400 |
commit | 5d13379a4dba717fb75b749acc0f928c2c02db17 (patch) | |
tree | ab5bf870206e6ea8e744390cdb37cb14f7e78257 /arch/arm/kernel | |
parent | 08dc8726d4be85bca793141c827574fd32a681bb (diff) | |
parent | 374576a8b6f865022c0fd1ca62396889b23d66dd (diff) |
Merge branch 'master' into for-2.6.33
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 18 | ||||
-rw-r--r-- | arch/arm/kernel/entry-common.S | 11 | ||||
-rw-r--r-- | arch/arm/kernel/head-common.S | 4 | ||||
-rw-r--r-- | arch/arm/kernel/smp.c | 13 | ||||
-rw-r--r-- | arch/arm/kernel/smp_twd.c | 4 | ||||
-rw-r--r-- | arch/arm/kernel/traps.c | 5 |
6 files changed, 22 insertions, 33 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 0a2ba51cf35d..322410be573c 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -311,22 +311,16 @@ __pabt_svc: | |||
311 | tst r3, #PSR_I_BIT | 311 | tst r3, #PSR_I_BIT |
312 | biceq r9, r9, #PSR_I_BIT | 312 | biceq r9, r9, #PSR_I_BIT |
313 | 313 | ||
314 | @ | ||
315 | @ set args, then call main handler | ||
316 | @ | ||
317 | @ r0 - address of faulting instruction | ||
318 | @ r1 - pointer to registers on stack | ||
319 | @ | ||
320 | #ifdef MULTI_PABORT | ||
321 | mov r0, r2 @ pass address of aborted instruction. | 314 | mov r0, r2 @ pass address of aborted instruction. |
315 | #ifdef MULTI_PABORT | ||
322 | ldr r4, .LCprocfns | 316 | ldr r4, .LCprocfns |
323 | mov lr, pc | 317 | mov lr, pc |
324 | ldr pc, [r4, #PROCESSOR_PABT_FUNC] | 318 | ldr pc, [r4, #PROCESSOR_PABT_FUNC] |
325 | #else | 319 | #else |
326 | CPU_PABORT_HANDLER(r0, r2) | 320 | bl CPU_PABORT_HANDLER |
327 | #endif | 321 | #endif |
328 | msr cpsr_c, r9 @ Maybe enable interrupts | 322 | msr cpsr_c, r9 @ Maybe enable interrupts |
329 | mov r1, sp @ regs | 323 | mov r2, sp @ regs |
330 | bl do_PrefetchAbort @ call abort handler | 324 | bl do_PrefetchAbort @ call abort handler |
331 | 325 | ||
332 | @ | 326 | @ |
@@ -701,16 +695,16 @@ ENDPROC(__und_usr_unknown) | |||
701 | __pabt_usr: | 695 | __pabt_usr: |
702 | usr_entry | 696 | usr_entry |
703 | 697 | ||
704 | #ifdef MULTI_PABORT | ||
705 | mov r0, r2 @ pass address of aborted instruction. | 698 | mov r0, r2 @ pass address of aborted instruction. |
699 | #ifdef MULTI_PABORT | ||
706 | ldr r4, .LCprocfns | 700 | ldr r4, .LCprocfns |
707 | mov lr, pc | 701 | mov lr, pc |
708 | ldr pc, [r4, #PROCESSOR_PABT_FUNC] | 702 | ldr pc, [r4, #PROCESSOR_PABT_FUNC] |
709 | #else | 703 | #else |
710 | CPU_PABORT_HANDLER(r0, r2) | 704 | bl CPU_PABORT_HANDLER |
711 | #endif | 705 | #endif |
712 | enable_irq @ Enable interrupts | 706 | enable_irq @ Enable interrupts |
713 | mov r1, sp @ regs | 707 | mov r2, sp @ regs |
714 | bl do_PrefetchAbort @ call abort handler | 708 | bl do_PrefetchAbort @ call abort handler |
715 | UNWIND(.fnend ) | 709 | UNWIND(.fnend ) |
716 | /* fall through */ | 710 | /* fall through */ |
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 807cfebb0f44..f0fe95b7085d 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
@@ -126,7 +126,7 @@ ENTRY(__gnu_mcount_nc) | |||
126 | cmp r0, r2 | 126 | cmp r0, r2 |
127 | bne gnu_trace | 127 | bne gnu_trace |
128 | ldmia sp!, {r0-r3, ip, lr} | 128 | ldmia sp!, {r0-r3, ip, lr} |
129 | bx ip | 129 | mov pc, ip |
130 | 130 | ||
131 | gnu_trace: | 131 | gnu_trace: |
132 | ldr r1, [sp, #20] @ lr of instrumented routine | 132 | ldr r1, [sp, #20] @ lr of instrumented routine |
@@ -135,7 +135,7 @@ gnu_trace: | |||
135 | mov lr, pc | 135 | mov lr, pc |
136 | mov pc, r2 | 136 | mov pc, r2 |
137 | ldmia sp!, {r0-r3, ip, lr} | 137 | ldmia sp!, {r0-r3, ip, lr} |
138 | bx ip | 138 | mov pc, ip |
139 | 139 | ||
140 | ENTRY(mcount) | 140 | ENTRY(mcount) |
141 | stmdb sp!, {r0-r3, lr} | 141 | stmdb sp!, {r0-r3, lr} |
@@ -425,13 +425,6 @@ sys_mmap2: | |||
425 | #endif | 425 | #endif |
426 | ENDPROC(sys_mmap2) | 426 | ENDPROC(sys_mmap2) |
427 | 427 | ||
428 | ENTRY(pabort_ifar) | ||
429 | mrc p15, 0, r0, cr6, cr0, 2 | ||
430 | ENTRY(pabort_noifar) | ||
431 | mov pc, lr | ||
432 | ENDPROC(pabort_ifar) | ||
433 | ENDPROC(pabort_noifar) | ||
434 | |||
435 | #ifdef CONFIG_OABI_COMPAT | 428 | #ifdef CONFIG_OABI_COMPAT |
436 | 429 | ||
437 | /* | 430 | /* |
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S index 93ad576b2d74..885a7214418d 100644 --- a/arch/arm/kernel/head-common.S +++ b/arch/arm/kernel/head-common.S | |||
@@ -13,6 +13,7 @@ | |||
13 | 13 | ||
14 | #define ATAG_CORE 0x54410001 | 14 | #define ATAG_CORE 0x54410001 |
15 | #define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2) | 15 | #define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2) |
16 | #define ATAG_CORE_SIZE_EMPTY ((2*4) >> 2) | ||
16 | 17 | ||
17 | .align 2 | 18 | .align 2 |
18 | .type __switch_data, %object | 19 | .type __switch_data, %object |
@@ -251,7 +252,8 @@ __vet_atags: | |||
251 | bne 1f | 252 | bne 1f |
252 | 253 | ||
253 | ldr r5, [r2, #0] @ is first tag ATAG_CORE? | 254 | ldr r5, [r2, #0] @ is first tag ATAG_CORE? |
254 | subs r5, r5, #ATAG_CORE_SIZE | 255 | cmp r5, #ATAG_CORE_SIZE |
256 | cmpne r5, #ATAG_CORE_SIZE_EMPTY | ||
255 | bne 1f | 257 | bne 1f |
256 | ldr r5, [r2, #4] | 258 | ldr r5, [r2, #4] |
257 | ldr r6, =ATAG_CORE | 259 | ldr r6, =ATAG_CORE |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index e0d32770bb3d..57162af53dc9 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <asm/tlbflush.h> | 36 | #include <asm/tlbflush.h> |
37 | #include <asm/ptrace.h> | 37 | #include <asm/ptrace.h> |
38 | #include <asm/localtimer.h> | 38 | #include <asm/localtimer.h> |
39 | #include <asm/smp_plat.h> | ||
39 | 40 | ||
40 | /* | 41 | /* |
41 | * as from 2.5, kernels no longer have an init_tasks structure | 42 | * as from 2.5, kernels no longer have an init_tasks structure |
@@ -153,7 +154,7 @@ int __cpuinit __cpu_up(unsigned int cpu) | |||
153 | /* | 154 | /* |
154 | * __cpu_disable runs on the processor to be shutdown. | 155 | * __cpu_disable runs on the processor to be shutdown. |
155 | */ | 156 | */ |
156 | int __cpuexit __cpu_disable(void) | 157 | int __cpu_disable(void) |
157 | { | 158 | { |
158 | unsigned int cpu = smp_processor_id(); | 159 | unsigned int cpu = smp_processor_id(); |
159 | struct task_struct *p; | 160 | struct task_struct *p; |
@@ -200,7 +201,7 @@ int __cpuexit __cpu_disable(void) | |||
200 | * called on the thread which is asking for a CPU to be shutdown - | 201 | * called on the thread which is asking for a CPU to be shutdown - |
201 | * waits until shutdown has completed, or it is timed out. | 202 | * waits until shutdown has completed, or it is timed out. |
202 | */ | 203 | */ |
203 | void __cpuexit __cpu_die(unsigned int cpu) | 204 | void __cpu_die(unsigned int cpu) |
204 | { | 205 | { |
205 | if (!platform_cpu_kill(cpu)) | 206 | if (!platform_cpu_kill(cpu)) |
206 | printk("CPU%u: unable to kill\n", cpu); | 207 | printk("CPU%u: unable to kill\n", cpu); |
@@ -214,7 +215,7 @@ void __cpuexit __cpu_die(unsigned int cpu) | |||
214 | * of the other hotplug-cpu capable cores, so presumably coming | 215 | * of the other hotplug-cpu capable cores, so presumably coming |
215 | * out of idle fixes this. | 216 | * out of idle fixes this. |
216 | */ | 217 | */ |
217 | void __cpuexit cpu_die(void) | 218 | void __ref cpu_die(void) |
218 | { | 219 | { |
219 | unsigned int cpu = smp_processor_id(); | 220 | unsigned int cpu = smp_processor_id(); |
220 | 221 | ||
@@ -586,12 +587,6 @@ struct tlb_args { | |||
586 | unsigned long ta_end; | 587 | unsigned long ta_end; |
587 | }; | 588 | }; |
588 | 589 | ||
589 | /* all SMP configurations have the extended CPUID registers */ | ||
590 | static inline int tlb_ops_need_broadcast(void) | ||
591 | { | ||
592 | return ((read_cpuid_ext(CPUID_EXT_MMFR3) >> 12) & 0xf) < 2; | ||
593 | } | ||
594 | |||
595 | static inline void ipi_flush_tlb_all(void *ignored) | 590 | static inline void ipi_flush_tlb_all(void *ignored) |
596 | { | 591 | { |
597 | local_flush_tlb_all(); | 592 | local_flush_tlb_all(); |
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index d8c88c633c6f..a73a34dccf2a 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c | |||
@@ -166,10 +166,12 @@ void __cpuinit twd_timer_setup(struct clock_event_device *clk) | |||
166 | clockevents_register_device(clk); | 166 | clockevents_register_device(clk); |
167 | } | 167 | } |
168 | 168 | ||
169 | #ifdef CONFIG_HOTPLUG_CPU | ||
169 | /* | 170 | /* |
170 | * take a local timer down | 171 | * take a local timer down |
171 | */ | 172 | */ |
172 | void __cpuexit twd_timer_stop(void) | 173 | void twd_timer_stop(void) |
173 | { | 174 | { |
174 | __raw_writel(0, twd_base + TWD_TIMER_CONTROL); | 175 | __raw_writel(0, twd_base + TWD_TIMER_CONTROL); |
175 | } | 176 | } |
177 | #endif | ||
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 57eb0f6f6005..467b69ed1021 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
@@ -418,12 +418,14 @@ static int bad_syscall(int n, struct pt_regs *regs) | |||
418 | static inline void | 418 | static inline void |
419 | do_cache_op(unsigned long start, unsigned long end, int flags) | 419 | do_cache_op(unsigned long start, unsigned long end, int flags) |
420 | { | 420 | { |
421 | struct mm_struct *mm = current->active_mm; | ||
421 | struct vm_area_struct *vma; | 422 | struct vm_area_struct *vma; |
422 | 423 | ||
423 | if (end < start || flags) | 424 | if (end < start || flags) |
424 | return; | 425 | return; |
425 | 426 | ||
426 | vma = find_vma(current->active_mm, start); | 427 | down_read(&mm->mmap_sem); |
428 | vma = find_vma(mm, start); | ||
427 | if (vma && vma->vm_start < end) { | 429 | if (vma && vma->vm_start < end) { |
428 | if (start < vma->vm_start) | 430 | if (start < vma->vm_start) |
429 | start = vma->vm_start; | 431 | start = vma->vm_start; |
@@ -432,6 +434,7 @@ do_cache_op(unsigned long start, unsigned long end, int flags) | |||
432 | 434 | ||
433 | flush_cache_user_range(vma, start, end); | 435 | flush_cache_user_range(vma, start, end); |
434 | } | 436 | } |
437 | up_read(&mm->mmap_sem); | ||
435 | } | 438 | } |
436 | 439 | ||
437 | /* | 440 | /* |