diff --git a/arch/loongarch/kvm/main.c b/arch/loongarch/kvm/main.c index ef2bad612c00309a59937a1b59e63cb9d802ca81..3dddf3c8f2222da9322894558cc99c7a4ed696bd 100644 --- a/arch/loongarch/kvm/main.c +++ b/arch/loongarch/kvm/main.c @@ -246,20 +246,22 @@ void kvm_check_vpid(struct kvm_vcpu *vcpu) vcpu->cpu = cpu; kvm_clear_request(KVM_REQ_TLB_FLUSH_GPA, vcpu); /* - * LLBCTL_WCLLB is separated CSR register from host - * eret instruction in host mode clears host LLBCTL_WCLLB - * register, and clears guest register in guest mode + * LLBCTL is a separated guest CSR register from host, a general + * exception ERET instruction clears the host LLBCTL register in + * host mode, and clears the guest LLBCTL register in guest mode. + * ERET in tlb refill exception does not clear LLBCTL register. * - * When gpa --> hpa mapping is changed, guest does not know - * even if the content is changed with new address + * When secondary mmu mapping is changed, guest OS does not know + * even if the content is changed after mapping is changed. * - * Here clear guest LLBCTL_WCLLB register when mapping is - * changed, else if mapping is changed when guest is executing - * LL/SC pair, LL loads old address, SC store new address - * successfully since LLBCTL_WCLLB is on, even if memory - * with new address is changed with other VCPUs. + * Here clear WCLLB of the guest LLBCTL register when mapping is + * changed. Otherwise, if mmu mapping is changed while guest is + * executing LL/SC pair, LL loads with the old address and set + * the LLBCTL flag, SC checks the LLBCTL flag and will store the + * new address successfully since LLBCTL_WCLLB is on, even if + * memory with new address is changed on other VCPUs. */ - set_gcsr_llbctl(LOONGARCH_CSR_LLBCTL); + set_gcsr_llbctl(CSR_LLBCTL_WCLLB); } /* Restore GSTAT(0x50).vpid */