<html><head></head><body class="ApplePlainTextBody" dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><blockquote type="cite">On Nov 27, 2015, at 19:09, Petr Mladek <pmladek@suse.com> 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 <pmladek@suse.com><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="Apple-tab-span" style="white-space:pre">      </span>atomic_t<span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>len;<span class="Apple-tab-span" style="white-space:pre">        </span>/* length of written data */<br><span class="Apple-tab-span" style="white-space:pre">      </span>struct irq_work<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span>work;<span class="Apple-tab-span" style="white-space:pre">       </span>/* IRQ work that flushes the buffer */<br>-<span class="Apple-tab-span" style="white-space:pre">   </span>unsigned char<span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>buffer[PAGE_SIZE - sizeof(atomic_t) -<br>+<span class="Apple-tab-span" style="white-space:pre">    </span>unsigned char<span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>buffer[2 * PAGE_SIZE - sizeof(atomic_t) -<br><span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>       sizeof(struct irq_work)];<br>};<br><br></blockquote><br>why not define like this:<br><br>union {<br>struct {atomic_t<span class="Apple-tab-span" style="white-space:pre">   </span><span class="Apple-tab-span" style="white-space:pre">    </span>len;<span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">  </span>struct irq_work<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span>work;<br>}<br>unsigned char<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="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>