From: Stefano Stabellini <sstabellini@kernel.org>
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <julien@xen.org>,
iwj@xenproject.org, sstabellini@kernel.org,
ash.j.wilding@gmail.com, Julien Grall <jgrall@amazon.com>,
George Dunlap <george.dunlap@citrix.com>,
Dario Faggioli <dfaggioli@suse.com>,
xen-devel@lists.xenproject.org
Subject: Re: [PATCH for-4.15] xen/sched: Add missing memory barrier in vcpu_block()
Date: Mon, 22 Feb 2021 12:09:05 -0800 (PST) [thread overview]
Message-ID: <alpine.DEB.2.21.2102221208050.3234@sstabellini-ThinkPad-T480s> (raw)
In-Reply-To: <744ca7e5-328d-0c5f-bc52-e4c0e78dad97@suse.com>
[-- Attachment #1: Type: text/plain, Size: 2525 bytes --]
On Mon, 22 Feb 2021, Jan Beulich wrote:
> On 20.02.2021 20:47, Julien Grall wrote:
> > From: Julien Grall <jgrall@amazon.com>
> >
> > The comment in vcpu_block() states that the events should be checked
> > /after/ blocking to avoids wakeup waiting race. However, from a generic
> > perspective, set_bit() doesn't prevent re-ordering. So the following
> > could happen:
> >
> > CPU0 (blocking vCPU A) | CPU1 ( unblock vCPU A)
> > |
> > A <- read local events |
> > | set local events
> > | test_and_clear_bit(_VPF_blocked)
> > | -> Bail out as the bit if not set
> > |
> > set_bit(_VFP_blocked) |
> > |
> > check A |
> >
> > The variable A will be 0 and therefore the vCPU will be blocked when it
> > should continue running.
> >
> > vcpu_block() is now gaining an smp_mb__after_atomic() to prevent the CPU
> > to read any information about local events before the flag _VPF_blocked
> > is set.
> >
> > Signed-off-by: Julien Grall <jgrall@amazon.com>
>
> Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
> > This is a follow-up of the discussion that started in 2019 (see [1])
> > regarding a possible race between do_poll()/vcpu_unblock() and the wake
> > up path.
> >
> > I haven't yet fully thought about the potential race in do_poll(). If
> > there is, then this would likely want to be fixed in a separate patch.
> >
> > On x86, the current code is safe because set_bit() is fully ordered. SO
> > the problem is Arm (and potentially any new architectures).
> >
> > I couldn't convince myself whether the Arm implementation of
> > local_events_need_delivery() contains enough barrier to prevent the
> > re-ordering. However, I don't think we want to play with devil here as
> > the function may be optimized in the future.
>
> In fact I think this ...
>
> > --- a/xen/common/sched/core.c
> > +++ b/xen/common/sched/core.c
> > @@ -1418,6 +1418,8 @@ void vcpu_block(void)
> >
> > set_bit(_VPF_blocked, &v->pause_flags);
> >
> > + smp_mb__after_atomic();
> > +
>
> ... pattern should be looked for throughout the codebase, and barriers
> be added unless it can be proven none is needed.
And in that case it would be best to add an in-code comment to explain
why the barrier is not needed
next prev parent reply other threads:[~2021-02-22 20:09 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-20 19:47 [PATCH for-4.15] xen/sched: Add missing memory barrier in vcpu_block() Julien Grall
2021-02-22 11:11 ` Ian Jackson
2021-02-22 14:26 ` Jan Beulich
2021-02-22 20:09 ` Stefano Stabellini [this message]
2021-02-22 20:12 ` Julien Grall
2021-02-23 1:22 ` Stefano Stabellini
2021-02-23 7:00 ` Jan Beulich
2021-02-23 9:04 ` Julien Grall
2021-02-23 8:45 ` Dario Faggioli
2021-02-23 13:24 ` Ash Wilding
2021-02-25 14:01 ` Julien Grall
2021-02-25 21:35 ` Stefano Stabellini
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=alpine.DEB.2.21.2102221208050.3234@sstabellini-ThinkPad-T480s \
--to=sstabellini@kernel.org \
--cc=ash.j.wilding@gmail.com \
--cc=dfaggioli@suse.com \
--cc=george.dunlap@citrix.com \
--cc=iwj@xenproject.org \
--cc=jbeulich@suse.com \
--cc=jgrall@amazon.com \
--cc=julien@xen.org \
--cc=xen-devel@lists.xenproject.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;
as well as URLs for NNTP newsgroup(s).