Message ID | 20210412014845.1517916-13-npiggin@gmail.com |
---|---|
State | New |
Headers | show |
Series | minor KVM fixes and cleanups | expand |
Nicholas Piggin <npiggin@gmail.com> writes: > Rather than clear the HV bit from the MSR at guest entry, make it clear > that the hypervisor does not allow the guest to set the bit. > > The HV clear is kept in guest entry for now, but a future patch will > warn if it is set. > > Acked-by: Paul Mackerras <paulus@ozlabs.org> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com> > --- > arch/powerpc/kvm/book3s_hv_builtin.c | 4 ++-- > arch/powerpc/kvm/book3s_hv_nested.c | 4 ++-- > 2 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/arch/powerpc/kvm/book3s_hv_builtin.c b/arch/powerpc/kvm/book3s_hv_builtin.c > index 41cb03d0bde4..7a0e33a9c980 100644 > --- a/arch/powerpc/kvm/book3s_hv_builtin.c > +++ b/arch/powerpc/kvm/book3s_hv_builtin.c > @@ -662,8 +662,8 @@ static void kvmppc_end_cede(struct kvm_vcpu *vcpu) > > void kvmppc_set_msr_hv(struct kvm_vcpu *vcpu, u64 msr) > { > - /* Guest must always run with ME enabled. */ > - msr = msr | MSR_ME; > + /* Guest must always run with ME enabled, HV disabled. */ > + msr = (msr | MSR_ME) & ~MSR_HV; > > /* > * Check for illegal transactional state bit combination > diff --git a/arch/powerpc/kvm/book3s_hv_nested.c b/arch/powerpc/kvm/book3s_hv_nested.c > index fb03085c902b..60724f674421 100644 > --- a/arch/powerpc/kvm/book3s_hv_nested.c > +++ b/arch/powerpc/kvm/book3s_hv_nested.c > @@ -344,8 +344,8 @@ long kvmhv_enter_nested_guest(struct kvm_vcpu *vcpu) > vcpu->arch.nested_vcpu_id = l2_hv.vcpu_token; > vcpu->arch.regs = l2_regs; > > - /* Guest must always run with ME enabled. */ > - vcpu->arch.shregs.msr = vcpu->arch.regs.msr | MSR_ME; > + /* Guest must always run with ME enabled, HV disabled. */ > + vcpu->arch.shregs.msr = (vcpu->arch.regs.msr | MSR_ME) & ~MSR_HV; > > sanitise_hv_regs(vcpu, &l2_hv); > restore_hv_regs(vcpu, &l2_hv);
diff --git a/arch/powerpc/kvm/book3s_hv_builtin.c b/arch/powerpc/kvm/book3s_hv_builtin.c index 41cb03d0bde4..7a0e33a9c980 100644 --- a/arch/powerpc/kvm/book3s_hv_builtin.c +++ b/arch/powerpc/kvm/book3s_hv_builtin.c @@ -662,8 +662,8 @@ static void kvmppc_end_cede(struct kvm_vcpu *vcpu) void kvmppc_set_msr_hv(struct kvm_vcpu *vcpu, u64 msr) { - /* Guest must always run with ME enabled. */ - msr = msr | MSR_ME; + /* Guest must always run with ME enabled, HV disabled. */ + msr = (msr | MSR_ME) & ~MSR_HV; /* * Check for illegal transactional state bit combination diff --git a/arch/powerpc/kvm/book3s_hv_nested.c b/arch/powerpc/kvm/book3s_hv_nested.c index fb03085c902b..60724f674421 100644 --- a/arch/powerpc/kvm/book3s_hv_nested.c +++ b/arch/powerpc/kvm/book3s_hv_nested.c @@ -344,8 +344,8 @@ long kvmhv_enter_nested_guest(struct kvm_vcpu *vcpu) vcpu->arch.nested_vcpu_id = l2_hv.vcpu_token; vcpu->arch.regs = l2_regs; - /* Guest must always run with ME enabled. */ - vcpu->arch.shregs.msr = vcpu->arch.regs.msr | MSR_ME; + /* Guest must always run with ME enabled, HV disabled. */ + vcpu->arch.shregs.msr = (vcpu->arch.regs.msr | MSR_ME) & ~MSR_HV; sanitise_hv_regs(vcpu, &l2_hv); restore_hv_regs(vcpu, &l2_hv);