aboutsummaryrefslogtreecommitdiffstats
path: root/arch/loongarch/kvm/vcpu.c
diff options
context:
space:
mode:
authorBibo Mao <maobibo@loongson.cn>2025-03-18 16:48:08 +0800
committerHuacai Chen <chenhuacai@loongson.cn>2025-03-18 16:48:08 +0800
commit062ac0cb83837fab2afdb817f136d0f8860474e9 (patch)
treee5910f3056d05e54e6c3ca1778ef7d7cd680f11c /arch/loongarch/kvm/vcpu.c
parentLoongArch: KVM: Remove unnecessary header include path (diff)
downloadlinux-rng-062ac0cb83837fab2afdb817f136d0f8860474e9.tar.xz
linux-rng-062ac0cb83837fab2afdb817f136d0f8860474e9.zip
LoongArch: KVM: Remove PGD saving during VM context switch
PGD table for primary mmu keeps unchanged once VM is created, it is not necessary to save PGD table pointer during VM context switch. And it can be acquired when VM is created. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Diffstat (limited to 'arch/loongarch/kvm/vcpu.c')
-rw-r--r--arch/loongarch/kvm/vcpu.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c
index 9e1a9b4aa4c6..a147290a11e4 100644
--- a/arch/loongarch/kvm/vcpu.c
+++ b/arch/loongarch/kvm/vcpu.c
@@ -1462,6 +1462,15 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
hrtimer_init(&vcpu->arch.swtimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED_HARD);
vcpu->arch.swtimer.function = kvm_swtimer_wakeup;
+ /* Get GPA (=HVA) of PGD for kvm hypervisor */
+ vcpu->arch.kvm_pgd = __pa(vcpu->kvm->arch.pgd);
+
+ /*
+ * Get PGD for primary mmu, virtual address is used since there is
+ * memory access after loading from CSR_PGD in tlb exception fast path.
+ */
+ vcpu->arch.host_pgd = (unsigned long)vcpu->kvm->mm->pgd;
+
vcpu->arch.handle_exit = kvm_handle_exit;
vcpu->arch.guest_eentry = (unsigned long)kvm_loongarch_ops->exc_entry;
vcpu->arch.csr = kzalloc(sizeof(struct loongarch_csrs), GFP_KERNEL);