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
>