cpu/x86/mp_init: report correct count of AP acceptance
The previous implementation was using a for loop. By it's very definition the last statement in the for loop declaration is done at the end of the loop. Therefore, if the conditional for breaking out of the for loop because of a timeout would always see a value of 0 for the number of APs accepted. Correct this by changing to a while loop with an explicit timeout condition at the end of the loop. Change-Id: I503953c46c2a65f7e264ed49c94c0a46d6c41c57 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/20225 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
parent
a677feca88
commit
046848ce1f
|
@ -891,15 +891,21 @@ static int run_ap_work(mp_callback_t func, long expire_us)
|
|||
|
||||
/* Wait for all the APs to signal back that call has been accepted. */
|
||||
stopwatch_init_usecs_expire(&sw, expire_us);
|
||||
for (cpus_accepted = 0; !stopwatch_expired(&sw); cpus_accepted = 0) {
|
||||
while (1) {
|
||||
cpus_accepted = 0;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ap_callbacks); i++) {
|
||||
if (cur_cpu == i)
|
||||
continue;
|
||||
if (read_callback(&ap_callbacks[i]) == NULL)
|
||||
cpus_accepted++;
|
||||
}
|
||||
|
||||
if (cpus_accepted == global_num_aps)
|
||||
return 0;
|
||||
|
||||
if (stopwatch_expired(&sw))
|
||||
break;
|
||||
}
|
||||
|
||||
printk(BIOS_ERR, "AP call expired. %d/%d CPUs accepted.\n",
|
||||
|
|
Loading…
Reference in New Issue