diff options
author | Will Deacon <will.deacon@arm.com> | 2013-11-05 13:10:47 -0500 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2013-12-19 12:43:06 -0500 |
commit | 7158627686f02319c50c8d9d78f75d4c8d126ff2 (patch) | |
tree | 3b4d781bd966f07cad1b67b137f0ff8b89430e9a /arch/arm64/kernel/smp.c | |
parent | 66aa8d6a145b6a66566b4fce219cc56c3d0e01c3 (diff) |
arm64: percpu: implement optimised pcpu access using tpidr_el1
This patch implements optimised percpu variable accesses using the
el1 r/w thread register (tpidr_el1) along the same lines as arch/arm/.
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm64/kernel/smp.c')
-rw-r--r-- | arch/arm64/kernel/smp.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c index a0c2ca602cf8..b5d2031c12c6 100644 --- a/arch/arm64/kernel/smp.c +++ b/arch/arm64/kernel/smp.c | |||
@@ -122,8 +122,6 @@ asmlinkage void secondary_start_kernel(void) | |||
122 | struct mm_struct *mm = &init_mm; | 122 | struct mm_struct *mm = &init_mm; |
123 | unsigned int cpu = smp_processor_id(); | 123 | unsigned int cpu = smp_processor_id(); |
124 | 124 | ||
125 | printk("CPU%u: Booted secondary processor\n", cpu); | ||
126 | |||
127 | /* | 125 | /* |
128 | * All kernel threads share the same mm context; grab a | 126 | * All kernel threads share the same mm context; grab a |
129 | * reference and switch to it. | 127 | * reference and switch to it. |
@@ -132,6 +130,9 @@ asmlinkage void secondary_start_kernel(void) | |||
132 | current->active_mm = mm; | 130 | current->active_mm = mm; |
133 | cpumask_set_cpu(cpu, mm_cpumask(mm)); | 131 | cpumask_set_cpu(cpu, mm_cpumask(mm)); |
134 | 132 | ||
133 | set_my_cpu_offset(per_cpu_offset(smp_processor_id())); | ||
134 | printk("CPU%u: Booted secondary processor\n", cpu); | ||
135 | |||
135 | /* | 136 | /* |
136 | * TTBR0 is only used for the identity mapping at this stage. Make it | 137 | * TTBR0 is only used for the identity mapping at this stage. Make it |
137 | * point to zero page to avoid speculatively fetching new entries. | 138 | * point to zero page to avoid speculatively fetching new entries. |
@@ -271,6 +272,7 @@ void __init smp_cpus_done(unsigned int max_cpus) | |||
271 | 272 | ||
272 | void __init smp_prepare_boot_cpu(void) | 273 | void __init smp_prepare_boot_cpu(void) |
273 | { | 274 | { |
275 | set_my_cpu_offset(per_cpu_offset(smp_processor_id())); | ||
274 | } | 276 | } |
275 | 277 | ||
276 | static void (*smp_cross_call)(const struct cpumask *, unsigned int); | 278 | static void (*smp_cross_call)(const struct cpumask *, unsigned int); |