public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: John Ogness <john.ogness@linutronix.de>
To: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org
Subject: Re: synchronization model: was: Re: [PATCH printk-rework 09/14] printk: introduce a kmsg_dump iterator
Date: Wed, 24 Feb 2021 13:27:42 +0100	[thread overview]
Message-ID: <87eeh51wht.fsf@jogness.linutronix.de> (raw)
In-Reply-To: <YC/79JPVKcVaSEEH@alley>

On 2021-02-19, Petr Mladek <pmladek@suse.com> wrote:
> This is likely beyond the scope of this patchset.

It would be beyond the scope of this patchset because it is not related
to logbuf_lock removal.

> I am still scratching my head about the synchronization if these dumpers.
>
> There is the "active" flag. It has been introduced by the commit
> e2ae715d66bf4becfb ("kmsg - kmsg_dump() use iterator to receive log
> buffer content"). I do not see any explanation there.
>
> It might prevent some misuse of the API. But the synchronization
> model is not much clear:
>
> 	+ cur_seq and next_seq might be manipulated by
> 	  kmsg_dump_rewind() even when the flag is not set.
>
> 	+ It is possible to use the same dumper more times in parallel.
> 	  The API will fill the provided buffer of all callers
> 	  as long as the active flag is set.
>
> 	+ The "active" flag does not synchronize other operations with
> 	  the provided buffer. The "dump" callback is responsible
> 	  to provide some synchronization on its own.
>
> In fact, it is not much clear how struct kmsg_dumper_iter, struct kmsg_dumper,
> and the used buffers are connected with each other and synchronized.

With this series applied, there is no connection between them. And
actually you have made me realize that the iterator should be named
"kmsg_dump_iter" instead. I will change that for v3.

> It might some sense to have the iterator in a separate structure.
> But the only safe scenario seems to be when all these three things
> (both structures and the buffer) are connected together and
> synchronized by the same lock. Also the "active" flag does not look
> much helpful and can be removed.

The @active flag is useless. It should be removed.

We have kmsg_dump_get_line(), kmsg_dump_get_buffer(), kmsg_dump_rewind()
as an in-kernel interface to allow retrieving the kernel buffer
contents. To use these interfaces, the caller only needs to have an
iterator that is initialized using kmsg_dump_rewind(). These functions
can be (and are) used, regardless if a dumper has been registered. And I
think that is OK.

The used buffers (like the iterator) are local to the caller. So there
is no need for the kmsg_dump_*() functions to be concerned about any
synchronization there.

Then we have kmsg_dump_register() and kmsg_dump_unregister() to allow
for registration of a dump() callback, to be called when the kernel does
panic/oops/emergency/shutdown. Presumably the registered callback would
use the kmsg_dump_*() functions to access the kernel buffer. Again, no
need for kmsg_dump_*() functions to be concerned about synchronization
because the buffers are provided by the callbacks.

> As I said, this is likely beyond this patchset. This patch does more
> or less just a refactoring and helps to understand the dependencies.

Aside from removing the useless @active flag, I am not sure what else
you would want to change. Perhaps just fixup the comments/documentation
to clarify these interfaces and what their purpose is.

John Ogness

  reply	other threads:[~2021-02-24 12:28 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-18  8:18 [PATCH printk-rework 00/14] printk: remove logbuf_lock John Ogness
2021-02-18  8:18 ` [PATCH printk-rework 01/14] printk: limit second loop of syslog_print_all John Ogness
2021-02-18 16:15   ` Petr Mladek
2021-02-18  8:18 ` [PATCH printk-rework 02/14] printk: kmsg_dump: remove unused fields John Ogness
2021-02-18 16:18   ` Petr Mladek
2021-02-18  8:18 ` [PATCH printk-rework 03/14] printk: refactor kmsg_dump_get_buffer() John Ogness
2021-02-18  8:18 ` [PATCH printk-rework 04/14] printk: consolidate kmsg_dump_get_buffer/syslog_print_all code John Ogness
2021-02-19 12:28   ` Petr Mladek
2021-02-18  8:18 ` [PATCH printk-rework 05/14] printk: introduce CONSOLE_LOG_MAX for improved multi-line support John Ogness
2021-02-19 12:44   ` Petr Mladek
2021-02-18  8:18 ` [PATCH printk-rework 06/14] printk: use seqcount_latch for clear_seq John Ogness
2021-02-18  8:18 ` [PATCH printk-rework 07/14] printk: use atomic64_t for devkmsg_user.seq John Ogness
2021-02-19 12:59   ` Petr Mladek
2021-02-18  8:18 ` [PATCH printk-rework 08/14] printk: add syslog_lock John Ogness
2021-02-19 13:30   ` Petr Mladek
2021-02-19 14:45     ` John Ogness
2021-02-19 16:33       ` John Ogness
2021-02-21 21:39         ` Helge Deller
2021-02-22 16:28           ` Petr Mladek
2021-02-23 12:22             ` Helge Deller
2021-02-23 14:23               ` Petr Mladek
2021-02-23 14:45                 ` Helge Deller
2021-02-22 16:05       ` Petr Mladek
2021-02-22 16:43         ` John Ogness
2021-02-23 14:38           ` Petr Mladek
2021-02-18  8:18 ` [PATCH printk-rework 09/14] printk: introduce a kmsg_dump iterator John Ogness
2021-02-19 15:56   ` Petr Mladek
2021-02-19 16:50   ` Michael Kelley
2021-02-19 17:57   ` synchronization model: was: " Petr Mladek
2021-02-24 12:27     ` John Ogness [this message]
2021-02-24 15:40       ` John Ogness
2021-02-25 12:33       ` Petr Mladek
2021-02-26  8:36         ` John Ogness
2021-02-26  9:48           ` Petr Mladek
2021-02-18  8:18 ` [PATCH printk-rework 10/14] um: synchronize kmsg_dumper John Ogness
2021-02-18  8:18 ` [PATCH printk-rework 11/14] printk: remove logbuf_lock John Ogness
2021-02-23 11:44   ` Petr Mladek
2021-02-18  8:18 ` [PATCH printk-rework 12/14] printk: kmsg_dump: remove _nolock() variants John Ogness
2021-02-23 11:51   ` Petr Mladek
2021-02-18  8:18 ` [PATCH printk-rework 13/14] printk: kmsg_dump: use kmsg_dump_rewind John Ogness
2021-02-23 11:53   ` Petr Mladek
2021-02-18  8:18 ` [PATCH printk-rework 14/14] printk: console: remove unnecessary safe buffer usage John Ogness
2021-02-23 12:55   ` Petr Mladek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87eeh51wht.fsf@jogness.linutronix.de \
    --to=john.ogness@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=sergey.senozhatsky.work@gmail.com \
    --cc=sergey.senozhatsky@gmail.com \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox