From: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
To: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
Jan Kara <jack@suse.cz>, Viresh Kumar <viresh.kumar@linaro.org>,
Andrew Morton <akpm@linux-foundation.org>,
Jan Kara <jack@suse.com>, Tejun Heo <tj@kernel.org>,
Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Byungchul Park <byungchul.park@lge.com>,
vlevenetz@mm-sol.com,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [PATCH v10 1/2] printk: Make printk() completely async
Date: Fri, 2 Sep 2016 16:58:08 +0900 [thread overview]
Message-ID: <20160902075808.GA26230@swordfish> (raw)
In-Reply-To: <20160901085844.GW4866@pathway.suse.cz>
On (09/01/16 10:58), Petr Mladek wrote:
> On Wed 2016-08-31 21:52:24, Sergey Senozhatsky wrote:
> > On (08/31/16 11:38), Petr Mladek wrote:
> > > 2. Potential deadlocks when calling wake_up_process() by
> > > async printk and console_unlock().
> >
> > * there are many reasons to those recursive printk() calls -- some
> > can be addressed, some cannot. for instance, it doesn't matter how many
> > per-CPU buffers we use for alternative printk() once the logbuf_lock is
> > corrupted.
>
> Yup and BTW: Peter Zijlstra wants to avoid zapping locks whenever
> possible because it corrupts the state. It might solve the actual
> state but it might cause deadlock by the double unlock.
yes, don't really want to zap_locks() either.
[..]
> Great catch! From the already mentioned solutions, I would prefer
> using deferred variants of WARN()/BUG()/printk() on these locations.
> Together with using lockdep to find these locations.
hmm... need to think more. one of the problems is that we would have to
periodically "scan" for new WARNs/BUGs/etc doing all the types of random
.configs
> Also there is the Peter Zijlstra's idea of using a lockless
> "early" console to debug the situations where it happens.
> It might make sense to make such a console easy to use.
aha, not really familiar with early console.
> I am unable to find any other generic solution that would prevent this
> from the printk() side at the moment.
>
> > 5. not 100% guaranteed printing on panic
[..]
> That might be very hard to solve in general as well. Again the PeterZ's
> idea with the lockless console might help here.
"need to google it".
> > > I wonder how to separate the problems and make them more manageable.
> >
> > so I was thinking for a moment about doing the recursion detection rework
> > before the async_printk. just because better recursion detection is a nice
> > thing to have in the first place and it probably may help us catching some
> > of the surprises that async_printk might have. but it probably will be more
> > problematic than I thought.
> >
> > then async_printk. I have a refreshed series on my hands, addressing
> > Viresh's reports. it certainly makes things better, but it doesn't
> > eliminate all of the lockups/etc sources.
>
> We must separate historical possible lockups and new regressions.
> Only regressions should block the async printk series. Old
> bugs should be fixed separately to keep the series manageable.
agree.
> Anyway, I think that the async printk will make sense even
> when we solve all the other issues. If async printk does not
> cause regressions, why not make it in.
sure.
> > a console_unlock() doing
> > wake_up_process(printk_kthread) would make it better.
>
> I am not sure what you mean by this.
I meant that this thing
local_irq_save() // or preempt_disable()
...
if (console_trylock())
console_unlock();
...
local_irq_restore() // or preempt_enable()
can easily lockup the system if console_trylock() was successful and there
are enough messages to print. printk_kthread can't help, because here we
basically enforce the `old' behavior. we have async printk, but not async
console output. tweaking console_unlock() to offload the actual printing loop
to printk_kthread would make the entire console output async:
static void console_sync_flush_and_unlock(void)
{
for (;;) {
...
call_console_drivers();
...
}
}
void console_unlock(void)
{
if (!MOTORMOUTH && can_printk_async()) {
up();
wake_up_process(printk_kthread);
return;
}
console_sync_flush_and_unlock();
}
-ss
next prev parent reply other threads:[~2016-09-02 7:58 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-04 16:57 [PATCH v10 0/2] printk: Make printk() completely async Sergey Senozhatsky
2016-04-04 16:57 ` [PATCH v10 1/2] " Sergey Senozhatsky
2016-04-04 22:51 ` Andrew Morton
2016-04-05 5:17 ` Sergey Senozhatsky
2016-04-05 7:39 ` Sergey Senozhatsky
2016-04-06 0:19 ` Sergey Senozhatsky
2016-04-06 8:27 ` Jan Kara
2016-04-07 9:48 ` Sergey Senozhatsky
2016-04-07 12:08 ` Sergey Senozhatsky
2016-04-07 13:15 ` Jan Kara
2016-08-10 21:17 ` Viresh Kumar
2016-08-12 9:44 ` Petr Mladek
2016-08-15 14:26 ` Vladislav Levenetz
2016-08-16 9:04 ` Petr Mladek
2016-08-18 2:27 ` Sergey Senozhatsky
2016-08-18 9:33 ` Petr Mladek
2016-08-18 9:51 ` Sergey Senozhatsky
2016-08-18 10:56 ` Petr Mladek
2016-08-19 6:32 ` Sergey Senozhatsky
2016-08-19 9:54 ` Petr Mladek
2016-08-19 19:00 ` Jan Kara
2016-08-20 5:24 ` Sergey Senozhatsky
2016-08-22 4:15 ` Sergey Senozhatsky
2016-08-23 12:19 ` Petr Mladek
2016-08-24 1:33 ` Sergey Senozhatsky
2016-08-25 21:10 ` Petr Mladek
2016-08-26 1:56 ` Sergey Senozhatsky
2016-08-26 8:20 ` Sergey Senozhatsky
2016-08-30 9:29 ` Petr Mladek
2016-08-31 2:31 ` Sergey Senozhatsky
2016-08-31 9:38 ` Petr Mladek
2016-08-31 12:52 ` Sergey Senozhatsky
2016-09-01 8:58 ` Petr Mladek
2016-09-02 7:58 ` Sergey Senozhatsky [this message]
2016-09-02 15:15 ` Petr Mladek
2016-09-06 7:16 ` Sergey Senozhatsky
2016-08-23 13:03 ` Petr Mladek
2016-08-23 13:48 ` Petr Mladek
2016-04-04 16:57 ` [PATCH v10 2/2] printk: Make wake_up_klogd_work_func() async Sergey Senozhatsky
-- strict thread matches above, loose matches on Subject: below --
2016-08-23 3:32 [PATCH v10 1/2] printk: Make printk() completely async Andreas Mohr
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=20160902075808.GA26230@swordfish \
--to=sergey.senozhatsky.work@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=byungchul.park@lge.com \
--cc=gregkh@linuxfoundation.org \
--cc=jack@suse.com \
--cc=jack@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=penguin-kernel@i-love.sakura.ne.jp \
--cc=pmladek@suse.com \
--cc=sergey.senozhatsky@gmail.com \
--cc=tj@kernel.org \
--cc=viresh.kumar@linaro.org \
--cc=vlevenetz@mm-sol.com \
/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.