Messages in this thread | | | Date | Tue, 28 May 2019 17:03:45 +0200 | From | Petr Mladek <> | Subject | Re: [RFC] printk/sysrq: Don't play with console_loglevel |
| |
On Tue 2019-05-28 23:21:17, Tetsuo Handa wrote: > On 2019/05/28 22:42, Petr Mladek wrote: > >> Ahh.. OK, now I sort of remember why I gave up on this idea (see [1] > >> at the bottom, when it comes to uv_nmi_dump_state()) - printk_NMI and > >> printk-safe redirections. > >> > >> NMI > >> loglevel = NEW > >> printk -> printk_safe_nmi > >> loglevel = OLD > >> > >> iret > >> > >> IRQ > >> flush printk_safe_nmi -> printk > >> // At this point we don't remember about > >> // loglevel manipulation anymore > >> iret > > > > printk_safe buffer preserves KERN_* headers. It should be > > possible to insert KERN_UNSUPPRESSED there. > > But is context dependent buffer large enough to hold SysRq-t output? > I think that only main logbuf can become large enough to hold SysRq-t output.
SysRq messages are stored directly into the main log buffer.
The limited per-CPU buffers are needed only in printk_safe and NMI context. We discussed it here because KERN_UNSUPPRESSED allows to pass the information even from this context.
> We can add KERN_UNSUPPRESSED to SysRq's header line. But I don't think > that we can automatically add KERN_UNSUPPRESSED to SysRq's body lines > based on some context information. If we want to avoid manipulating > console_loglevel, we need to think about how to make sure that > KERN_UNSUPPRESSED is added to all lines from such context without > overflowing capacity of that buffer.
We could set this context in printk_context per-CPU variable.
Then we could easily add the set per-message flag in vprintk_store() for the normal/atomic context. And we could store an extra KERN_UNSUPPRESSED in printk_safe_log_store() for printk_safe and NMI context.
Best Regards, Petr
| |