From: Petr Mladek <pmladek@suse.com>
To: John Ogness <john.ogness@linutronix.de>
Cc: Andrea Parri <parri.andrea@gmail.com>,
Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
Paul McKenney <paulmck@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
Steven Rostedt <rostedt@goodmis.org>,
Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: pending output optimization: was: [PATCH v3 3/3] printk: use the lockless ringbuffer
Date: Thu, 25 Jun 2020 17:17:41 +0200 [thread overview]
Message-ID: <20200625151741.GH8444@alley> (raw)
In-Reply-To: <20200618144919.9806-4-john.ogness@linutronix.de>
On Thu 2020-06-18 16:55:19, John Ogness wrote:
> Replace the existing ringbuffer usage and implementation with
> lockless ringbuffer usage. Even though the new ringbuffer does not
> require locking, all existing locking is left in place. Therefore,
> this change is purely replacing the underlining ringbuffer.
>
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -2009,9 +2056,9 @@ asmlinkage int vprintk_emit(int facility, int level,
>
> /* This stops the holder of console_sem just where we want him */
> logbuf_lock_irqsave(flags);
> - curr_log_seq = log_next_seq;
> + pending_output = !prb_read_valid(prb, console_seq, NULL);
> printed_len = vprintk_store(facility, level, dict, dictlen, fmt, args);
> - pending_output = (curr_log_seq != log_next_seq);
> + pending_output &= prb_read_valid(prb, console_seq, NULL);
This will stop working after we remove the locks. Consoles will be
able to handle messages while the new one is being added. There will
be no gurantee that someone is still hadling the previously pending output.
Please, always handle consoles when printed_len is not zero!!!
The pending output was just an optimization added recently. Nobody
requested it. It was just an idea that made sense.
This new code is a ticking bomb. It is far from obvious that it _must_
get removed after we remove the lock. And it will be hard to debug
why the consoles are sometimes not handled.
> logbuf_unlock_irqrestore(flags);
>
> /* If called from the scheduler, we can not call up(). */
Best Regards,
Petr
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2020-06-25 15:17 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-18 14:49 [PATCH v3 0/3] printk: replace ringbuffer John Ogness
2020-06-18 14:49 ` [PATCH v3 1/3] crash: add VMCOREINFO macro to define offset in a struct declared by typedef John Ogness
2020-06-24 8:49 ` Petr Mladek
2020-07-04 9:30 ` Baoquan He
2020-06-18 14:49 ` [PATCH v3 2/3] printk: add lockless ringbuffer John Ogness
2020-06-29 15:32 ` Paul E. McKenney
2020-07-02 8:35 ` Petr Mladek
2020-06-18 14:49 ` [PATCH v3 3/3] printk: use the " John Ogness
2020-06-18 18:23 ` kernel test robot
2020-06-18 18:23 ` [RFC PATCH] printk: _printk_rb_static_dict can be static kernel test robot
2020-06-19 6:49 ` John Ogness
2020-06-19 12:29 ` Steven Rostedt
2020-06-25 8:16 ` truncate dict: was: Re: [PATCH v3 3/3] printk: use the lockless ringbuffer Petr Mladek
2020-06-26 13:48 ` John Ogness
2020-06-25 8:28 ` buffer allocation: was: " Petr Mladek
2020-06-26 15:02 ` John Ogness
2020-06-29 14:04 ` Petr Mladek
2020-06-29 21:57 ` John Ogness
2020-07-02 13:27 ` Petr Mladek
2020-06-25 12:09 ` record_printk_text tricks: " Petr Mladek
2020-06-25 15:25 ` Petr Mladek
2020-06-26 23:25 ` John Ogness
2020-06-25 15:17 ` Petr Mladek [this message]
2020-07-01 19:58 ` pending output optimization: " John Ogness
2020-06-25 15:20 ` syslog size unread: " Petr Mladek
2020-06-29 21:51 ` John Ogness
2020-07-02 8:25 ` lijiang
2020-07-02 9:02 ` John Ogness
2020-07-02 9:43 ` lijiang
2020-07-02 13:31 ` Petr Mladek
2020-07-04 1:12 ` lijiang
2020-07-03 11:54 ` John Ogness
2020-07-08 5:50 ` lijiang
2020-06-25 7:19 ` [PATCH v3 0/3] printk: replace ringbuffer Dave Young
2020-06-25 14:13 ` John Ogness
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=20200625151741.GH8444@alley \
--to=pmladek@suse.com \
--cc=gregkh@linuxfoundation.org \
--cc=john.ogness@linutronix.de \
--cc=kexec@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=parri.andrea@gmail.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=sergey.senozhatsky.work@gmail.com \
--cc=sergey.senozhatsky@gmail.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/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