From: Petr Mladek <pmladek@suse.com>
To: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Greg KH <gregkh@linuxfoundation.org>,
Michael Wang <yun.wang@profitbricks.com>,
stable@vger.kernel.org,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [ Linux 4.4 stable ] missing 'printk: set may_schedule for some of console_trylock() callers'
Date: Wed, 26 Jul 2017 10:44:35 +0200 [thread overview]
Message-ID: <20170726084435.GA3799@pathway.suse.cz> (raw)
In-Reply-To: <20170725163325.GA615@tigerII.localdomain>
On Wed 2017-07-26 01:33:25, Sergey Senozhatsky wrote:
> Hello,
>
> On (07/25/17 06:57), Greg KH wrote:
> > On Tue, Jul 25, 2017 at 10:28:16AM +0200, Michael Wang wrote:
> > > Hi, greg k-h
> > >
> > > During our testing with 4.4.73 we got soft lockup like:
> > >
> > > NMI watchdog: BUG: soft lockup - CPU#2 stuck for 23s! [systemd-udevd:856]
> > > ...
> > > Call Trace:
> > > [<ffffffff8109d139>] vprintk_emit+0x319/0x4a0
> > > [<ffffffff8112182d>] printk_emit+0x33/0x3b
> > > [<ffffffff812f9e9c>] ? simple_strtoull+0x2c/0x50
> > > [<ffffffff8109d39a>] devkmsg_write+0xaa/0x100
> > > [<ffffffff8109d2f0>] ? vprintk+0x30/0x30
> > > [<ffffffff811915f2>] do_readv_writev+0x1c2/0x270
> > > [<ffffffff8117899d>] ? kmem_cache_free+0x7d/0x1a0
> > > [<ffffffff81191729>] vfs_writev+0x39/0x50
> > > [<ffffffff8119240a>] SyS_writev+0x4a/0xd0
> > > [<ffffffff8158bc97>] entry_SYSCALL_64_fastpath+0x12/0x6a
> > >
> > > Currently in 4.4 the console_unlock() called by vprintk_emit() is with
> > > preemption disabled, so the cond_resched is not working, and soft lockup
> > > appear if it take too much time on writing data into every console.
> > >
> > > We found the upstream patch:
> > > commit 6b97a20d3a79 printk: set may_schedule for some of console_trylock() callers
> > >
> > > which should have addressed this issue, but not included in the latest 4.4.78 stable
> > > yet, is there any plan on backport it in future?
>
> returning back to the patch,
>
> there are two things related to it I can quickly think of:
>
> 1) the patch needs a fix-up commit 257ab443118bffc ("printk: Correctly
> handle preemption in console_unlock()")
>
> 2) it may affect users
> this is a bit weird... but, in fact, console_unlock() must always
> run with disabled preemption. otherwise, we schedule with the
> console_sem locked, which is risky and pointless. executing
> console_unlock() with preemption disabled is, obviously, dangerous,
> that's why consle_unlock() should stop doing the endless loop and
> instead must offload (after some time) the printing duty to another
> kthread/CPU.
>
> more closer to the point,
> we've got reports that in some cases due to additional points of
> scheduling in console_unlock() doing massive print outs (like showing
> backtraces of all tasks, or OOM dump) now takes more time (it really
> depends on the conditions).
>
>
> so the patch addresses some of trivial lockup cases and in general not
> that bad, but at the same time it's not a complete solution and it has
> some side effects.
Also note that the patch has an effect only when the kernel is built
with PREEMPT_COUNT enabled. Otherwise, printk() is not able to detect
preemtible context and skips the extra cond_resched().
The rest was explained by Sergey. In short, the proper solution is to
allow offloading from console_unlock(). Unfortunately, it is not easy
to do it a way that would be acceptable in all situations. But I hope
that we are getting close.
Best Regards,
Petr
prev parent reply other threads:[~2017-07-26 8:44 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <8cfee169-00eb-4b08-3440-ccf654a056aa@profitbricks.com>
2017-07-25 13:57 ` [ Linux 4.4 stable ] missing 'printk: set may_schedule for some of console_trylock() callers' Greg KH
2017-07-25 16:33 ` Sergey Senozhatsky
2017-07-26 8:44 ` Petr Mladek [this message]
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=20170726084435.GA3799@pathway.suse.cz \
--to=pmladek@suse.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=sergey.senozhatsky.work@gmail.com \
--cc=sergey.senozhatsky@gmail.com \
--cc=stable@vger.kernel.org \
--cc=yun.wang@profitbricks.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).