summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeng Chi <zengchi@kylinos.cn>2026-08-10 12:21:50 +0800
committerHuacai Chen <chenhuacai@loongson.cn>2026-08-10 12:21:50 +0800
commitfd4021529faa931818186b6e83bd46f5de7517eb (patch)
tree0ab44c32c47cd29b72763c94def738361457e7fd
parent01c823f14ed4caac4bf1ceb90926f26d67d753ec (diff)
downloadlinux-stable-fd4021529faa931818186b6e83bd46f5de7517eb.tar.gz
linux-stable-fd4021529faa931818186b6e83bd46f5de7517eb.zip
LoongArch: KVM: Fix PC double advance in kernel MMIO read fast path
In the in-kernel MMIO read fast path of kvm_emu_mmio_read(), kvm_complete_mmio_read() already advances the guest PC via update_pc(). The explicit update_pc() call right after it advances the PC a second time, so PC moves forward by 8 bytes instead of 4, and the instruction following the MMIO read is silently skipped. The user space MMIO read completion path in kvm_arch_vcpu_ioctl_run() calls kvm_complete_mmio_read() only once, and the MMIO write fast path advances the PC exactly once as well. Here remove the redundant update_pc() so the kernel MMIO read fast path advances the PC by a single instruction. Cc: stable@vger.kernel.org Fixes: 80edf90831a2 ("LoongArch: KVM: Add sign extension with kernel MMIO read emulation") Reviewed-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Tao Cui <cuitao@kylinos.cn> Signed-off-by: Zeng Chi <zengchi@kylinos.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
-rw-r--r--arch/loongarch/kvm/exit.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/arch/loongarch/kvm/exit.c b/arch/loongarch/kvm/exit.c
index 8572b63478bb..482ba17bcd3d 100644
--- a/arch/loongarch/kvm/exit.c
+++ b/arch/loongarch/kvm/exit.c
@@ -481,7 +481,6 @@ int kvm_emu_mmio_read(struct kvm_vcpu *vcpu, larch_inst inst)
srcu_read_unlock(&vcpu->kvm->srcu, idx);
if (!ret) {
kvm_complete_mmio_read(vcpu, run);
- update_pc(&vcpu->arch);
vcpu->mmio_needed = 0;
return EMULATE_DONE;
}