diff options
author | Bibo Mao <maobibo@loongson.cn> | 2025-03-08 13:52:01 +0800 |
---|---|---|
committer | Huacai Chen <chenhuacai@loongson.cn> | 2025-03-08 13:52:01 +0800 |
commit | 78d7bc5a02e1468df53896df354fa80727f35b7d (patch) | |
tree | 1a2cd5fed570b8c5cd643a46b5c3d6d86ac49477 | |
parent | 6fb1867d5a44b0a061cf39d2492d23d314bcb8ce (diff) | |
download | lwn-78d7bc5a02e1468df53896df354fa80727f35b7d.tar.gz lwn-78d7bc5a02e1468df53896df354fa80727f35b7d.zip |
LoongArch: KVM: Reload guest CSR registers after sleep
On host, the HW guest CSR registers are lost after suspend and resume
operation. Since last_vcpu of boot CPU still records latest vCPU pointer
so that the guest CSR register skips to reload when boot CPU resumes and
vCPU is scheduled.
Here last_vcpu is cleared so that guest CSR registers will reload from
scheduled vCPU context after suspend and resume.
Cc: stable@vger.kernel.org
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
-rw-r--r-- | arch/loongarch/kvm/main.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/loongarch/kvm/main.c b/arch/loongarch/kvm/main.c index f6d3242b9234..b6864d6e5ec8 100644 --- a/arch/loongarch/kvm/main.c +++ b/arch/loongarch/kvm/main.c @@ -317,6 +317,13 @@ int kvm_arch_enable_virtualization_cpu(void) kvm_debug("GCFG:%lx GSTAT:%lx GINTC:%lx GTLBC:%lx", read_csr_gcfg(), read_csr_gstat(), read_csr_gintc(), read_csr_gtlbc()); + /* + * HW Guest CSR registers are lost after CPU suspend and resume. + * Clear last_vcpu so that Guest CSR registers forced to reload + * from vCPU SW state. + */ + this_cpu_ptr(vmcs)->last_vcpu = NULL; + return 0; } |