|
@@ -122,8 +122,6 @@ asmlinkage void secondary_start_kernel(void)
|
|
struct mm_struct *mm = &init_mm;
|
|
struct mm_struct *mm = &init_mm;
|
|
unsigned int cpu = smp_processor_id();
|
|
unsigned int cpu = smp_processor_id();
|
|
|
|
|
|
- printk("CPU%u: Booted secondary processor\n", cpu);
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* All kernel threads share the same mm context; grab a
|
|
* All kernel threads share the same mm context; grab a
|
|
* reference and switch to it.
|
|
* reference and switch to it.
|
|
@@ -132,6 +130,9 @@ asmlinkage void secondary_start_kernel(void)
|
|
current->active_mm = mm;
|
|
current->active_mm = mm;
|
|
cpumask_set_cpu(cpu, mm_cpumask(mm));
|
|
cpumask_set_cpu(cpu, mm_cpumask(mm));
|
|
|
|
|
|
|
|
+ set_my_cpu_offset(per_cpu_offset(smp_processor_id()));
|
|
|
|
+ printk("CPU%u: Booted secondary processor\n", cpu);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* TTBR0 is only used for the identity mapping at this stage. Make it
|
|
* TTBR0 is only used for the identity mapping at this stage. Make it
|
|
* point to zero page to avoid speculatively fetching new entries.
|
|
* point to zero page to avoid speculatively fetching new entries.
|
|
@@ -271,6 +272,7 @@ void __init smp_cpus_done(unsigned int max_cpus)
|
|
|
|
|
|
void __init smp_prepare_boot_cpu(void)
|
|
void __init smp_prepare_boot_cpu(void)
|
|
{
|
|
{
|
|
|
|
+ set_my_cpu_offset(per_cpu_offset(smp_processor_id()));
|
|
}
|
|
}
|
|
|
|
|
|
static void (*smp_cross_call)(const struct cpumask *, unsigned int);
|
|
static void (*smp_cross_call)(const struct cpumask *, unsigned int);
|