KVM: PPC: Book3S HV: Ensure MSR[ME] is always set in guest MSR
authorNicholas Piggin <npiggin@gmail.com>
Mon, 12 Apr 2021 01:48:44 +0000 (11:48 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 12 Apr 2021 03:36:24 +0000 (13:36 +1000)
Rather than add the ME bit to the MSR at guest entry, make it clear
that the hypervisor does not allow the guest to clear the bit.

The ME set is kept in guest entry for now, but a future patch will
warn if it's not present.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com>
Acked-by: Paul Mackerras <paulus@ozlabs.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210412014845.1517916-12-npiggin@gmail.com
arch/powerpc/kvm/book3s_hv_builtin.c
arch/powerpc/kvm/book3s_hv_nested.c

index 158d309b42a387e9adff5eac7861c793136dd76c..41cb03d0bde451c491c2b4280518f9875be41d2b 100644 (file)
@@ -662,6 +662,9 @@ 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;
+
        /*
         * Check for illegal transactional state bit combination
         * and if we find it, force the TS field to a safe state.
index d14fe32f167b8227b5db796ab7c5de04e4179019..fb03085c902ba8155f607fa1277509e61eb4e578 100644 (file)
@@ -343,7 +343,9 @@ long kvmhv_enter_nested_guest(struct kvm_vcpu *vcpu)
        vcpu->arch.nested = l2;
        vcpu->arch.nested_vcpu_id = l2_hv.vcpu_token;
        vcpu->arch.regs = l2_regs;
-       vcpu->arch.shregs.msr = vcpu->arch.regs.msr;
+
+       /* Guest must always run with ME enabled. */
+       vcpu->arch.shregs.msr = vcpu->arch.regs.msr | MSR_ME;
 
        sanitise_hv_regs(vcpu, &l2_hv);
        restore_hv_regs(vcpu, &l2_hv);