This will get a bit more complicated in future patches. Move it
into the helper function.

Signed-off-by: Nicholas Piggin <npig...@gmail.com>
---
 arch/powerpc/kvm/book3s_hv_nested.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/arch/powerpc/kvm/book3s_hv_nested.c 
b/arch/powerpc/kvm/book3s_hv_nested.c
index 0cd0e7aad588..2fe1fea4c934 100644
--- a/arch/powerpc/kvm/book3s_hv_nested.c
+++ b/arch/powerpc/kvm/book3s_hv_nested.c
@@ -134,6 +134,16 @@ static void save_hv_return_state(struct kvm_vcpu *vcpu, 
int trap,
 
 static void sanitise_hv_regs(struct kvm_vcpu *vcpu, struct hv_guest_state *hr)
 {
+       struct kvmppc_vcore *vc = vcpu->arch.vcore;
+       u64 mask;
+
+       /*
+        * Don't let L1 change LPCR bits for the L2 except these:
+        */
+       mask = LPCR_DPFD | LPCR_ILE | LPCR_TC | LPCR_AIL | LPCR_LD |
+               LPCR_LPES | LPCR_MER;
+       hr->lpcr = (vc->lpcr & ~mask) | (hr->lpcr & mask);
+
        /*
         * Don't let L1 enable features for L2 which we've disabled for L1,
         * but preserve the interrupt cause field.
@@ -271,8 +281,6 @@ long kvmhv_enter_nested_guest(struct kvm_vcpu *vcpu)
        u64 hv_ptr, regs_ptr;
        u64 hdec_exp;
        s64 delta_purr, delta_spurr, delta_ic, delta_vtb;
-       u64 mask;
-       unsigned long lpcr;
 
        if (vcpu->kvm->arch.l1_ptcr == 0)
                return H_NOT_AVAILABLE;
@@ -321,9 +329,7 @@ long kvmhv_enter_nested_guest(struct kvm_vcpu *vcpu)
        vcpu->arch.nested_vcpu_id = l2_hv.vcpu_token;
        vcpu->arch.regs = l2_regs;
        vcpu->arch.shregs.msr = vcpu->arch.regs.msr;
-       mask = LPCR_DPFD | LPCR_ILE | LPCR_TC | LPCR_AIL | LPCR_LD |
-               LPCR_LPES | LPCR_MER;
-       lpcr = (vc->lpcr & ~mask) | (l2_hv.lpcr & mask);
+
        sanitise_hv_regs(vcpu, &l2_hv);
        restore_hv_regs(vcpu, &l2_hv);
 
@@ -335,7 +341,7 @@ long kvmhv_enter_nested_guest(struct kvm_vcpu *vcpu)
                        r = RESUME_HOST;
                        break;
                }
-               r = kvmhv_run_single_vcpu(vcpu, hdec_exp, lpcr);
+               r = kvmhv_run_single_vcpu(vcpu, hdec_exp, l2_hv.lpcr);
        } while (is_kvmppc_resume_guest(r));
 
        /* save L2 state for return */
-- 
2.23.0

Reply via email to