From 838f296d059962196bb50db4b009d1d890cae0be Mon Sep 17 00:00:00 2001 From: Subrata Banik Date: Wed, 11 Apr 2018 18:45:57 +0530 Subject: 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 Reviewed-on: https://review.coreboot.org/25622 Reviewed-by: Aaron Durbin Reviewed-by: Nico Huber Tested-by: build bot (Jenkins) --- src/cpu/x86/mp_init.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/cpu/x86') diff --git a/src/cpu/x86/mp_init.c b/src/cpu/x86/mp_init.c index f99abaf245..585a54b86d 100644 --- a/src/cpu/x86/mp_init.c +++ b/src/cpu/x86/mp_init.c @@ -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); -- cgit v1.2.3