Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
google
GitHub Repository: google/crosvm
Path: blob/main/devices/tests/irqchip/kvm/mod.rs
5394 views
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(any(target_os = "android", target_os = "linux"))]
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(target_arch = "aarch64")]
16
use hypervisor::VmAArch64;
17
#[cfg(target_arch = "riscv64")]
18
use hypervisor::VmRiscv64;
19
#[cfg(target_arch = "x86_64")]
20
use hypervisor::VmX86_64;
21
use vm_memory::GuestMemory;
22
23
#[test]
24
fn create_kvm_kernel_irqchip() {
25
let kvm = Kvm::new().expect("failed to instantiate Kvm");
26
let mem = GuestMemory::new(&[]).unwrap();
27
let vm = KvmVm::new(&kvm, mem, Default::default()).expect("failed to instantiate vm");
28
29
let mut chip = KvmKernelIrqChip::new(
30
vm.try_clone().expect("failed to clone vm"),
31
1,
32
#[cfg(target_arch = "aarch64")]
33
/* allow_vgic_its= */
34
false,
35
)
36
.expect("failed to instantiate KvmKernelIrqChip");
37
38
let vcpu = vm.create_vcpu(0).expect("failed to instantiate vcpu");
39
chip.add_vcpu(0, vcpu.as_vcpu())
40
.expect("failed to add vcpu");
41
}
42
43
#[test]
44
#[cfg(target_arch = "aarch64")]
45
fn create_kvm_kernel_irqchip_with_its() {
46
let kvm = Kvm::new().expect("failed to instantiate Kvm");
47
let mem = GuestMemory::new(&[]).unwrap();
48
let vm = KvmVm::new(&kvm, mem, Default::default()).expect("failed to instantiate vm");
49
50
let mut chip = KvmKernelIrqChip::new(
51
vm.try_clone().expect("failed to clone vm"),
52
1,
53
/* allow_vgic_its= */ true,
54
)
55
.expect("failed to instantiate KvmKernelIrqChip");
56
57
let vcpu = vm.create_vcpu(0).expect("failed to instantiate vcpu");
58
chip.add_vcpu(0, vcpu.as_vcpu())
59
.expect("failed to add vcpu");
60
}
61
62
#[test]
63
fn mp_state() {
64
let kvm = Kvm::new().expect("failed to instantiate Kvm");
65
let mem = GuestMemory::new(&[]).unwrap();
66
let vm = KvmVm::new(&kvm, mem, Default::default()).expect("failed to instantiate vm");
67
68
let mut chip = KvmKernelIrqChip::new(
69
vm.try_clone().expect("failed to clone vm"),
70
1,
71
#[cfg(target_arch = "aarch64")]
72
/* allow_vgic_its= */
73
false,
74
)
75
.expect("failed to instantiate KvmKernelIrqChip");
76
77
let vcpu = vm.create_vcpu(0).expect("failed to instantiate vcpu");
78
chip.add_vcpu(0, vcpu.as_vcpu())
79
.expect("failed to add vcpu");
80
81
let state = chip.get_mp_state(0).expect("failed to get mp state");
82
assert_eq!(state, MPState::Runnable);
83
84
let new_mpstate = if cfg!(target_arch = "aarch64") {
85
MPState::Stopped
86
} else if cfg!(target_arch = "x86_64") {
87
MPState::Halted
88
} else {
89
unimplemented!();
90
};
91
92
chip.set_mp_state(0, &new_mpstate)
93
.expect("failed to set mp state");
94
95
let state = chip.get_mp_state(0).expect("failed to get mp state");
96
assert_eq!(state, new_mpstate);
97
}
98
99