diff options
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 15 | ||||
-rw-r--r-- | arch/arm/kernel/setup.c | 10 |
2 files changed, 15 insertions, 10 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index be439cab92c6..a511ec5b11a3 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -785,7 +785,7 @@ __kuser_helper_end: | |||
785 | * SP points to a minimal amount of processor-private memory, the address | 785 | * SP points to a minimal amount of processor-private memory, the address |
786 | * of which is copied into r0 for the mode specific abort handler. | 786 | * of which is copied into r0 for the mode specific abort handler. |
787 | */ | 787 | */ |
788 | .macro vector_stub, name, correction=0 | 788 | .macro vector_stub, name, mode, correction=0 |
789 | .align 5 | 789 | .align 5 |
790 | 790 | ||
791 | vector_\name: | 791 | vector_\name: |
@@ -805,15 +805,14 @@ vector_\name: | |||
805 | @ Prepare for SVC32 mode. IRQs remain disabled. | 805 | @ Prepare for SVC32 mode. IRQs remain disabled. |
806 | @ | 806 | @ |
807 | mrs r0, cpsr | 807 | mrs r0, cpsr |
808 | bic r0, r0, #MODE_MASK | 808 | eor r0, r0, #(\mode ^ SVC_MODE) |
809 | orr r0, r0, #SVC_MODE | ||
810 | msr spsr_cxsf, r0 | 809 | msr spsr_cxsf, r0 |
811 | 810 | ||
812 | @ | 811 | @ |
813 | @ the branch table must immediately follow this code | 812 | @ the branch table must immediately follow this code |
814 | @ | 813 | @ |
815 | mov r0, sp | ||
816 | and lr, lr, #0x0f | 814 | and lr, lr, #0x0f |
815 | mov r0, sp | ||
817 | ldr lr, [pc, lr, lsl #2] | 816 | ldr lr, [pc, lr, lsl #2] |
818 | movs pc, lr @ branch to handler in SVC mode | 817 | movs pc, lr @ branch to handler in SVC mode |
819 | .endm | 818 | .endm |
@@ -823,7 +822,7 @@ __stubs_start: | |||
823 | /* | 822 | /* |
824 | * Interrupt dispatcher | 823 | * Interrupt dispatcher |
825 | */ | 824 | */ |
826 | vector_stub irq, 4 | 825 | vector_stub irq, IRQ_MODE, 4 |
827 | 826 | ||
828 | .long __irq_usr @ 0 (USR_26 / USR_32) | 827 | .long __irq_usr @ 0 (USR_26 / USR_32) |
829 | .long __irq_invalid @ 1 (FIQ_26 / FIQ_32) | 828 | .long __irq_invalid @ 1 (FIQ_26 / FIQ_32) |
@@ -846,7 +845,7 @@ __stubs_start: | |||
846 | * Data abort dispatcher | 845 | * Data abort dispatcher |
847 | * Enter in ABT mode, spsr = USR CPSR, lr = USR PC | 846 | * Enter in ABT mode, spsr = USR CPSR, lr = USR PC |
848 | */ | 847 | */ |
849 | vector_stub dabt, 8 | 848 | vector_stub dabt, ABT_MODE, 8 |
850 | 849 | ||
851 | .long __dabt_usr @ 0 (USR_26 / USR_32) | 850 | .long __dabt_usr @ 0 (USR_26 / USR_32) |
852 | .long __dabt_invalid @ 1 (FIQ_26 / FIQ_32) | 851 | .long __dabt_invalid @ 1 (FIQ_26 / FIQ_32) |
@@ -869,7 +868,7 @@ __stubs_start: | |||
869 | * Prefetch abort dispatcher | 868 | * Prefetch abort dispatcher |
870 | * Enter in ABT mode, spsr = USR CPSR, lr = USR PC | 869 | * Enter in ABT mode, spsr = USR CPSR, lr = USR PC |
871 | */ | 870 | */ |
872 | vector_stub pabt, 4 | 871 | vector_stub pabt, ABT_MODE, 4 |
873 | 872 | ||
874 | .long __pabt_usr @ 0 (USR_26 / USR_32) | 873 | .long __pabt_usr @ 0 (USR_26 / USR_32) |
875 | .long __pabt_invalid @ 1 (FIQ_26 / FIQ_32) | 874 | .long __pabt_invalid @ 1 (FIQ_26 / FIQ_32) |
@@ -892,7 +891,7 @@ __stubs_start: | |||
892 | * Undef instr entry dispatcher | 891 | * Undef instr entry dispatcher |
893 | * Enter in UND mode, spsr = SVC/USR CPSR, lr = SVC/USR PC | 892 | * Enter in UND mode, spsr = SVC/USR CPSR, lr = SVC/USR PC |
894 | */ | 893 | */ |
895 | vector_stub und | 894 | vector_stub und, UND_MODE |
896 | 895 | ||
897 | .long __und_usr @ 0 (USR_26 / USR_32) | 896 | .long __und_usr @ 0 (USR_26 / USR_32) |
898 | .long __und_invalid @ 1 (FIQ_26 / FIQ_32) | 897 | .long __und_invalid @ 1 (FIQ_26 / FIQ_32) |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index c9b69771f92e..85774165e9fd 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -338,7 +338,8 @@ void cpu_init(void) | |||
338 | BUG(); | 338 | BUG(); |
339 | } | 339 | } |
340 | 340 | ||
341 | dump_cpu_info(cpu); | 341 | if (system_state == SYSTEM_BOOTING) |
342 | dump_cpu_info(cpu); | ||
342 | 343 | ||
343 | /* | 344 | /* |
344 | * setup stacks for re-entrant exception handlers | 345 | * setup stacks for re-entrant exception handlers |
@@ -838,7 +839,12 @@ static int c_show(struct seq_file *m, void *v) | |||
838 | 839 | ||
839 | #if defined(CONFIG_SMP) | 840 | #if defined(CONFIG_SMP) |
840 | for_each_online_cpu(i) { | 841 | for_each_online_cpu(i) { |
841 | seq_printf(m, "Processor\t: %d\n", i); | 842 | /* |
843 | * glibc reads /proc/cpuinfo to determine the number of | ||
844 | * online processors, looking for lines beginning with | ||
845 | * "processor". Give glibc what it expects. | ||
846 | */ | ||
847 | seq_printf(m, "processor\t: %d\n", i); | ||
842 | seq_printf(m, "BogoMIPS\t: %lu.%02lu\n\n", | 848 | seq_printf(m, "BogoMIPS\t: %lu.%02lu\n\n", |
843 | per_cpu(cpu_data, i).loops_per_jiffy / (500000UL/HZ), | 849 | per_cpu(cpu_data, i).loops_per_jiffy / (500000UL/HZ), |
844 | (per_cpu(cpu_data, i).loops_per_jiffy / (5000UL/HZ)) % 100); | 850 | (per_cpu(cpu_data, i).loops_per_jiffy / (5000UL/HZ)) % 100); |