Re: [PATCH printk v3 5/6] printk: introduce console_get_next_message() and console_message

From: Petr Mladek
Date: Tue Jan 03 2023 - 09:05:11 EST


On Thu 2022-12-22 16:47:39, John Ogness wrote:
> On 2022-12-21, John Ogness <john.ogness@xxxxxxxxxxxxx> wrote:
> > +static bool console_emit_next_record(struct console *con, bool *handover, int cookie)
> > +{
> > + bool is_extended = console_srcu_read_flags(con) & CON_EXTENDED;
> > + static char dropped_text[DROPPED_TEXT_MAX];
> > + static struct console_buffers cbufs;
> > + static struct console_message cmsg = {
> > + .cbufs = &cbufs,
> > + };
>
> @cmsg should not be static. The whole point of the console_message
> wrapper struct is so that it can sit on the stack.

Well, it might actually be better to keep it static for now.
It always points to static struct console_buffers cbufs anyway.

It would make sense to have it on stack only when it uses
different buffers.

Which brings the question. Does it makes sense to use
the same buffers by different struct console_message?
Will it be safe in any situation?

I did not want to complicate it yesterday. I think that
I have already proposed this. But this brings back
the question whether it makes sense to have two structures
at all.

I still think that it would be easier and even more safe
to put everything into struct console_message.

I mean to have:

struct console_message {
char buf[CONSOLE_EXT_LOG_MAX];
char scratch_buf[LOG_LINE_MAX];
unsigned int len;
u64 seq;
unsigned long dropped;
};

Best Regards,
Petr