Nicholas Piggin <npiggin@xxxxxxxxx> writes: > This will get a bit more complicated in future patches. Move it > into the helper function. > > Signed-off-by: Nicholas Piggin <npiggin@xxxxxxxxx> Reviewed-by: Fabiano Rosas <farosas@xxxxxxxxxxxxx> > --- > 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 */