diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-10-02 19:20:43 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-10-02 19:20:43 -0400 |
| commit | a037a79dceaf717409fbf42f4ad209b9c15f435c (patch) | |
| tree | c30b5b033c74ab9470e875554bded16464bbdf9b /arch/arm/kernel | |
| parent | 90d5ffc729e92bffc0f84e2447e2e6dc280240a5 (diff) | |
| parent | d25ef8b86e6a58f5476bf6e4a8da730b335f68fa (diff) | |
Merge master.kernel.org:/home/rmk/linux-2.6-arm
* master.kernel.org:/home/rmk/linux-2.6-arm: (25 commits)
ARM: 5728/1: Proper prefetch abort handling on ARMv6 and ARMv7
ARM: 5727/1: Pass IFSR register to do_PrefetchAbort()
ARM: 5740/1: fix valid_phys_addr_range() range check
ARM: 5739/1: ARM: allow empty ATAG_CORE
ARM: 5735/1: sa1111: CodingStyle cleanups
ARM: 5738/1: Correct TCM documentation
ARM: 5734/1: arm: fix compilation of entry-common.S for older CPUs
ARM: 5733/1: fix bcmring compile error
ARM: 5732/1: remove redundant include file
ARM: 5731/2: Fix U300 generic GPIO, remove ifdefs from MMCI v3
ARM: Ensure do_cache_op takes mmap_sem
ARM: Fix __cpuexit section mismatch warnings
ARM: Don't allow highmem on SMP platforms without h/w TLB ops broadcast
ARM: includecheck fix: mach-davinci, board-dm365-evm.c
ARM: Remove unused CONFIG SA1100_H3XXX
ARM: Fix warning: unused variable 'highmem'
ARM: Fix warning: #warning syscall migrate_pages not implemented
ARM: Fix SA11x0 clocksource warning
ARM: Fix SA1100 Neponset serial section mismatch
ARM: Fix SA1100 Assabet/Neponset PCMCIA section mismatch warnings
...
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 | /* |
