[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 06/13] xen/arm: Add ARCH_WORKAROUND_2 support for guests
On Thu, 24 May 2018, Julien Grall wrote: > Hi Stefano, > > On 24/05/18 01:40, Stefano Stabellini wrote: > > On Wed, 23 May 2018, Stefano Stabellini wrote: > > > On Tue, 22 May 2018, Julien Grall wrote: > > > > In order to offer ARCH_WORKAROUND_2 support to guests, we need to track > > > > the > > > > state of the workaround per-vCPU. The field 'pad' in cpu_info is now > > > > repurposed to store flags easily accessible in assembly. > > > > > > > > As the hypervisor will always run with the workaround enabled, we may > > > > need to enable (on guest exit) or disable (on guest entry) the > > > > workaround. > > > > > > > > A follow-up patch will add fastpath for the workaround for arm64 guests. > > > > > > > > This is part of XSA-263. > > > > > > > > Signed-off-by: Julien Grall <julien.grall@xxxxxxx> > > > > --- > > > > xen/arch/arm/domain.c | 8 ++++++++ > > > > xen/arch/arm/traps.c | 20 ++++++++++++++++++++ > > > > xen/arch/arm/vsmc.c | 37 > > > > +++++++++++++++++++++++++++++++++++++ > > > > xen/include/asm-arm/current.h | 6 +++++- > > > > 4 files changed, 70 insertions(+), 1 deletion(-) > > > > > > > > diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c > > > > index e7b33e92fb..9168195a9c 100644 > > > > --- a/xen/arch/arm/domain.c > > > > +++ b/xen/arch/arm/domain.c > > > > @@ -21,6 +21,7 @@ > > > > #include <xen/wait.h> > > > > #include <asm/alternative.h> > > > > +#include <asm/cpuerrata.h> > > > > #include <asm/cpufeature.h> > > > > #include <asm/current.h> > > > > #include <asm/event.h> > > > > @@ -575,6 +576,13 @@ int vcpu_initialise(struct vcpu *v) > > > > if ( (rc = vcpu_vtimer_init(v)) != 0 ) > > > > goto fail; > > > > + /* > > > > + * The workaround 2 (i.e SSBD mitigation) is enabled by default if > > > > + * supported. > > > > + */ > > > > + if ( get_ssbd_state() == ARM_SSBD_RUNTIME ) > > > > + v->arch.cpu_info->flags |= CPUINFO_WORKAROUND_2_FLAG; > > > > + > > > > return rc; > > > > fail: > > > > diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c > > > > index 5c18e918b0..020b0b8eef 100644 > > > > --- a/xen/arch/arm/traps.c > > > > +++ b/xen/arch/arm/traps.c > > > > @@ -2011,10 +2011,23 @@ inject_abt: > > > > inject_iabt_exception(regs, gva, hsr.len); > > > > } > > > > +static inline bool needs_ssbd_flip(struct vcpu *v) > > > > +{ > > > > + if ( !check_workaround_ssbd() ) > > > > + return false; > > > > > > Why not check on get_ssbd_state() == ARM_SSBD_RUNTIME? > > get_ssbd_state() would introduce an overhead for each entry/exit even on > platform not affected. check_workaround_ssbd() remove this overhead by using > an alternative. Ah yes, great idea. > > I am confused on > > > when is the right time to use the cpu capability check > > > (check_workaround_ssbd), when is the right time to call get_ssbd_state() > > > and when is the right time to call cpu_require_ssbd_mitigation(). > > See my answer in the previous patches. I understand now, I didn't realize we wanted to go into the details of improving big.LITTLE scenarios with different erratas on the differnt CPUs. > > > > > > > > > > + return !((v->arch.cpu_info->flags & CPUINFO_WORKAROUND_2_FLAG) && > > > > + cpu_require_ssbd_mitigation()); > > > > > > It looks like this won't do as intended when v->arch.cpu_info->flags = 0 > > > and cpu_require_ssbd_mitigation() returns false, am I right? > > > > > > Maybe needs_ssbd_flip() should be implemented as follows: > > > > > > return get_ssbd_state() == ARM_SSBD_RUNTIME && > > > !(v->arch.cpu_info->flags & CPUINFO_WORKAROUND_2_FLAG) > > > > With the intention of supporting systems where not all CPUs need/have > > the workaround, then it should be: > > > > return cpu_require_ssbd_mitigation() && > > !(v->arch.cpu_info->flags & CPUINFO_WORKAROUND_2_FLAG) > > Yes, I did the exact same error I reported to Marc on the KVM side :/. I will > update the patch. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |