[PATCH 2/6] LoongArch: KVM: Add separate vCPU and VM id update function
Bibo Mao <[email protected]> Mon, 27 Jul 2026 15:21:05 +0800
| Newsgroups | dev.linux.lists.loongarch,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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, int cpu) context->vpid_cache = vpid; vcpu->arch.vpid = vpid; - vcpu->arch.vmid = 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 = 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 = vcpu->arch.vpid & vpid_mask; + if (vcpu->arch.vmid != vmid) { + vcpu->arch.vmid = 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); +} + void kvm_init_vmcs(struct kvm *kvm) { kvm->arch.vmcs = vmcs; -- 2.39.3