summaryrefslogtreecommitdiff
path: root/src/cpu/x86/mp_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/x86/mp_init.c')
-rw-r--r--src/cpu/x86/mp_init.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/cpu/x86/mp_init.c b/src/cpu/x86/mp_init.c
index 8957515540..b7b8fe2afa 100644
--- a/src/cpu/x86/mp_init.c
+++ b/src/cpu/x86/mp_init.c
@@ -870,13 +870,20 @@ static int run_ap_work(struct mp_callback *val, long expire_us)
int i;
int cpus_accepted;
struct stopwatch sw;
- int cur_cpu = cpu_index();
+ int cur_cpu;
if (!CONFIG(PARALLEL_MP_AP_WORK)) {
printk(BIOS_ERR, "APs already parked. PARALLEL_MP_AP_WORK not selected.\n");
return -1;
}
+ cur_cpu = cpu_index();
+
+ if (cur_cpu < 0) {
+ printk(BIOS_ERR, "Invalid CPU index.\n");
+ return -1;
+ }
+
/* Signal to all the APs to run the func. */
for (i = 0; i < ARRAY_SIZE(ap_callbacks); i++) {
if (cur_cpu == i)
@@ -918,6 +925,12 @@ static void ap_wait_for_instruction(void)
return;
cur_cpu = cpu_index();
+
+ if (cur_cpu < 0) {
+ printk(BIOS_ERR, "Invalid CPU index.\n");
+ return;
+ }
+
per_cpu_slot = &ap_callbacks[cur_cpu];
while (1) {