diff options
Diffstat (limited to 'arch/arm/kernel')
| -rw-r--r-- | arch/arm/kernel/elf.c | 4 | ||||
| -rw-r--r-- | arch/arm/kernel/entry-common.S | 4 | ||||
| -rw-r--r-- | arch/arm/kernel/fiq.c | 4 | ||||
| -rw-r--r-- | arch/arm/kernel/machine_kexec.c | 4 | ||||
| -rw-r--r-- | arch/arm/kernel/setup.c | 13 |
5 files changed, 17 insertions, 12 deletions
diff --git a/arch/arm/kernel/elf.c b/arch/arm/kernel/elf.c index 84849098c8e8..d4a0da1e48f4 100644 --- a/arch/arm/kernel/elf.c +++ b/arch/arm/kernel/elf.c | |||
| @@ -74,9 +74,9 @@ EXPORT_SYMBOL(elf_set_personality); | |||
| 74 | */ | 74 | */ |
| 75 | int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) | 75 | int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) |
| 76 | { | 76 | { |
| 77 | if (executable_stack != EXSTACK_ENABLE_X) | 77 | if (executable_stack != EXSTACK_DISABLE_X) |
| 78 | return 1; | 78 | return 1; |
| 79 | if (cpu_architecture() <= CPU_ARCH_ARMv6) | 79 | if (cpu_architecture() < CPU_ARCH_ARMv6) |
| 80 | return 1; | 80 | return 1; |
| 81 | return 0; | 81 | return 0; |
| 82 | } | 82 | } |
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 49a6ba926c2b..159d0416f270 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
| @@ -111,6 +111,7 @@ ENTRY(mcount) | |||
| 111 | .globl mcount_call | 111 | .globl mcount_call |
| 112 | mcount_call: | 112 | mcount_call: |
| 113 | bl ftrace_stub | 113 | bl ftrace_stub |
| 114 | ldr lr, [fp, #-4] @ restore lr | ||
| 114 | ldmia sp!, {r0-r3, pc} | 115 | ldmia sp!, {r0-r3, pc} |
| 115 | 116 | ||
| 116 | ENTRY(ftrace_caller) | 117 | ENTRY(ftrace_caller) |
| @@ -122,6 +123,7 @@ ENTRY(ftrace_caller) | |||
| 122 | .globl ftrace_call | 123 | .globl ftrace_call |
| 123 | ftrace_call: | 124 | ftrace_call: |
| 124 | bl ftrace_stub | 125 | bl ftrace_stub |
| 126 | ldr lr, [fp, #-4] @ restore lr | ||
| 125 | ldmia sp!, {r0-r3, pc} | 127 | ldmia sp!, {r0-r3, pc} |
| 126 | 128 | ||
| 127 | #else | 129 | #else |
| @@ -133,6 +135,7 @@ ENTRY(mcount) | |||
| 133 | adr r0, ftrace_stub | 135 | adr r0, ftrace_stub |
| 134 | cmp r0, r2 | 136 | cmp r0, r2 |
| 135 | bne trace | 137 | bne trace |
| 138 | ldr lr, [fp, #-4] @ restore lr | ||
| 136 | ldmia sp!, {r0-r3, pc} | 139 | ldmia sp!, {r0-r3, pc} |
| 137 | 140 | ||
| 138 | trace: | 141 | trace: |
| @@ -141,6 +144,7 @@ trace: | |||
| 141 | sub r0, r0, #MCOUNT_INSN_SIZE | 144 | sub r0, r0, #MCOUNT_INSN_SIZE |
| 142 | mov lr, pc | 145 | mov lr, pc |
| 143 | mov pc, r2 | 146 | mov pc, r2 |
| 147 | mov lr, r1 @ restore lr | ||
| 144 | ldmia sp!, {r0-r3, pc} | 148 | ldmia sp!, {r0-r3, pc} |
| 145 | 149 | ||
| 146 | #endif /* CONFIG_DYNAMIC_FTRACE */ | 150 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c index 36f81d967979..6ff7919613d7 100644 --- a/arch/arm/kernel/fiq.c +++ b/arch/arm/kernel/fiq.c | |||
| @@ -88,7 +88,7 @@ void set_fiq_handler(void *start, unsigned int length) | |||
| 88 | * disable irqs for the duration. Note - these functions are almost | 88 | * disable irqs for the duration. Note - these functions are almost |
| 89 | * entirely coded in assembly. | 89 | * entirely coded in assembly. |
| 90 | */ | 90 | */ |
| 91 | void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs) | 91 | void __naked set_fiq_regs(struct pt_regs *regs) |
| 92 | { | 92 | { |
| 93 | register unsigned long tmp; | 93 | register unsigned long tmp; |
| 94 | asm volatile ( | 94 | asm volatile ( |
| @@ -106,7 +106,7 @@ void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs) | |||
| 106 | : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE)); | 106 | : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE)); |
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | void __attribute__((naked)) get_fiq_regs(struct pt_regs *regs) | 109 | void __naked get_fiq_regs(struct pt_regs *regs) |
| 110 | { | 110 | { |
| 111 | register unsigned long tmp; | 111 | register unsigned long tmp; |
| 112 | asm volatile ( | 112 | asm volatile ( |
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index 440dc62cdc3a..598ca61e7bca 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
| @@ -13,8 +13,8 @@ | |||
| 13 | #include <asm/cacheflush.h> | 13 | #include <asm/cacheflush.h> |
| 14 | #include <asm/mach-types.h> | 14 | #include <asm/mach-types.h> |
| 15 | 15 | ||
| 16 | const extern unsigned char relocate_new_kernel[]; | 16 | extern const unsigned char relocate_new_kernel[]; |
| 17 | const extern unsigned int relocate_new_kernel_size; | 17 | extern const unsigned int relocate_new_kernel_size; |
| 18 | 18 | ||
| 19 | extern void setup_mm_for_reboot(char mode); | 19 | extern void setup_mm_for_reboot(char mode); |
| 20 | 20 | ||
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 7049815d66d5..68d6494c0389 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
| @@ -233,12 +233,13 @@ static void __init cacheid_init(void) | |||
| 233 | unsigned int cachetype = read_cpuid_cachetype(); | 233 | unsigned int cachetype = read_cpuid_cachetype(); |
| 234 | unsigned int arch = cpu_architecture(); | 234 | unsigned int arch = cpu_architecture(); |
| 235 | 235 | ||
| 236 | if (arch >= CPU_ARCH_ARMv7) { | 236 | if (arch >= CPU_ARCH_ARMv6) { |
| 237 | cacheid = CACHEID_VIPT_NONALIASING; | 237 | if ((cachetype & (7 << 29)) == 4 << 29) { |
| 238 | if ((cachetype & (3 << 14)) == 1 << 14) | 238 | /* ARMv7 register format */ |
| 239 | cacheid |= CACHEID_ASID_TAGGED; | 239 | cacheid = CACHEID_VIPT_NONALIASING; |
| 240 | } else if (arch >= CPU_ARCH_ARMv6) { | 240 | if ((cachetype & (3 << 14)) == 1 << 14) |
| 241 | if (cachetype & (1 << 23)) | 241 | cacheid |= CACHEID_ASID_TAGGED; |
| 242 | } else if (cachetype & (1 << 23)) | ||
| 242 | cacheid = CACHEID_VIPT_ALIASING; | 243 | cacheid = CACHEID_VIPT_ALIASING; |
| 243 | else | 244 | else |
| 244 | cacheid = CACHEID_VIPT_NONALIASING; | 245 | cacheid = CACHEID_VIPT_NONALIASING; |
