[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