From: Frederic Weisbecker <fweisbec@gmail.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [GIT PULL] sched: Fix missing preemption opportunity
Date: Fri, 23 Jan 2015 16:07:34 +0100 [thread overview]
Message-ID: <20150123150730.GA16254@lerouge> (raw)
In-Reply-To: <20150123091353.GI2896@worktop.programming.kicks-ass.net>
On Fri, Jan 23, 2015 at 10:13:53AM +0100, Peter Zijlstra wrote:
>
> I picked up the patch; will drop it if Ingo also does ;-)
>
> On Thu, Jan 22, 2015 at 06:08:04PM +0100, Frederic Weisbecker wrote:
> > +++ b/kernel/sched/core.c
> > @@ -2877,6 +2877,21 @@ void __sched schedule_preempt_disabled(void)
> > preempt_disable();
> > }
> >
> > +static void preempt_schedule_common(void)
> > +{
> > + do {
> > + __preempt_count_add(PREEMPT_ACTIVE);
> > + __schedule();
> > + __preempt_count_sub(PREEMPT_ACTIVE);
> > +
> > + /*
> > + * Check again in case we missed a preemption opportunity
> > + * between schedule and now.
> > + */
> > + barrier();
>
> I do however wonder about this barrier() here; why do we think we need
> it?
>
> Is that because test_bit() it 'broken'? The bitops are typically atomic
> ops and atomic reads should be through a volatile cast (x86
> constant_test_bit doesn't seem to do this).
>
> Should we go audit and fix that?
I looked up with git blame and this was already there prior the first git commit v2.6.12
without appropriate explanation.
We must make sure that the PREEMPT_ACTIVE decrement is visible before we do the NEED_RESCHED
test or an interrupt could spuriously miss a preempt_schedule_irq() opportunity.
__preempt_count_sub() in asm-generic is an inline, so an implicit barrier(). Only x86
overwrites it yet and it does so through an inline as well.
And __preempt_count_ops() must really imply a barrier() anyway, anything else would
be insane (probably we should specify that in a comment somewhere). Although I see
that responsability is taken from non-underscored callers...
next prev parent reply other threads:[~2015-01-23 15:07 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-22 17:08 [GIT PULL] sched: Fix missing preemption opportunity Frederic Weisbecker
2015-01-23 9:13 ` Peter Zijlstra
2015-01-23 15:07 ` Frederic Weisbecker [this message]
2015-02-01 17:52 ` [tip:sched/core] " tip-bot for Frederic Weisbecker
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=20150123150730.GA16254@lerouge \
--to=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--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 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.