|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen/arm: Ensure the vCPU context is seen before clearing the _VPF_down
On Fri, 26 Feb 2021, Julien Grall wrote:
> From: Julien Grall <jgrall@xxxxxxxxxx>
>
> A vCPU can get scheduled as soon as _VPF_down is cleared. As there is
> currently not ordering guarantee in arch_set_info_guest(), it may be
> possible that flag can be observed cleared before the new values of vCPU
> registers are observed.
>
> Add an smp_mb() before the flag is cleared to prevent re-ordering.
>
> Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx>
>
> ---
>
> Barriers should work in pair. However, I am not entirely sure whether to
> put the other half. Maybe at the beginning of context_switch_to()?
It should be right after VGCF_online is set or cleared, right? So it
would be:
xen/arch/arm/domctl.c:arch_get_info_guest
xen/arch/arm/vpsci.c:do_common_cpu_on
But I think it is impossible that either of them get called at the same
time as arch_set_info_guest, which makes me wonder if we actually need
the barrier...
> The issues described here is also quite theoritical because there are
> hundreds of instructions executed between the time a vCPU is seen
> runnable and scheduled. But better be safe than sorry :).
> ---
> xen/arch/arm/domain.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
> index bdd3d3e5b5d5..2b705e66be81 100644
> --- a/xen/arch/arm/domain.c
> +++ b/xen/arch/arm/domain.c
> @@ -914,7 +914,14 @@ int arch_set_info_guest(
> v->is_initialised = 1;
>
> if ( ctxt->flags & VGCF_online )
> + {
> + /*
> + * The vCPU can be scheduled as soon as _VPF_down is cleared.
> + * So clear the bit *after* the context was loaded.
> + */
> + smp_mb();
> clear_bit(_VPF_down, &v->pause_flags);
> + }
> else
> set_bit(_VPF_down, &v->pause_flags);
>
> --
> 2.17.1
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |