From e2c32b1a46ac8dc1364ed03c195322c0bf28dd7f Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Wed, 27 Aug 2014 10:30:39 -0500 Subject: [PATCH] arm64: implement cpu_info() correctly There are 2 things wrong with the current implementation: 1. the stack isn't guaranteed to be aligned to CONFIG_STACK_SIZE. 2. the stack isn't necessarily CONFIG_STACK_SIZE bytes. Utilize the smp_processor_id() function to obtain the correct cpu_info structure to obtain the correct index. BUG=chrome-os-partner:31545 BRANC=None TEST=Built and booted. Change-Id: I2825118e2313dbbf13712a4afdfa05a2e38ee3a4 Signed-off-by: Aaron Durbin Reviewed-on: https://chromium-review.googlesource.com/214665 Reviewed-by: Furquan Shaikh --- src/arch/arm64/cpu.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/arch/arm64/cpu.c b/src/arch/arm64/cpu.c index f90c759559..e3bc19d163 100644 --- a/src/arch/arm64/cpu.c +++ b/src/arch/arm64/cpu.c @@ -30,13 +30,9 @@ #include #include -/* Return the cpu struct which is at the high memory address of the stack. - */ +static struct cpu_info cpu_infos[CONFIG_MAX_CPUS]; + struct cpu_info *cpu_info(void) { - uintptr_t addr = ALIGN((uintptr_t)__builtin_frame_address(0), - CONFIG_STACK_SIZE); - addr -= sizeof(struct cpu_info); - return (void *)addr; + return &cpu_infos[smp_processor_id()]; } -