On 04/12/15 12:03, Pavel Fedin wrote: > On ARM64 register index of 31 corresponds to both zero register and SP. > However, all memory access instructions, use ZR as transfer register. SP > is used only as a base register in indirect memory addressing, or by > register-register arithmetics, which cannot be trapped here. > > Correct emulation is achieved by introducing new register accessor > functions, which can do special handling for reg_num == 31. These new > accessors intentionally do not rely on old vcpu_reg() on ARM64, because > it is to be removed. Since the affected code is shared by both ARM > flavours, implementations of these accessors are also added to ARM32 code. > > This patch fixes setting MMIO register to a random value (actually SP) > instead of zero by something like: > > *((volatile int *)reg) = 0; > > compilers tend to generate "str wzr, [xx]" here > > Signed-off-by: Pavel Fedin <p.fedin@xxxxxxxxxxx> > Reviewed-by: Marc Zyngier <marc.zyngier@xxxxxxx> > --- > arch/arm/include/asm/kvm_emulate.h | 12 ++++++++++++ > arch/arm/kvm/mmio.c | 5 +++-- > arch/arm64/include/asm/kvm_emulate.h | 13 +++++++++++++ > 3 files changed, 28 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/include/asm/kvm_emulate.h b/arch/arm/include/asm/kvm_emulate.h > index a9c80a2..b7ff32e 100644 > --- a/arch/arm/include/asm/kvm_emulate.h > +++ b/arch/arm/include/asm/kvm_emulate.h > @@ -28,6 +28,18 @@ > unsigned long *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num); > unsigned long *vcpu_spsr(struct kvm_vcpu *vcpu); > > +static inline unsigned long vcpu_get_reg(const struct kvm_vcpu *vcpu, > + u8 reg_num) > +{ > + return *vcpu_reg(vcpu, reg_num); > +} > + > +static inline void vcpu_set_reg(const struct kvm_vcpu *vcpu, u8 reg_num, > + unsigned long val) > +{ > + *vcpu_reg(vcpu, reg_num) = val; > +} > + This makes a 32bit compile scream (making these vcpu pointer const is not a good idea). I'll fix it locally. Thanks, M. -- Jazz is not dead. It just smells funny... -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html