Thread (28 messages) 28 messages, 9 authors, 2016-03-18

Re: [PATCH v2 5/5] printk/nmi: Increase the size of the temporary buffer

From: yalin wang <hidden>
Date: 2015-11-30 16:40:14

<html><head></head><body class=3D"ApplePlainTextBody" dir=3D"auto" =
style=3D"word-wrap: break-word; -webkit-nbsp-mode: space; =
-webkit-line-break: after-white-space;"><br><blockquote type=3D"cite">On =
Nov 27, 2015, at 19:09, Petr Mladek &lt;pmladek@suse.com&gt; =
wrote:<br><br>Testing has shown that the backtrace sometimes does not =
fit<br>into the 4kB temporary buffer that is used in NMI =
context.<br><br>The warnings are gone when I double the temporary buffer =
size.<br><br>Note that this problem existed even in the =
x86-specific<br>implementation that was added by the commit =
a9edc8809328<br>("x86/nmi: Perform a safe NMI stack trace on all =
CPUs").<br>Nobody noticed it because it did not print any =
warnings.<br><br>Signed-off-by: Petr Mladek =
&lt;pmladek@suse.com&gt;<br>---<br>kernel/printk/nmi.c | 2 +-<br>1 file =
changed, 1 insertion(+), 1 deletion(-)<br><br>diff --git =
a/kernel/printk/nmi.c b/kernel/printk/nmi.c<br>index =
8af1e4016719..6111644d5f01 100644<br>--- a/kernel/printk/nmi.c<br>+++ =
b/kernel/printk/nmi.c<br>@@ -42,7 +42,7 @@ atomic_t =
nmi_message_lost;<br>struct nmi_seq_buf {<br><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>atomic_t<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>len;<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>/* length of written data */<br><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>struct irq_work<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>work;<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>/* IRQ work that flushes the buffer */<br>-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>unsigned =
char<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>buffer[PAGE_SIZE - sizeof(atomic_t) -<br>+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>unsigned =
char<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>buffer[2 * PAGE_SIZE - sizeof(atomic_t) -<br><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(struct =
irq_work)];<br>};<br><br></blockquote><br>why not define like =
this:<br><br>union {<br>struct {atomic_t<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>len;<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><br><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>struct irq_work<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>work;<br>}<br>unsigned char<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>buffer[PAGE_SIZE * 2] =
;<br>}<br><br>we can make sure the union is 2 PAGE_SIZE =
.<br><br>Thanks<br><br></body></html>=
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help