Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1626957

Re: [PATCH v5 1/4] printk/nmi: generic solution for safe printk in NMI

Path csiph.com!weretis.net!feeder4.news.weretis.net!news.mixmin.net!aioe.org!bofh.it!news.nic.it!robomod
From Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Newsgroups linux.kernel
Subject Re: [PATCH v5 1/4] printk/nmi: generic solution for safe printk in NMI
Date Thu, 20 Apr 2017 05:40:01 +0200
Message-ID <tyb6N-3Js-13@gated-at.bofh.it> (permalink)
References <rqlhn-8vU-5@gated-at.bofh.it> <rqlhn-8vU-3@gated-at.bofh.it> <ty1qO-6bq-33@gated-at.bofh.it>
X-Original-To Steven Rostedt <rostedt@goodmis.org>
Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=NJqQV0LcGDcEsCyJBhbKZ0WmO5np3Rzoh+FFfAyma2c=; b=IYGykPtqWwPau8p7V29c+Zj1NXP4bpPoa21ylv1m7aXwMPyPbLSBfBRfDlrhFyXynx 1l1AUKAB0mpdIWzgiEZrF/wro6mBdRKJmvdYxDh3pcrnXpYM2amIP9iseyAv7t2P46v8 aeVUEAF368gpzEQqcoBxyyxdXpFPnDCUJZZY2WVIhaN7juyDFU131v4ArqBM73bhbnjh 5mWmmASasUQWbfWEyzPB3loJLc8lZWz3+Zr6wbTeb17gGB9bwt7F+F+nqSRDhgdLal6D zs1jgkbtmN+jg5yIYpGRvRcUbZWz/jouHedJxYRMbMrMujr1nAP21ASP2qSpaJ3WPNPG e+Tg==
X-Google-Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=NJqQV0LcGDcEsCyJBhbKZ0WmO5np3Rzoh+FFfAyma2c=; b=c3l2xEoTv/QJKJoJfoNUp50JGp3sSgCTPhwHlM4wbO7v3LJWjmx0ZHQwBr/Ww9YNkj 2gGd6HbRPYT+6owHN0oDQInkk2n84kAPK3WRS4FINBnAsD+y8XEfN2P5DP3cjVa+jPEa +UQNyM6Zey5o7aB+KiA5XDPs/+LBnPSKpRpMdTcWRJG8yMO1ZjAKAr1rjaFHm3Kt/go5 Me6v9TZ2yRn27vq1xWcRDRPb4JEXO9440Fmhbj3+SFmEsUixBKVv1h+BG9lYmsri2E8g lppCdnQzkgcJLEAG0u05Y4YQhWy20KKBuZKtVBYe1oCg1CSCwU6yeV2VB1gM199kgqAk K9fA==
X-Gm-Message-State AN3rC/5r1wJDaNOvea8OvUQo4hU15Ww59HrD/dIq5G8GQWWxTRniimKi njrLg2400/OEsA==
X-Received by 10.84.222.129 with SMTP id x1mr7823486pls.44.1492659069384; Wed, 19 Apr 2017 20:31:09 -0700 (PDT)
MIME-Version 1.0
Content-Type text/plain; charset=us-ascii
Content-Disposition inline
User-Agent Mutt/1.8.2 (2017-04-18)
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 74
Organization linux.* mail to news gateway
X-Original-Cc Petr Mladek <pmladek@suse.com>, Andrew Morton <akpm@linux-foundation.org>, Peter Zijlstra <peterz@infradead.org>, Russell King <rmk+kernel@arm.linux.org.uk>, Daniel Thompson <daniel.thompson@linaro.org>, Jiri Kosina <jkosina@suse.com>, Ingo Molnar <mingo@redhat.com>, Thomas Gleixner <tglx@linutronix.de>, Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>, Chris Metcalf <cmetcalf@ezchip.com>, linux-kernel@vger.kernel.org, x86@kernel.org, linux-arm-kernel@lists.infradead.org, adi-buildroot-devel@lists.sourceforge.net, linux-cris-kernel@axis.com, linux-mips@linux-mips.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, Jan Kara <jack@suse.cz>, Ralf Baechle <ralf@linux-mips.org>, Benjamin Herrenschmidt <benh@kernel.crashing.org>, Martin Schwidefsky <schwidefsky@de.ibm.com>, David Miller <davem@davemloft.net>
X-Original-Date Thu, 20 Apr 2017 12:31:12 +0900
X-Original-Message-ID <20170420033112.GB542@jagdpanzerIV.localdomain>
X-Original-References <1461239325-22779-1-git-send-email-pmladek@suse.com> <1461239325-22779-2-git-send-email-pmladek@suse.com> <20170419131341.76bc7634@gandalf.local.home>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1626957

Show key headers only | View raw


Hello Steven,

On (04/19/17 13:13), Steven Rostedt wrote:
> > printk() takes some locks and could not be used a safe way in NMI context.
> 
> I just found a problem with this solution. It kills ftrace dumps from
> NMI context :-(
> 
> [ 1295.168495]    <...>-67423  10dNh1 382171111us : do_raw_spin_lock <-_raw_spin_lock
> [ 1295.168495]    <...>-67423  10dNh1 382171111us : sched_stat_runtime: comm=cc1 pid=67423 runtime=96858 [ns] vruntime=11924198270 [ns]
> [ 1295.168496]    <...>-67423  10dNh1 382171111us : lock_acquire: ffffffff81c5c940 read rcu_read_lock
> [ 1295.168497]
> [ 1295.168498] Lost 4890096 message(s)!
> [ 1296.805063] ---[ end Kernel panic - not syncing: Hard LOCKUP
> [ 1296.811553] unchecked MSR access error: WRMSR to 0x83f (tried to write 0x00000000000000f6) at rIP: 0xffffffff81046fc7 (native_apic_msr_write+0x27/0x40)
> [ 1296.811553] Call Trace:
> [ 1296.811553]  <NMI>
> 
> I was hoping to see a cause of a hard lockup by enabling
> ftrace_dump_on_oops. But as NMIs now have a very small buffer that
> gets flushed, we need to find a new way to print out the full ftrace
> buffer over serial.
> 
> Thoughts?

hmmm... a really tough one.

well, someone has to say this:
 the simplest thing is to have a bigger PRINTK_SAFE_LOG_BUF_SHIFT value :)


just thinking (well, sort of) out loud. the problem is that we can't tell if
we already hold any printk related locks ("printk related locks" is not even
well defined term). so printk from NMI can deadlock or it can be OK, we
never know. but looking and vprintk_emit() and console_unlock() it seems that
we have some sort of a hint now, which is this_cpu_read(printk_context) - if
we are not in printk_safe context then we can say that _probably_ (and that's
a Russian roulette) doing "normal" printk() will work. that is a *very-very*
risky (and admittedly dumb) thing to assume, so we will move in a slightly
different direction. checking this_cpu_read(printk_context) only assures us
that we don't hold `logbuf_lock' on this CPU. and that is sort of something,
at least we can be sure that doing printk_deferred() from this CPU is safe.
printk_deferred() means that your NMI messages will end up in the logbuf,
which is a) bigger in size than per-CPU buffer and b) some other CPU can
immediately print those messages (hopefully).

we also switch to printk_safe mode for call_console_drivers() in
console_unlock(). but we can't make any solid assumptions there - serial
console lock can already be acquired, we don't have any markers for that.
it may be reasonable to assume that if we are not in printk_safe mode on
this CPU then serial console is not locked from this CPU, but there is
nothing that can assure us.

so at the moment what I can think of is something like

  -- check this_cpu_read(printk_context) in NMI prink

	-- if we are NOT in printk_safe on this CPU, then do printk_deferred()
	   and bypass `nmi_print_seq' buffer

	-- if we are in printk_safe
	  -- well... bad luck... have a bigger buffer.

		.... or there are some other options here, but I'd prefer
		not to list them, because people will hate me :)


so this shifts the purpose of `nmi_print_seq' buffer: use it only when
you can't use logbuf. otherwise, do printk_deferred().


need to think more.

	-ss

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: [PATCH v5 1/4] printk/nmi: generic solution for safe printk in  NMI Steven Rostedt <rostedt@goodmis.org> - 2017-04-19 19:20 +0200
  Re: [PATCH v5 1/4] printk/nmi: generic solution for safe printk in  NMI Peter Zijlstra <peterz@infradead.org> - 2017-04-19 19:30 +0200
  Re: [PATCH v5 1/4] printk/nmi: generic solution for safe printk in  NMI Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> - 2017-04-20 05:40 +0200
    Re: [PATCH v5 1/4] printk/nmi: generic solution for safe printk in  NMI Petr Mladek <pmladek@suse.com> - 2017-04-20 15:20 +0200
      Re: [PATCH v5 1/4] printk/nmi: generic solution for safe printk in  NMI Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> - 2017-04-21 04:00 +0200
        Re: [PATCH v5 1/4] printk/nmi: generic solution for safe printk in  NMI Petr Mladek <pmladek@suse.com> - 2017-04-21 14:10 +0200
          Re: [PATCH v5 1/4] printk/nmi: generic solution for safe printk in  NMI Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> - 2017-04-24 04:20 +0200

csiph-web