summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2019-07-26 14:47:32 +0200
committerPatrick Rudolph <siro@das-labor.org>2019-08-15 06:45:34 +0000
commit5ec97cea676bd45b151f94b73d486cee0f244213 (patch)
tree1f2882645dc38eabbf035b65fde6aa9f9ca97077 /src/cpu
parent1bc6bf115226baef94122955167902e4e1251a92 (diff)
downloadcoreboot-5ec97cea676bd45b151f94b73d486cee0f244213.tar.xz
soc/*: mp_run_on_all_cpus: Remove configurable timeout
Some timeouts given were too small when serial console is enabled due to its spinlock making code runtime worse with every AP present. In addition we usually don't know how long specific code runs and how long ago it was sent to the APs. Remove the timeout argument from mp_run_on_all_cpus and instead wait up to 1 second, to prevent possible crashing of secondary APs still processing the old job. Tested on Supermicro X11SSH-TF. Change-Id: I456be647b159f7a2ea7d94986a24424e56dcc8c4 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/34587 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com>
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/x86/mp_init.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/cpu/x86/mp_init.c b/src/cpu/x86/mp_init.c
index 3658a5b698..1755a9dd4a 100644
--- a/src/cpu/x86/mp_init.c
+++ b/src/cpu/x86/mp_init.c
@@ -964,12 +964,13 @@ int mp_run_on_aps(void (*func)(void *), void *arg, int logical_cpu_num,
return run_ap_work(&lcb, expire_us);
}
-int mp_run_on_all_cpus(void (*func)(void *), void *arg, long expire_us)
+int mp_run_on_all_cpus(void (*func)(void *), void *arg)
{
/* Run on BSP first. */
func(arg);
- return mp_run_on_aps(func, arg, MP_RUN_ON_ALL_CPUS, expire_us);
+ /* For up to 1 second for AP to finish previous work. */
+ return mp_run_on_aps(func, arg, MP_RUN_ON_ALL_CPUS, 1000 * USECS_PER_MSEC);
}
int mp_park_aps(void)
@@ -981,7 +982,7 @@ int mp_park_aps(void)
stopwatch_init(&sw);
ret = mp_run_on_aps(park_this_cpu, NULL, MP_RUN_ON_ALL_CPUS,
- 250 * USECS_PER_MSEC);
+ 1000 * USECS_PER_MSEC);
duration_msecs = stopwatch_duration_msecs(&sw);