diff options
Diffstat (limited to 'arch/arm/kernel')
| -rw-r--r-- | arch/arm/kernel/debug.S | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/entry-armv.S | 12 | ||||
| -rw-r--r-- | arch/arm/kernel/entry-common.S | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/entry-header.S | 11 | ||||
| -rw-r--r-- | arch/arm/kernel/entry-v7m.S | 4 | ||||
| -rw-r--r-- | arch/arm/kernel/head-nommu.S | 4 | ||||
| -rw-r--r-- | arch/arm/kernel/hyp-stub.S | 4 | ||||
| -rw-r--r-- | arch/arm/kernel/machine_kexec.c | 5 | ||||
| -rw-r--r-- | arch/arm/kernel/patch.c | 6 | ||||
| -rw-r--r-- | arch/arm/kernel/sleep.S | 12 | ||||
| -rw-r--r-- | arch/arm/kernel/smp.c | 10 | ||||
| -rw-r--r-- | arch/arm/kernel/smp_twd.c | 66 | ||||
| -rw-r--r-- | arch/arm/kernel/unwind.c | 14 |
13 files changed, 51 insertions, 101 deletions
diff --git a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S index b795dc2408c0..b9f94e03d916 100644 --- a/arch/arm/kernel/debug.S +++ b/arch/arm/kernel/debug.S | |||
| @@ -86,7 +86,7 @@ hexbuf_rel: .long hexbuf_addr - . | |||
| 86 | ENTRY(printascii) | 86 | ENTRY(printascii) |
| 87 | addruart_current r3, r1, r2 | 87 | addruart_current r3, r1, r2 |
| 88 | 1: teq r0, #0 | 88 | 1: teq r0, #0 |
| 89 | ldrneb r1, [r0], #1 | 89 | ldrbne r1, [r0], #1 |
| 90 | teqne r1, #0 | 90 | teqne r1, #0 |
| 91 | reteq lr | 91 | reteq lr |
| 92 | 2: teq r1, #'\n' | 92 | 2: teq r1, #'\n' |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index e85a3af9ddeb..ce4aea57130a 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
| @@ -636,7 +636,7 @@ call_fpe: | |||
| 636 | @ Test if we need to give access to iWMMXt coprocessors | 636 | @ Test if we need to give access to iWMMXt coprocessors |
| 637 | ldr r5, [r10, #TI_FLAGS] | 637 | ldr r5, [r10, #TI_FLAGS] |
| 638 | rsbs r7, r8, #(1 << 8) @ CP 0 or 1 only | 638 | rsbs r7, r8, #(1 << 8) @ CP 0 or 1 only |
| 639 | movcss r7, r5, lsr #(TIF_USING_IWMMXT + 1) | 639 | movscs r7, r5, lsr #(TIF_USING_IWMMXT + 1) |
| 640 | bcs iwmmxt_task_enable | 640 | bcs iwmmxt_task_enable |
| 641 | #endif | 641 | #endif |
| 642 | ARM( add pc, pc, r8, lsr #6 ) | 642 | ARM( add pc, pc, r8, lsr #6 ) |
| @@ -872,7 +872,7 @@ __kuser_cmpxchg64: @ 0xffff0f60 | |||
| 872 | smp_dmb arm | 872 | smp_dmb arm |
| 873 | 1: ldrexd r0, r1, [r2] @ load current val | 873 | 1: ldrexd r0, r1, [r2] @ load current val |
| 874 | eors r3, r0, r4 @ compare with oldval (1) | 874 | eors r3, r0, r4 @ compare with oldval (1) |
| 875 | eoreqs r3, r1, r5 @ compare with oldval (2) | 875 | eorseq r3, r1, r5 @ compare with oldval (2) |
| 876 | strexdeq r3, r6, r7, [r2] @ store newval if eq | 876 | strexdeq r3, r6, r7, [r2] @ store newval if eq |
| 877 | teqeq r3, #1 @ success? | 877 | teqeq r3, #1 @ success? |
| 878 | beq 1b @ if no then retry | 878 | beq 1b @ if no then retry |
| @@ -896,8 +896,8 @@ __kuser_cmpxchg64: @ 0xffff0f60 | |||
| 896 | ldmia r1, {r6, lr} @ load new val | 896 | ldmia r1, {r6, lr} @ load new val |
| 897 | 1: ldmia r2, {r0, r1} @ load current val | 897 | 1: ldmia r2, {r0, r1} @ load current val |
| 898 | eors r3, r0, r4 @ compare with oldval (1) | 898 | eors r3, r0, r4 @ compare with oldval (1) |
| 899 | eoreqs r3, r1, r5 @ compare with oldval (2) | 899 | eorseq r3, r1, r5 @ compare with oldval (2) |
| 900 | 2: stmeqia r2, {r6, lr} @ store newval if eq | 900 | 2: stmiaeq r2, {r6, lr} @ store newval if eq |
| 901 | rsbs r0, r3, #0 @ set return val and C flag | 901 | rsbs r0, r3, #0 @ set return val and C flag |
| 902 | ldmfd sp!, {r4, r5, r6, pc} | 902 | ldmfd sp!, {r4, r5, r6, pc} |
| 903 | 903 | ||
| @@ -911,7 +911,7 @@ kuser_cmpxchg64_fixup: | |||
| 911 | mov r7, #0xffff0fff | 911 | mov r7, #0xffff0fff |
| 912 | sub r7, r7, #(0xffff0fff - (0xffff0f60 + (1b - __kuser_cmpxchg64))) | 912 | sub r7, r7, #(0xffff0fff - (0xffff0f60 + (1b - __kuser_cmpxchg64))) |
| 913 | subs r8, r4, r7 | 913 | subs r8, r4, r7 |
| 914 | rsbcss r8, r8, #(2b - 1b) | 914 | rsbscs r8, r8, #(2b - 1b) |
| 915 | strcs r7, [sp, #S_PC] | 915 | strcs r7, [sp, #S_PC] |
| 916 | #if __LINUX_ARM_ARCH__ < 6 | 916 | #if __LINUX_ARM_ARCH__ < 6 |
| 917 | bcc kuser_cmpxchg32_fixup | 917 | bcc kuser_cmpxchg32_fixup |
| @@ -969,7 +969,7 @@ kuser_cmpxchg32_fixup: | |||
| 969 | mov r7, #0xffff0fff | 969 | mov r7, #0xffff0fff |
| 970 | sub r7, r7, #(0xffff0fff - (0xffff0fc0 + (1b - __kuser_cmpxchg))) | 970 | sub r7, r7, #(0xffff0fff - (0xffff0fc0 + (1b - __kuser_cmpxchg))) |
| 971 | subs r8, r4, r7 | 971 | subs r8, r4, r7 |
| 972 | rsbcss r8, r8, #(2b - 1b) | 972 | rsbscs r8, r8, #(2b - 1b) |
| 973 | strcs r7, [sp, #S_PC] | 973 | strcs r7, [sp, #S_PC] |
| 974 | ret lr | 974 | ret lr |
| 975 | .previous | 975 | .previous |
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 0465d65d23de..f7649adef505 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
| @@ -373,7 +373,7 @@ sys_syscall: | |||
| 373 | movhs scno, #0 | 373 | movhs scno, #0 |
| 374 | csdb | 374 | csdb |
| 375 | #endif | 375 | #endif |
| 376 | stmloia sp, {r5, r6} @ shuffle args | 376 | stmialo sp, {r5, r6} @ shuffle args |
| 377 | movlo r0, r1 | 377 | movlo r0, r1 |
| 378 | movlo r1, r2 | 378 | movlo r1, r2 |
| 379 | movlo r2, r3 | 379 | movlo r2, r3 |
diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S index 773424843d6e..32051ec5b33f 100644 --- a/arch/arm/kernel/entry-header.S +++ b/arch/arm/kernel/entry-header.S | |||
| @@ -127,7 +127,8 @@ | |||
| 127 | */ | 127 | */ |
| 128 | .macro v7m_exception_slow_exit ret_r0 | 128 | .macro v7m_exception_slow_exit ret_r0 |
| 129 | cpsid i | 129 | cpsid i |
| 130 | ldr lr, =EXC_RET_THREADMODE_PROCESSSTACK | 130 | ldr lr, =exc_ret |
| 131 | ldr lr, [lr] | ||
| 131 | 132 | ||
| 132 | @ read original r12, sp, lr, pc and xPSR | 133 | @ read original r12, sp, lr, pc and xPSR |
| 133 | add r12, sp, #S_IP | 134 | add r12, sp, #S_IP |
| @@ -387,8 +388,8 @@ | |||
| 387 | badr lr, \ret @ return address | 388 | badr lr, \ret @ return address |
| 388 | .if \reload | 389 | .if \reload |
| 389 | add r1, sp, #S_R0 + S_OFF @ pointer to regs | 390 | add r1, sp, #S_R0 + S_OFF @ pointer to regs |
| 390 | ldmccia r1, {r0 - r6} @ reload r0-r6 | 391 | ldmiacc r1, {r0 - r6} @ reload r0-r6 |
| 391 | stmccia sp, {r4, r5} @ update stack arguments | 392 | stmiacc sp, {r4, r5} @ update stack arguments |
| 392 | .endif | 393 | .endif |
| 393 | ldrcc pc, [\table, \tmp, lsl #2] @ call sys_* routine | 394 | ldrcc pc, [\table, \tmp, lsl #2] @ call sys_* routine |
| 394 | #else | 395 | #else |
| @@ -396,8 +397,8 @@ | |||
| 396 | badr lr, \ret @ return address | 397 | badr lr, \ret @ return address |
| 397 | .if \reload | 398 | .if \reload |
| 398 | add r1, sp, #S_R0 + S_OFF @ pointer to regs | 399 | add r1, sp, #S_R0 + S_OFF @ pointer to regs |
| 399 | ldmccia r1, {r0 - r6} @ reload r0-r6 | 400 | ldmiacc r1, {r0 - r6} @ reload r0-r6 |
| 400 | stmccia sp, {r4, r5} @ update stack arguments | 401 | stmiacc sp, {r4, r5} @ update stack arguments |
| 401 | .endif | 402 | .endif |
| 402 | ldrcc pc, [\table, \nr, lsl #2] @ call sys_* routine | 403 | ldrcc pc, [\table, \nr, lsl #2] @ call sys_* routine |
| 403 | #endif | 404 | #endif |
diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S index abcf47848525..19d2dcd6530d 100644 --- a/arch/arm/kernel/entry-v7m.S +++ b/arch/arm/kernel/entry-v7m.S | |||
| @@ -146,3 +146,7 @@ ENTRY(vector_table) | |||
| 146 | .rept CONFIG_CPU_V7M_NUM_IRQ | 146 | .rept CONFIG_CPU_V7M_NUM_IRQ |
| 147 | .long __irq_entry @ External Interrupts | 147 | .long __irq_entry @ External Interrupts |
| 148 | .endr | 148 | .endr |
| 149 | .align 2 | ||
| 150 | .globl exc_ret | ||
| 151 | exc_ret: | ||
| 152 | .space 4 | ||
diff --git a/arch/arm/kernel/head-nommu.S b/arch/arm/kernel/head-nommu.S index ec29de250076..c08d2d890f7b 100644 --- a/arch/arm/kernel/head-nommu.S +++ b/arch/arm/kernel/head-nommu.S | |||
| @@ -439,8 +439,8 @@ M_CLASS(str r6, [r12, #PMSAv8_RLAR_A(3)]) | |||
| 439 | str r5, [r12, #PMSAv8_RBAR_A(0)] | 439 | str r5, [r12, #PMSAv8_RBAR_A(0)] |
| 440 | str r6, [r12, #PMSAv8_RLAR_A(0)] | 440 | str r6, [r12, #PMSAv8_RLAR_A(0)] |
| 441 | #else | 441 | #else |
| 442 | mcr p15, 0, r5, c6, c10, 1 @ PRBAR4 | 442 | mcr p15, 0, r5, c6, c10, 0 @ PRBAR4 |
| 443 | mcr p15, 0, r6, c6, c10, 2 @ PRLAR4 | 443 | mcr p15, 0, r6, c6, c10, 1 @ PRLAR4 |
| 444 | #endif | 444 | #endif |
| 445 | #endif | 445 | #endif |
| 446 | ret lr | 446 | ret lr |
diff --git a/arch/arm/kernel/hyp-stub.S b/arch/arm/kernel/hyp-stub.S index 60146e32619a..82a942894fc0 100644 --- a/arch/arm/kernel/hyp-stub.S +++ b/arch/arm/kernel/hyp-stub.S | |||
| @@ -180,8 +180,8 @@ ARM_BE8(orr r7, r7, #(1 << 25)) @ HSCTLR.EE | |||
| 180 | @ Check whether GICv3 system registers are available | 180 | @ Check whether GICv3 system registers are available |
| 181 | mrc p15, 0, r7, c0, c1, 1 @ ID_PFR1 | 181 | mrc p15, 0, r7, c0, c1, 1 @ ID_PFR1 |
| 182 | ubfx r7, r7, #28, #4 | 182 | ubfx r7, r7, #28, #4 |
| 183 | cmp r7, #1 | 183 | teq r7, #0 |
| 184 | bne 2f | 184 | beq 2f |
| 185 | 185 | ||
| 186 | @ Enable system register accesses | 186 | @ Enable system register accesses |
| 187 | mrc p15, 4, r7, c12, c9, 5 @ ICC_HSRE | 187 | mrc p15, 4, r7, c12, c9, 5 @ ICC_HSRE |
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index dd2eb5f76b9f..76300f3813e8 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
| @@ -91,8 +91,11 @@ void machine_crash_nonpanic_core(void *unused) | |||
| 91 | 91 | ||
| 92 | set_cpu_online(smp_processor_id(), false); | 92 | set_cpu_online(smp_processor_id(), false); |
| 93 | atomic_dec(&waiting_for_crash_ipi); | 93 | atomic_dec(&waiting_for_crash_ipi); |
| 94 | while (1) | 94 | |
| 95 | while (1) { | ||
| 95 | cpu_relax(); | 96 | cpu_relax(); |
| 97 | wfe(); | ||
| 98 | } | ||
| 96 | } | 99 | } |
| 97 | 100 | ||
| 98 | void crash_smp_send_stop(void) | 101 | void crash_smp_send_stop(void) |
diff --git a/arch/arm/kernel/patch.c b/arch/arm/kernel/patch.c index a50dc00d79a2..d0a05a3bdb96 100644 --- a/arch/arm/kernel/patch.c +++ b/arch/arm/kernel/patch.c | |||
| @@ -16,7 +16,7 @@ struct patch { | |||
| 16 | unsigned int insn; | 16 | unsigned int insn; |
| 17 | }; | 17 | }; |
| 18 | 18 | ||
| 19 | static DEFINE_SPINLOCK(patch_lock); | 19 | static DEFINE_RAW_SPINLOCK(patch_lock); |
| 20 | 20 | ||
| 21 | static void __kprobes *patch_map(void *addr, int fixmap, unsigned long *flags) | 21 | static void __kprobes *patch_map(void *addr, int fixmap, unsigned long *flags) |
| 22 | __acquires(&patch_lock) | 22 | __acquires(&patch_lock) |
| @@ -33,7 +33,7 @@ static void __kprobes *patch_map(void *addr, int fixmap, unsigned long *flags) | |||
| 33 | return addr; | 33 | return addr; |
| 34 | 34 | ||
| 35 | if (flags) | 35 | if (flags) |
| 36 | spin_lock_irqsave(&patch_lock, *flags); | 36 | raw_spin_lock_irqsave(&patch_lock, *flags); |
| 37 | else | 37 | else |
| 38 | __acquire(&patch_lock); | 38 | __acquire(&patch_lock); |
| 39 | 39 | ||
| @@ -48,7 +48,7 @@ static void __kprobes patch_unmap(int fixmap, unsigned long *flags) | |||
| 48 | clear_fixmap(fixmap); | 48 | clear_fixmap(fixmap); |
| 49 | 49 | ||
| 50 | if (flags) | 50 | if (flags) |
| 51 | spin_unlock_irqrestore(&patch_lock, *flags); | 51 | raw_spin_unlock_irqrestore(&patch_lock, *flags); |
| 52 | else | 52 | else |
| 53 | __release(&patch_lock); | 53 | __release(&patch_lock); |
| 54 | } | 54 | } |
diff --git a/arch/arm/kernel/sleep.S b/arch/arm/kernel/sleep.S index a8257fc9cf2a..5dc8b80bb693 100644 --- a/arch/arm/kernel/sleep.S +++ b/arch/arm/kernel/sleep.S | |||
| @@ -120,6 +120,14 @@ ENDPROC(cpu_resume_after_mmu) | |||
| 120 | .text | 120 | .text |
| 121 | .align | 121 | .align |
| 122 | 122 | ||
| 123 | #ifdef CONFIG_MCPM | ||
| 124 | .arm | ||
| 125 | THUMB( .thumb ) | ||
| 126 | ENTRY(cpu_resume_no_hyp) | ||
| 127 | ARM_BE8(setend be) @ ensure we are in BE mode | ||
| 128 | b no_hyp | ||
| 129 | #endif | ||
| 130 | |||
| 123 | #ifdef CONFIG_MMU | 131 | #ifdef CONFIG_MMU |
| 124 | .arm | 132 | .arm |
| 125 | ENTRY(cpu_resume_arm) | 133 | ENTRY(cpu_resume_arm) |
| @@ -135,6 +143,7 @@ ARM_BE8(setend be) @ ensure we are in BE mode | |||
| 135 | bl __hyp_stub_install_secondary | 143 | bl __hyp_stub_install_secondary |
| 136 | #endif | 144 | #endif |
| 137 | safe_svcmode_maskall r1 | 145 | safe_svcmode_maskall r1 |
| 146 | no_hyp: | ||
| 138 | mov r1, #0 | 147 | mov r1, #0 |
| 139 | ALT_SMP(mrc p15, 0, r0, c0, c0, 5) | 148 | ALT_SMP(mrc p15, 0, r0, c0, c0, 5) |
| 140 | ALT_UP_B(1f) | 149 | ALT_UP_B(1f) |
| @@ -164,6 +173,9 @@ ENDPROC(cpu_resume) | |||
| 164 | #ifdef CONFIG_MMU | 173 | #ifdef CONFIG_MMU |
| 165 | ENDPROC(cpu_resume_arm) | 174 | ENDPROC(cpu_resume_arm) |
| 166 | #endif | 175 | #endif |
| 176 | #ifdef CONFIG_MCPM | ||
| 177 | ENDPROC(cpu_resume_no_hyp) | ||
| 178 | #endif | ||
| 167 | 179 | ||
| 168 | .align 2 | 180 | .align 2 |
| 169 | _sleep_save_sp: | 181 | _sleep_save_sp: |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 1d6f5ea522f4..facd4240ca02 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
| @@ -62,12 +62,6 @@ | |||
| 62 | */ | 62 | */ |
| 63 | struct secondary_data secondary_data; | 63 | struct secondary_data secondary_data; |
| 64 | 64 | ||
| 65 | /* | ||
| 66 | * control for which core is the next to come out of the secondary | ||
| 67 | * boot "holding pen" | ||
| 68 | */ | ||
| 69 | volatile int pen_release = -1; | ||
| 70 | |||
| 71 | enum ipi_msg_type { | 65 | enum ipi_msg_type { |
| 72 | IPI_WAKEUP, | 66 | IPI_WAKEUP, |
| 73 | IPI_TIMER, | 67 | IPI_TIMER, |
| @@ -604,8 +598,10 @@ static void ipi_cpu_stop(unsigned int cpu) | |||
| 604 | local_fiq_disable(); | 598 | local_fiq_disable(); |
| 605 | local_irq_disable(); | 599 | local_irq_disable(); |
| 606 | 600 | ||
| 607 | while (1) | 601 | while (1) { |
| 608 | cpu_relax(); | 602 | cpu_relax(); |
| 603 | wfe(); | ||
| 604 | } | ||
| 609 | } | 605 | } |
| 610 | 606 | ||
| 611 | static DEFINE_PER_CPU(struct completion *, cpu_completion); | 607 | static DEFINE_PER_CPU(struct completion *, cpu_completion); |
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index b30eafeef096..3cdc399b9fc3 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c | |||
| @@ -100,8 +100,6 @@ static void twd_timer_stop(void) | |||
| 100 | disable_percpu_irq(clk->irq); | 100 | disable_percpu_irq(clk->irq); |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | #ifdef CONFIG_COMMON_CLK | ||
| 104 | |||
| 105 | /* | 103 | /* |
| 106 | * Updates clockevent frequency when the cpu frequency changes. | 104 | * Updates clockevent frequency when the cpu frequency changes. |
| 107 | * Called on the cpu that is changing frequency with interrupts disabled. | 105 | * Called on the cpu that is changing frequency with interrupts disabled. |
| @@ -143,54 +141,6 @@ static int twd_clk_init(void) | |||
| 143 | } | 141 | } |
| 144 | core_initcall(twd_clk_init); | 142 | core_initcall(twd_clk_init); |
| 145 | 143 | ||
| 146 | #elif defined (CONFIG_CPU_FREQ) | ||
| 147 | |||
| 148 | #include <linux/cpufreq.h> | ||
| 149 | |||
| 150 | /* | ||
| 151 | * Updates clockevent frequency when the cpu frequency changes. | ||
| 152 | * Called on the cpu that is changing frequency with interrupts disabled. | ||
| 153 | */ | ||
| 154 | static void twd_update_frequency(void *data) | ||
| 155 | { | ||
| 156 | twd_timer_rate = clk_get_rate(twd_clk); | ||
| 157 | |||
| 158 | clockevents_update_freq(raw_cpu_ptr(twd_evt), twd_timer_rate); | ||
| 159 | } | ||
| 160 | |||
| 161 | static int twd_cpufreq_transition(struct notifier_block *nb, | ||
| 162 | unsigned long state, void *data) | ||
| 163 | { | ||
| 164 | struct cpufreq_freqs *freqs = data; | ||
| 165 | |||
| 166 | /* | ||
| 167 | * The twd clock events must be reprogrammed to account for the new | ||
| 168 | * frequency. The timer is local to a cpu, so cross-call to the | ||
| 169 | * changing cpu. | ||
| 170 | */ | ||
| 171 | if (state == CPUFREQ_POSTCHANGE) | ||
| 172 | smp_call_function_single(freqs->cpu, twd_update_frequency, | ||
| 173 | NULL, 1); | ||
| 174 | |||
| 175 | return NOTIFY_OK; | ||
| 176 | } | ||
| 177 | |||
| 178 | static struct notifier_block twd_cpufreq_nb = { | ||
| 179 | .notifier_call = twd_cpufreq_transition, | ||
| 180 | }; | ||
| 181 | |||
| 182 | static int twd_cpufreq_init(void) | ||
| 183 | { | ||
| 184 | if (twd_evt && raw_cpu_ptr(twd_evt) && !IS_ERR(twd_clk)) | ||
| 185 | return cpufreq_register_notifier(&twd_cpufreq_nb, | ||
| 186 | CPUFREQ_TRANSITION_NOTIFIER); | ||
| 187 | |||
| 188 | return 0; | ||
| 189 | } | ||
| 190 | core_initcall(twd_cpufreq_init); | ||
| 191 | |||
| 192 | #endif | ||
| 193 | |||
| 194 | static void twd_calibrate_rate(void) | 144 | static void twd_calibrate_rate(void) |
| 195 | { | 145 | { |
| 196 | unsigned long count; | 146 | unsigned long count; |
| @@ -366,21 +316,6 @@ out_free: | |||
| 366 | return err; | 316 | return err; |
| 367 | } | 317 | } |
| 368 | 318 | ||
| 369 | int __init twd_local_timer_register(struct twd_local_timer *tlt) | ||
| 370 | { | ||
| 371 | if (twd_base || twd_evt) | ||
| 372 | return -EBUSY; | ||
| 373 | |||
| 374 | twd_ppi = tlt->res[1].start; | ||
| 375 | |||
| 376 | twd_base = ioremap(tlt->res[0].start, resource_size(&tlt->res[0])); | ||
| 377 | if (!twd_base) | ||
| 378 | return -ENOMEM; | ||
| 379 | |||
| 380 | return twd_local_timer_common_register(NULL); | ||
| 381 | } | ||
| 382 | |||
| 383 | #ifdef CONFIG_OF | ||
| 384 | static int __init twd_local_timer_of_register(struct device_node *np) | 319 | static int __init twd_local_timer_of_register(struct device_node *np) |
| 385 | { | 320 | { |
| 386 | int err; | 321 | int err; |
| @@ -406,4 +341,3 @@ out: | |||
| 406 | TIMER_OF_DECLARE(arm_twd_a9, "arm,cortex-a9-twd-timer", twd_local_timer_of_register); | 341 | TIMER_OF_DECLARE(arm_twd_a9, "arm,cortex-a9-twd-timer", twd_local_timer_of_register); |
| 407 | TIMER_OF_DECLARE(arm_twd_a5, "arm,cortex-a5-twd-timer", twd_local_timer_of_register); | 342 | TIMER_OF_DECLARE(arm_twd_a5, "arm,cortex-a5-twd-timer", twd_local_timer_of_register); |
| 408 | TIMER_OF_DECLARE(arm_twd_11mp, "arm,arm11mp-twd-timer", twd_local_timer_of_register); | 343 | TIMER_OF_DECLARE(arm_twd_11mp, "arm,arm11mp-twd-timer", twd_local_timer_of_register); |
| 409 | #endif | ||
diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c index 0bee233fef9a..314cfb232a63 100644 --- a/arch/arm/kernel/unwind.c +++ b/arch/arm/kernel/unwind.c | |||
| @@ -93,7 +93,7 @@ extern const struct unwind_idx __start_unwind_idx[]; | |||
| 93 | static const struct unwind_idx *__origin_unwind_idx; | 93 | static const struct unwind_idx *__origin_unwind_idx; |
| 94 | extern const struct unwind_idx __stop_unwind_idx[]; | 94 | extern const struct unwind_idx __stop_unwind_idx[]; |
| 95 | 95 | ||
| 96 | static DEFINE_SPINLOCK(unwind_lock); | 96 | static DEFINE_RAW_SPINLOCK(unwind_lock); |
| 97 | static LIST_HEAD(unwind_tables); | 97 | static LIST_HEAD(unwind_tables); |
| 98 | 98 | ||
| 99 | /* Convert a prel31 symbol to an absolute address */ | 99 | /* Convert a prel31 symbol to an absolute address */ |
| @@ -201,7 +201,7 @@ static const struct unwind_idx *unwind_find_idx(unsigned long addr) | |||
| 201 | /* module unwind tables */ | 201 | /* module unwind tables */ |
| 202 | struct unwind_table *table; | 202 | struct unwind_table *table; |
| 203 | 203 | ||
| 204 | spin_lock_irqsave(&unwind_lock, flags); | 204 | raw_spin_lock_irqsave(&unwind_lock, flags); |
| 205 | list_for_each_entry(table, &unwind_tables, list) { | 205 | list_for_each_entry(table, &unwind_tables, list) { |
| 206 | if (addr >= table->begin_addr && | 206 | if (addr >= table->begin_addr && |
| 207 | addr < table->end_addr) { | 207 | addr < table->end_addr) { |
| @@ -213,7 +213,7 @@ static const struct unwind_idx *unwind_find_idx(unsigned long addr) | |||
| 213 | break; | 213 | break; |
| 214 | } | 214 | } |
| 215 | } | 215 | } |
| 216 | spin_unlock_irqrestore(&unwind_lock, flags); | 216 | raw_spin_unlock_irqrestore(&unwind_lock, flags); |
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | pr_debug("%s: idx = %p\n", __func__, idx); | 219 | pr_debug("%s: idx = %p\n", __func__, idx); |
| @@ -529,9 +529,9 @@ struct unwind_table *unwind_table_add(unsigned long start, unsigned long size, | |||
| 529 | tab->begin_addr = text_addr; | 529 | tab->begin_addr = text_addr; |
| 530 | tab->end_addr = text_addr + text_size; | 530 | tab->end_addr = text_addr + text_size; |
| 531 | 531 | ||
| 532 | spin_lock_irqsave(&unwind_lock, flags); | 532 | raw_spin_lock_irqsave(&unwind_lock, flags); |
| 533 | list_add_tail(&tab->list, &unwind_tables); | 533 | list_add_tail(&tab->list, &unwind_tables); |
| 534 | spin_unlock_irqrestore(&unwind_lock, flags); | 534 | raw_spin_unlock_irqrestore(&unwind_lock, flags); |
| 535 | 535 | ||
| 536 | return tab; | 536 | return tab; |
| 537 | } | 537 | } |
| @@ -543,9 +543,9 @@ void unwind_table_del(struct unwind_table *tab) | |||
| 543 | if (!tab) | 543 | if (!tab) |
| 544 | return; | 544 | return; |
| 545 | 545 | ||
| 546 | spin_lock_irqsave(&unwind_lock, flags); | 546 | raw_spin_lock_irqsave(&unwind_lock, flags); |
| 547 | list_del(&tab->list); | 547 | list_del(&tab->list); |
| 548 | spin_unlock_irqrestore(&unwind_lock, flags); | 548 | raw_spin_unlock_irqrestore(&unwind_lock, flags); |
| 549 | 549 | ||
| 550 | kfree(tab); | 550 | kfree(tab); |
| 551 | } | 551 | } |
