From: Frederic Weisbecker <frederic@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>,
"Paul E. McKenney" <paulmck@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Will Deacon <will@kernel.org>
Subject: Re: tick/sched: Make jiffies update quick check more robust
Date: Fri, 11 Dec 2020 22:28:47 +0100 [thread overview]
Message-ID: <20201211212847.GA595642@lothringen> (raw)
In-Reply-To: <87czzpc02w.fsf@nanos.tec.linutronix.de>
On Fri, Dec 04, 2020 at 11:55:19AM +0100, Thomas Gleixner wrote:
> The quick check in tick_do_update_jiffies64() whether jiffies need to be
> updated is not really correct under all circumstances and on all
> architectures, especially not on 32bit systems.
>
> The quick check does:
>
> if (now < READ_ONCE(tick_next_period))
> return;
>
> and the counterpart in the update is:
>
> WRITE_ONCE(tick_next_period, next_update_time);
>
> This has two problems:
>
> 1) On weakly ordered architectures there is no guarantee that the stores
> before the WRITE_ONCE() are visible which means that other CPUs can
> operate on a stale jiffies value.
>
> 2) On 32bit the store of tick_next_period which is an u64 is split into
> two 32bit stores. If the first 32bit store advances tick_next_period
> far out and the second 32bit store is delayed (virt, NMI ...) then
> jiffies will become stale until the second 32bit store happens.
>
> Address this by seperating the handling for 32bit and 64bit.
>
> On 64bit problem #1 is addressed by replacing READ_ONCE() / WRITE_ONCE()
> with smp_load_acquire() / smp_store_release().
>
> On 32bit problem #2 is addressed by protecting the quick check with the
> jiffies sequence counter. The load and stores can be plain because the
> sequence count mechanics provides the required barriers already.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Looks very good! Thanks!
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
next prev parent reply other threads:[~2020-12-11 22:34 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-04 10:55 tick/sched: Make jiffies update quick check more robust Thomas Gleixner
2020-12-07 9:59 ` Peter Zijlstra
2020-12-07 14:41 ` Thomas Gleixner
2020-12-08 11:16 ` Peter Zijlstra
2020-12-11 21:28 ` Frederic Weisbecker [this message]
2020-12-11 22:22 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
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=20201211212847.GA595642@lothringen \
--to=frederic@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=will@kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.