From: Tony Lindgren <tony@atomide.com>
To: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Petr Mladek <pmladek@suse.com>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org,
Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
linux-pm@vger.kernel.org, John Stultz <john.stultz@linaro.org>
Subject: Re: Regression in next with use printk_safe buffers in printk
Date: Tue, 14 Feb 2017 09:03:35 -0800 [thread overview]
Message-ID: <20170214170335.GS3897@atomide.com> (raw)
In-Reply-To: <20170214165645.GB10321@tigerII.localdomain>
* Sergey Senozhatsky <sergey.senozhatsky@gmail.com> [170214 08:58]:
> On (02/14/17 17:18), Peter Zijlstra wrote:
> > On Wed, Feb 15, 2017 at 01:01:40AM +0900, Sergey Senozhatsky wrote:
> > >
> > > but I'm a bit confused by rt_b->rt_runtime_lock in this unsafe lock
> > > scenario (so it's not ABBA, but ABAD)
> > >
> > > > lock(hrtimer_bases.lock);
> > > > lock(&rt_b->rt_runtime_lock);
> > > > lock(hrtimer_bases.lock);
> > > > lock(tk_core);
> > > >
> > > >
> > > > Chain exists of:
> > > >
> > > > tk_core --> &rt_b->rt_runtime_lock --> hrtimer_bases.lock
> > >
> > >
> > > I'm lacking some knowledge here, sorry. where does the tk_core --> &rt_b->rt_runtime_lock
> > > come from?
> >
> > rt_b->rt_runtime_lock is one of the scheduler locks, since we do
> > printk() under tk_core, which does semaphore muck, which then includes
> > the entire scheduler chain of locks.
>
> thanks, Peter.
>
> that crossed my mind, but I kinda assumed that we do printk() from
> under tk_core using sched fair, and rt_runtime_lock is from sched rt.
>
>
> so something like below, perhaps. would be helpful if Tony can test it.
>
> (I'll send out this patch 'in a proper way' tomorrow, after some sleep,
> it's 2am here).
>
> 8< ====
>
> From e1755b0bf7f8a0be5fdf4dd7303bf4cd150d9d20 Mon Sep 17 00:00:00 2001
> From: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> Date: Wed, 15 Feb 2017 01:42:18 +0900
> Subject: [PATCH] time/timekeeping_debug: use printk_deferred()
>
> Do not call printk() from tk_debug_account_sleep_time(), because
> tk_debug_account_sleep_time() is called under tk_core seq lock.
> It's not safe to call printk() under tk_core, because console_sem
> invokes scheduled (via wake_up_process()->activate_task()), which,
> in turn, can call timekeeping code again, for instance, via
> get_time()->ktime_get(). This may result in infinite loop on
> tk_core.
>
> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Thanks yeah this fixes the issue for me:
Tested-by: Tony Lindgren <tony@atomide.com>
> ---
> kernel/time/timekeeping_debug.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/time/timekeeping_debug.c b/kernel/time/timekeeping_debug.c
> index ca9fb800336b..b8f7146c3538 100644
> --- a/kernel/time/timekeeping_debug.c
> +++ b/kernel/time/timekeeping_debug.c
> @@ -75,7 +75,8 @@ void tk_debug_account_sleep_time(struct timespec64 *t)
> int bin = min(fls(t->tv_sec), NUM_BINS-1);
>
> sleep_time_bin[bin]++;
> - pr_info("Suspended for %lld.%03lu seconds\n", (s64)t->tv_sec,
> + printk_deferred(KERN_INFO "Suspended for %lld.%03lu seconds\n",
> + (s64)t->tv_sec,
> t->tv_nsec / NSEC_PER_MSEC);
> }
>
> --
> 2.11.1
>
next prev parent reply other threads:[~2017-02-14 17:03 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-13 18:59 Regression in next with use printk_safe buffers in printk Tony Lindgren
2017-02-14 16:01 ` Sergey Senozhatsky
2017-02-14 16:18 ` Peter Zijlstra
2017-02-14 16:56 ` Sergey Senozhatsky
2017-02-14 17:03 ` Tony Lindgren [this message]
2017-02-15 4:44 ` Sergey Senozhatsky
2017-02-14 18:29 ` Peter Zijlstra
2017-02-15 4:49 ` Sergey Senozhatsky
2017-02-14 16:54 ` Tony Lindgren
2017-02-15 18:01 ` Tony Lindgren
2017-02-16 1:31 ` Sergey Senozhatsky
2017-02-16 4:03 ` Tony Lindgren
2017-02-16 4:25 ` Sergey Senozhatsky
2017-02-16 15:10 ` Tony Lindgren
2017-02-16 16:31 ` Sergey Senozhatsky
2017-02-16 19:13 ` Tony Lindgren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170214170335.GS3897@atomide.com \
--to=tony@atomide.com \
--cc=john.stultz@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=rjw@rjwysocki.net \
--cc=rostedt@goodmis.org \
--cc=sergey.senozhatsky.work@gmail.com \
--cc=sergey.senozhatsky@gmail.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.