From cf463b88b762c8ed3062794a7f3a0af6910b73a2 Mon Sep 17 00:00:00 2001 From: Ruoqing He Date: Tue, 21 Jan 2025 10:53:58 +0800 Subject: [PATCH] hypervisor: Fix AIA IMSIC attr calculation The IMSIC attr of RISC-V AIA is wrongly configured to start from 0, which would error out with `os error 22` (invalid argument). ```console Error booting VM: VmBoot(DeviceManager(CreateInterruptController(CreateAia(CreateVaia(Vaia error SetDeviceAttribute(SetDeviceAttribute(Invalid argument (os error 22)))))))) ``` `riscv_imsic_attr_of` should shift `cpu_index` by 1 here to produce correct IMSIC attr. Signed-off-by: Ruoqing He --- hypervisor/src/kvm/riscv64/aia.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypervisor/src/kvm/riscv64/aia.rs b/hypervisor/src/kvm/riscv64/aia.rs index d42a9d756..479927ff0 100644 --- a/hypervisor/src/kvm/riscv64/aia.rs +++ b/hypervisor/src/kvm/riscv64/aia.rs @@ -99,7 +99,7 @@ impl KvmAiaImsics { let riscv_imsic_addr_of = |cpu_index: u32| -> u64 { self.imsic_addr + (cpu_index * kvm_bindings::KVM_DEV_RISCV_IMSIC_SIZE) as u64 }; - let riscv_imsic_attr_of = |cpu_index: u32| -> u64 { cpu_index as u64 }; + let riscv_imsic_attr_of = |cpu_index: u32| -> u64 { cpu_index as u64 + 1 }; // Setting up RISC-V IMSICs for cpu_index in 0..self.vcpu_count {