arm64: smp: remove stack from secondary_data
When we boot a secondary CPU, we pass it a task and a stack to use. As the stack is always the task's stack, which can be derived from the task, let's have the secondary CPU derive this itself and avoid passing redundant information. There should be no functional change as a result of this patch. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Cc: Ard Biesheuvel <ardb@kernel.org> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: James Morse <james.morse@arm.com> Cc: Marc Zyngier <maz@kernel.org> Cc: Suzuki Poulose <suzuki.poulose@arm.com> Cc: Will Deacon <will@kernel.org> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20210520115031.18509-5-mark.rutland@arm.com Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
98c7a1666e
commit
3305e7f74a
@ -73,12 +73,10 @@ asmlinkage void secondary_start_kernel(void);
|
||||
|
||||
/*
|
||||
* Initial data for bringing up a secondary CPU.
|
||||
* @stack - sp for the secondary CPU
|
||||
* @status - Result passed back from the secondary CPU to
|
||||
* indicate failure.
|
||||
*/
|
||||
struct secondary_data {
|
||||
void *stack;
|
||||
struct task_struct *task;
|
||||
long status;
|
||||
};
|
||||
|
@ -99,7 +99,6 @@ int main(void)
|
||||
DEFINE(SOFTIRQ_SHIFT, SOFTIRQ_SHIFT);
|
||||
DEFINE(IRQ_CPUSTAT_SOFTIRQ_PENDING, offsetof(irq_cpustat_t, __softirq_pending));
|
||||
BLANK();
|
||||
DEFINE(CPU_BOOT_STACK, offsetof(struct secondary_data, stack));
|
||||
DEFINE(CPU_BOOT_TASK, offsetof(struct secondary_data, task));
|
||||
BLANK();
|
||||
DEFINE(FTR_OVR_VAL_OFFSET, offsetof(struct arm64_ftr_override, val));
|
||||
|
@ -645,11 +645,12 @@ SYM_FUNC_START_LOCAL(__secondary_switched)
|
||||
isb
|
||||
|
||||
adr_l x0, secondary_data
|
||||
ldr x1, [x0, #CPU_BOOT_STACK] // get secondary_data.stack
|
||||
cbz x1, __secondary_too_slow
|
||||
mov sp, x1
|
||||
ldr x2, [x0, #CPU_BOOT_TASK]
|
||||
cbz x2, __secondary_too_slow
|
||||
|
||||
ldr x1, [x2, #TSK_STACK]
|
||||
add sp, x1, #THREAD_SIZE
|
||||
|
||||
msr sp_el0, x2
|
||||
scs_load x2, x3
|
||||
setup_final_frame
|
||||
|
@ -120,7 +120,6 @@ int __cpu_up(unsigned int cpu, struct task_struct *idle)
|
||||
* page tables.
|
||||
*/
|
||||
secondary_data.task = idle;
|
||||
secondary_data.stack = task_stack_page(idle) + THREAD_SIZE;
|
||||
update_cpu_boot_status(CPU_MMU_OFF);
|
||||
|
||||
/* Now bring the CPU into our world */
|
||||
@ -141,7 +140,6 @@ int __cpu_up(unsigned int cpu, struct task_struct *idle)
|
||||
|
||||
pr_crit("CPU%u: failed to come online\n", cpu);
|
||||
secondary_data.task = NULL;
|
||||
secondary_data.stack = NULL;
|
||||
status = READ_ONCE(secondary_data.status);
|
||||
if (status == CPU_MMU_OFF)
|
||||
status = READ_ONCE(__early_cpu_boot_status);
|
||||
|
Loading…
Reference in New Issue
Block a user