cpu/x86: Add infinite timeout support into run_ap_work() function
There might be certain requirement in user function where user might not want to pass any timeout value, in those cases run_ap_work() should consider infinity as timeout and perform all APs initialization as per specification. Set expire_us <= 0 to specify an infinite timeout. BRANCH=none BUG=b:74436746 TEST=run_ap_work() is running successfully with 0 expire_us. Change-Id: Iacd67768c8a120f6a01baaa6817468f6b9a3b764 Signed-off-by: Subrata Banik <subrata.banik@intel.com> Reviewed-on: https://review.coreboot.org/25622 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Nico Huber <nico.h@gmx.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
e93634caa0
commit
838f296d05
|
@ -907,7 +907,9 @@ static int run_ap_work(mp_callback_t func, long expire_us)
|
|||
mfence();
|
||||
|
||||
/* Wait for all the APs to signal back that call has been accepted. */
|
||||
stopwatch_init_usecs_expire(&sw, expire_us);
|
||||
if (expire_us > 0)
|
||||
stopwatch_init_usecs_expire(&sw, expire_us);
|
||||
|
||||
do {
|
||||
cpus_accepted = 0;
|
||||
|
||||
|
@ -920,7 +922,7 @@ static int run_ap_work(mp_callback_t func, long expire_us)
|
|||
|
||||
if (cpus_accepted == global_num_aps)
|
||||
return 0;
|
||||
} while (!stopwatch_expired(&sw));
|
||||
} while (expire_us <= 0 || !stopwatch_expired(&sw));
|
||||
|
||||
printk(BIOS_ERR, "AP call expired. %d/%d CPUs accepted.\n",
|
||||
cpus_accepted, global_num_aps);
|
||||
|
|
|
@ -121,6 +121,9 @@ int mp_init_with_smm(struct bus *cpu_bus, const struct mp_ops *mp_ops);
|
|||
* After APs are up and PARALLEL_MP_AP_WORK is enabled one can issue work
|
||||
* to all the APs to perform. Currently the BSP is the only CPU that is allowed
|
||||
* to issue work. i.e. the APs should not call any of these functions.
|
||||
*
|
||||
* Input parameter expire_us <= 0 to specify an infinite timeout.
|
||||
*
|
||||
* All functions return < 0 on error, 0 on success.
|
||||
*/
|
||||
int mp_run_on_aps(void (*func)(void), long expire_us);
|
||||
|
|
Loading…
Reference in New Issue