1 // Copyright 2022 The ChromiumOS Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #![cfg(unix)]
6
7 mod x86_64;
8
9 use devices::irqchip::IrqChip;
10 use devices::irqchip::KvmKernelIrqChip;
11 use hypervisor::kvm::Kvm;
12 use hypervisor::kvm::KvmVm;
13 use hypervisor::MPState;
14 use hypervisor::Vm;
15 #[cfg(any(target_arch = "arm", target_arch = "aarch64"))]
16 use hypervisor::VmAArch64;
17 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
18 use hypervisor::VmX86_64;
19 use vm_memory::GuestMemory;
20
21 #[test]
create_kvm_kernel_irqchip()22 fn create_kvm_kernel_irqchip() {
23 let kvm = Kvm::new().expect("failed to instantiate Kvm");
24 let mem = GuestMemory::new(&[]).unwrap();
25 let vm = KvmVm::new(&kvm, mem, Default::default()).expect("failed to instantiate vm");
26
27 let mut chip = KvmKernelIrqChip::new(vm.try_clone().expect("failed to clone vm"), 1)
28 .expect("failed to instantiate KvmKernelIrqChip");
29
30 let vcpu = vm.create_vcpu(0).expect("failed to instantiate vcpu");
31 chip.add_vcpu(0, vcpu.as_vcpu())
32 .expect("failed to add vcpu");
33 }
34
35 #[test]
mp_state()36 fn mp_state() {
37 let kvm = Kvm::new().expect("failed to instantiate Kvm");
38 let mem = GuestMemory::new(&[]).unwrap();
39 let vm = KvmVm::new(&kvm, mem, Default::default()).expect("failed to instantiate vm");
40
41 let mut chip = KvmKernelIrqChip::new(vm.try_clone().expect("failed to clone vm"), 1)
42 .expect("failed to instantiate KvmKernelIrqChip");
43
44 let vcpu = vm.create_vcpu(0).expect("failed to instantiate vcpu");
45 chip.add_vcpu(0, vcpu.as_vcpu())
46 .expect("failed to add vcpu");
47
48 let state = chip.get_mp_state(0).expect("failed to get mp state");
49 assert_eq!(state, MPState::Runnable);
50
51 chip.set_mp_state(0, &MPState::Stopped)
52 .expect("failed to set mp state");
53
54 let state = chip.get_mp_state(0).expect("failed to get mp state");
55 assert_eq!(state, MPState::Stopped);
56 }
57