On 2021-07-21, Petr Mladek <pmla...@suse.com> wrote: > On Wed 2021-07-21 14:52:15, John Ogness wrote: >> On 2021-07-21, Petr Mladek <pmla...@suse.com> wrote: >> >> --- a/kernel/trace/trace.c >> >> +++ b/kernel/trace/trace.c >> >> @@ -9647,7 +9647,7 @@ void ftrace_dump(enum ftrace_dump_mode >> >> oops_dump_mode) >> >> tracing_off(); >> >> >> >> local_irq_save(flags); >> >> - printk_nmi_direct_enter(); >> >> + printk_deferred_enter(); >> > >> > I would prefer to do not manipulate the printk context here anymore, >> > as it was done in v3. >> > >> > printk_nmi_direct_enter() was added here by the commit the commit >> > 03fc7f9c99c1e7ae2925d4 ("printk/nmi: Prevent deadlock when >> > accessing the main log buffer in NMI"). It was _not_ about console >> > handling. The reason was to modify the default behavior under NMI >> > and store the messages directly into the main log buffer. >> > >> > When I think about it. The original fix was not correct. We should have >> > modified the context only when ftrace_dump() was really called under NMI: >> > >> > if (in_nmi()) >> > printk_nmi_direct_enter(); >> > >> > By other words. We should try to show the messages on the console >> > when ftrace_dump()/panic() is not called from NMI. It will help >> > to see all messages even when the ftrace buffers are bigger >> > than printk() ones. >> > >> > And we do not need any special handling here for NMI. vprintk() >> > in printk/printk_safe.c will do the right thing for us. >> >> Agreed. We need to mention this behavior change in the commit >> message. Perhaps this as the commit message: >> >> All NMI contexts are handled the same as the safe context: store the >> message and defer printing. There is no need to have special NMI >> context tracking for this. Using in_nmi() is enough. >> >> There are several parts of the kernel that are manually calling into >> the printk NMI context tracking in order to cause general printk >> deferred printing: >> >> arch/arm/kernel/smp.c >> arch/powerpc/kexec/crash.c >> kernel/trace/trace.c >> >> For arm/kernel/smp.c and powerpc/kexec/crash.c, provide a new >> function pair printk_deferred_enter/exit that explicitly achieves the >> same objective. >> >> For ftrace, remove general printk deferring. This general deferrment >> was added in commit 03fc7f9c99c1 ("printk/nmi: Prevent deadlock when >> accessing the main log buffer in NMI"), but really should have only >> been deferred when in NMI context. Since vprintk() now checks for >> NMI context when deciding to defer, ftrace does not need any special >> handling. > > I would make it less focused on the deferring part and try to explain > the original purpose here, something like: > > "For ftrace, remove the printk context manipulation completely. It was > added in commit 03fc7f9c99c1 ("printk/nmi: Prevent deadlock when > accessing the main log buffer in NMI"). The purpose was to enforce > storing messages directly into the ring buffer even in NMI context. > It really should have only modified the behavior in NMI context. > There is no need for a special behavior any longer. All messages are > always stored directly now. The console deferring is handled > transparently in vprintk()."
Your wording is OK for me. John Ogness