Re: [PATCH 2/6] LoongArch: KVM: Add separate vCPU and VM id update function
Huacai Chen <[email protected]> Sun, 2 Aug 2026 22:12:29 +0800
| Newsgroups | dev.linux.lists.loongarch,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAAhV-H7dydcNDNh32cZS5=HhHPE01hdZzEy-vj=5cBEA_b7Xug@mail.gmail.com> |
Hi, Bibo, On Mon, Jul 27, 2026 at 3:29=E2=80=AFPM Bibo Mao <[email protected]> wrot= e: > > There are two-level MMU on LoongArch KVM system, the first level (stage1) > MMU is mapping for GVA --> GPA, the second level (stage2) is mapping > for GPA --> HPA. Similar with ASID, there is different ID management > to support multiple VMs and vCPUs. The stage1 MMU is called vCPUID, and > the second MMU is called VMID, the corresponding ID management function > is kvm_check_vcpuid() and kvm_check_vmid(). > > Signed-off-by: Bibo Mao <[email protected]> > --- > arch/loongarch/kvm/main.c | 21 ++++++++++++++++++--- > 1 file changed, 18 insertions(+), 3 deletions(-) > > diff --git a/arch/loongarch/kvm/main.c b/arch/loongarch/kvm/main.c > index 6e3e8efa1dc2..c1e1d8424fa7 100644 > --- a/arch/loongarch/kvm/main.c > +++ b/arch/loongarch/kvm/main.c > @@ -223,10 +223,9 @@ static void kvm_update_vpid(struct kvm_vcpu *vcpu, i= nt cpu) > > context->vpid_cache =3D vpid; > vcpu->arch.vpid =3D vpid; > - vcpu->arch.vmid =3D vcpu->arch.vpid & vpid_mask; > } > > -void kvm_check_vpid(struct kvm_vcpu *vcpu) > +static void kvm_check_vcpuid(struct kvm_vcpu *vcpu) > { > int cpu; > bool migrated; > @@ -254,7 +253,6 @@ void kvm_check_vpid(struct kvm_vcpu *vcpu) > kvm_update_vpid(vcpu, cpu); > trace_kvm_vpid_change(vcpu, vcpu->arch.vpid); > vcpu->cpu =3D cpu; > - kvm_clear_request(KVM_REQ_TLB_FLUSH_GPA, vcpu); > > /* > * LLBCTL is a separated guest CSR register from host, a = general > @@ -280,6 +278,23 @@ void kvm_check_vpid(struct kvm_vcpu *vcpu) > } > } > > +static void kvm_check_vmid(struct kvm_vcpu *vcpu) > +{ > + unsigned long vmid; > + > + vmid =3D vcpu->arch.vpid & vpid_mask; > + if (vcpu->arch.vmid !=3D vmid) { > + vcpu->arch.vmid =3D vmid; > + kvm_clear_request(KVM_REQ_TLB_FLUSH_GPA, vcpu); > + } > +} > + > +void kvm_check_vpid(struct kvm_vcpu *vcpu) > +{ > + kvm_check_vcpuid(vcpu); > + kvm_check_vmid(vcpu); > +} I think the previous naming is a little better: +void kvm_check_vpid(struct kvm_vcpu *vcpu) +{ + __kvm_check_vpid(vcpu); + __kvm_check_vmid(vcpu); +} Huacai > + > void kvm_init_vmcs(struct kvm *kvm) > { > kvm->arch.vmcs =3D vmcs; > -- > 2.39.3 >