[Skiboot] [PATCH 04/13] Don't run pollers in time_wait() when a lock is held
Cedric Le Goater
clg at fr.ibm.com
Thu Feb 19 02:12:15 AEDT 2015
On 02/18/2015 04:57 AM, Benjamin Herrenschmidt wrote:
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
> ---
> core/timebase.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/core/timebase.c b/core/timebase.c
> index 9321373..878f66b 100644
> --- a/core/timebase.c
> +++ b/core/timebase.c
> @@ -1,3 +1,4 @@
> +
> /* Copyright 2013-2014 IBM Corp.
> *
> * Licensed under the Apache License, Version 2.0 (the "License");
> @@ -40,7 +41,14 @@ static void time_wait_poll(unsigned long duration)
>
> void time_wait(unsigned long duration)
> {
> - if (this_cpu() != boot_cpu)
> + struct cpu_thread *c = this_cpu();
> +
> + if (this_cpu()->lock_depth) {
> + time_wait_nopoll(duration);
> + return;
> + }
> +
> + if (c != boot_cpu)
> time_wait_nopoll(duration);
> else
> time_wait_poll(duration);
>
openpower systems call ipmi_wdt_init() which calls ipmi_queue_msg_sync().
and then, they just loop endlessly in time_wait_ms(100) :/
C.
More information about the Skiboot
mailing list