[Skiboot] [PATCH] Don't detect lock timeouts when timebase is invalid
Oliver
oohall at gmail.com
Fri Mar 9 16:50:12 AEDT 2018
On Fri, Mar 9, 2018 at 4:47 PM, Stewart Smith
<stewart at linux.vnet.ibm.com> wrote:
> We can have threads waiting on hmi_lock who have an
> invalid timebase. Because of this, we want to go poke
> the register directly rather than rely on
> this_cpu()->tb_invalid (which won't have been set yet).
Maybe we should just switch the polarity of tb_invalid to tb_valid instead?
>
> Without this patch, you get something like this when
> you're injecting timebase errors:
> [10976.202052846,4] WARNING: Lock has been spinning for 10976394ms
>
> Fixes: 84186ef0944c9413262f0974ddab3fb1343ccfe8
> Signed-off-by: Stewart Smith <stewart at linux.vnet.ibm.com>
> ---
> core/lock.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/core/lock.c b/core/lock.c
> index 2d94ebb4e285..318f42d92d51 100644
> --- a/core/lock.c
> +++ b/core/lock.c
> @@ -140,6 +140,13 @@ static inline bool lock_timeout(unsigned long start)
> unsigned long wait = tb_to_msecs(mftb());
>
> if (wait - start > LOCK_TIMEOUT_MS) {
> + /*
> + * If the timebase is invalid, we shouldn't
> + * throw an error. This is possible with pending HMIs
> + * that need to recover TB.
> + */
> + if( !(mfspr(SPR_TFMR) & SPR_TFMR_TB_VALID))
> + return false;
> prlog(PR_WARNING, "WARNING: Lock has been "\
> "spinning for %lums\n", wait - start);
> backtrace();
> --
> 2.14.3
>
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot
More information about the Skiboot
mailing list