• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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