From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fabiano Rosas Date: Tue, 23 Mar 2021 18:08:41 +0000 Subject: Re: [PATCH v4 01/46] KVM: PPC: Book3S HV: Nested move LPCR sanitising to sanitise_hv_regs Message-Id: <87y2edeo9i.fsf@linux.ibm.com> List-Id: References: <20210323010305.1045293-1-npiggin@gmail.com> <20210323010305.1045293-2-npiggin@gmail.com> In-Reply-To: <20210323010305.1045293-2-npiggin@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Nicholas Piggin , kvm-ppc@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org, Nicholas Piggin Nicholas Piggin writes: > This will get a bit more complicated in future patches. Move it > into the helper function. > > Signed-off-by: Nicholas Piggin Reviewed-by: Fabiano Rosas > --- > 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 */