mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
LoongArch: KVM: Return full old CSR value from kvm_emu_xchg_csr()
The LoongArch CSRXCHG instruction returns the full old CSR value in rd
after applying the masked update. kvm_emu_xchg_csr() currently masks
the saved value before returning it to the guest, so rd receives only
the bits selected by the write mask.
That breaks the architectural behavior and makes a zero mask return 0
instead of the previous CSR value. So, keep the masked CSR update, but
return the unmodified old CSR value.
Cc: stable@vger.kernel.org
Fixes: da50f5a693 ("LoongArch: KVM: Implement handle csr exception")
Reviewed-by: Bibo Mao <maobibo@loongson.cn>
Signed-off-by: Qiang Ma <maqianga@uniontech.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
This commit is contained in:
parent
fb89e0fe2d
commit
ebd50de14f
|
|
@ -103,7 +103,6 @@ static unsigned long kvm_emu_xchg_csr(struct kvm_vcpu *vcpu, int csrid,
|
|||
old = kvm_read_sw_gcsr(csr, csrid);
|
||||
val = (old & ~csr_mask) | (val & csr_mask);
|
||||
kvm_write_sw_gcsr(csr, csrid, val);
|
||||
old = old & csr_mask;
|
||||
} else
|
||||
pr_warn_once("Unsupported csrxchg 0x%x with pc %lx\n", csrid, vcpu->arch.pc);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user