Commit 44598fe7 authored by Bibo Mao's avatar Bibo Mao Committed by Huacai Chen
Browse files

LoongArch: KVM: Add sign extension with kernel IOCSR read emulation



Function kvm_complete_iocsr_read() is to add sign extension with IOCSR
read emulation, it is used in user space IOCSR read completion now. Also
it should be used in kernel IOCSR read emulation.

Signed-off-by: default avatarBibo Mao <maobibo@loongson.cn>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent 80edf908
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -218,16 +218,16 @@ int kvm_emu_iocsr(larch_inst inst, struct kvm_run *run, struct kvm_vcpu *vcpu)
		}
		trace_kvm_iocsr(KVM_TRACE_IOCSR_WRITE, run->iocsr_io.len, addr, val);
	} else {
		vcpu->arch.io_gpr = rd; /* Set register id for iocsr read completion */
		idx = srcu_read_lock(&vcpu->kvm->srcu);
		ret = kvm_io_bus_read(vcpu, KVM_IOCSR_BUS, addr, run->iocsr_io.len, val);
		ret = kvm_io_bus_read(vcpu, KVM_IOCSR_BUS, addr,
				      run->iocsr_io.len, run->iocsr_io.data);
		srcu_read_unlock(&vcpu->kvm->srcu, idx);
		if (ret == 0)
		if (ret == 0) {
			kvm_complete_iocsr_read(vcpu, run);
			ret = EMULATE_DONE;
		else {
		} else
			ret = EMULATE_DO_IOCSR;
			/* Save register id for iocsr read completion */
			vcpu->arch.io_gpr = rd;
		}
		trace_kvm_iocsr(KVM_TRACE_IOCSR_READ, run->iocsr_io.len, addr, NULL);
	}