hypervisor: Remove unused VmExit enum members

The members for {Io, Mmio}{Read, Write} are unused as instead exits of
those types are handled through the VmOps interface. Removing these is
also a prerequisite due to changes in the mutability of the
VcpuFd::run() method.

Signed-off-by: Rob Bradford <rbradford@rivosinc.com>
This commit is contained in:
Rob Bradford 2024-04-25 16:15:36 +01:00
parent e6aa57e3b9
commit c022063ae8
4 changed files with 6 additions and 27 deletions

View File

@ -300,15 +300,9 @@ pub enum HypervisorCpuError {
} }
#[derive(Debug)] #[derive(Debug)]
pub enum VmExit<'a> { pub enum VmExit {
#[cfg(target_arch = "x86_64")]
IoOut(u16 /* port */, &'a [u8] /* data */),
#[cfg(target_arch = "x86_64")]
IoIn(u16 /* port */, &'a mut [u8] /* data */),
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
IoapicEoi(u8 /* vector */), IoapicEoi(u8 /* vector */),
MmioRead(u64 /* address */, &'a mut [u8]),
MmioWrite(u64 /* address */, &'a [u8]),
Ignore, Ignore,
Reset, Reset,
Shutdown, Shutdown,

View File

@ -1625,7 +1625,7 @@ impl cpu::Vcpu for KvmVcpu {
.map_err(|e| cpu::HypervisorCpuError::RunVcpu(e.into())); .map_err(|e| cpu::HypervisorCpuError::RunVcpu(e.into()));
} }
Ok(cpu::VmExit::IoIn(addr, data)) Ok(cpu::VmExit::Ignore)
} }
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
VcpuExit::IoOut(addr, data) => { VcpuExit::IoOut(addr, data) => {
@ -1636,7 +1636,7 @@ impl cpu::Vcpu for KvmVcpu {
.map_err(|e| cpu::HypervisorCpuError::RunVcpu(e.into())); .map_err(|e| cpu::HypervisorCpuError::RunVcpu(e.into()));
} }
Ok(cpu::VmExit::IoOut(addr, data)) Ok(cpu::VmExit::Ignore)
} }
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
VcpuExit::IoapicEoi(vector) => Ok(cpu::VmExit::IoapicEoi(vector)), VcpuExit::IoapicEoi(vector) => Ok(cpu::VmExit::IoapicEoi(vector)),
@ -1669,7 +1669,7 @@ impl cpu::Vcpu for KvmVcpu {
.map_err(|e| cpu::HypervisorCpuError::RunVcpu(e.into())); .map_err(|e| cpu::HypervisorCpuError::RunVcpu(e.into()));
} }
Ok(cpu::VmExit::MmioRead(addr, data)) Ok(cpu::VmExit::Ignore)
} }
VcpuExit::MmioWrite(addr, data) => { VcpuExit::MmioWrite(addr, data) => {
if let Some(vm_ops) = &self.vm_ops { if let Some(vm_ops) = &self.vm_ops {
@ -1679,7 +1679,7 @@ impl cpu::Vcpu for KvmVcpu {
.map_err(|e| cpu::HypervisorCpuError::RunVcpu(e.into())); .map_err(|e| cpu::HypervisorCpuError::RunVcpu(e.into()));
} }
Ok(cpu::VmExit::MmioWrite(addr, data)) Ok(cpu::VmExit::Ignore)
} }
VcpuExit::Hyperv => Ok(cpu::VmExit::Hyperv), VcpuExit::Hyperv => Ok(cpu::VmExit::Hyperv),
#[cfg(feature = "tdx")] #[cfg(feature = "tdx")]

View File

@ -1147,15 +1147,6 @@ impl CpuManager {
unreachable!("Couldn't get a mutable reference from Arc<dyn Vcpu> as there are multiple instances"); unreachable!("Couldn't get a mutable reference from Arc<dyn Vcpu> as there are multiple instances");
} }
} }
_ => {
error!(
"VCPU generated error: {:?}",
Error::UnexpectedVmExit
);
vcpu_run_interrupted.store(true, Ordering::SeqCst);
exit_evt.write(1).unwrap();
break;
}
}, },
Err(e) => { Err(e) => {

View File

@ -3246,17 +3246,11 @@ pub fn test_vm() {
loop { loop {
match vcpu.run().expect("run failed") { match vcpu.run().expect("run failed") {
VmExit::IoOut(addr, data) => {
println!(
"IO out -- addr: {:#x} data [{:?}]",
addr,
str::from_utf8(data).unwrap()
);
}
VmExit::Reset => { VmExit::Reset => {
println!("HLT"); println!("HLT");
break; break;
} }
VmExit::Ignore => {}
r => panic!("unexpected exit reason: {r:?}"), r => panic!("unexpected exit reason: {r:?}"),
} }
} }