Skip to content

Commit 7ebb1fc

Browse files
authored
Merge branch 'main' into dependabot/cargo/firecracker-f4b88f9489
2 parents cd325a8 + 0f3e8b3 commit 7ebb1fc

File tree

17 files changed

+715
-691
lines changed

17 files changed

+715
-691
lines changed

src/snapshot-editor/src/edit_vmstate.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ mod tests {
9999
const KVM_REG_SIZE_U32: u64 = 0x20000000000000;
100100

101101
use vmm::arch::aarch64::regs::Aarch64RegisterRef;
102-
use vmm::vstate::vcpu::aarch64::VcpuState;
102+
use vmm::arch::aarch64::vcpu::VcpuState;
103103

104104
let vcpu_state = VcpuState {
105105
regs: {
@@ -158,7 +158,7 @@ mod tests {
158158
const KVM_REG_SIZE_U32: u64 = 0x20000000000000;
159159

160160
use vmm::arch::aarch64::regs::Aarch64RegisterRef;
161-
use vmm::vstate::vcpu::aarch64::VcpuState;
161+
use vmm::arch::aarch64::vcpu::VcpuState;
162162

163163
let vcpu_state = VcpuState {
164164
regs: {

src/vmm/src/arch/aarch64/kvm.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
use std::convert::Infallible;
5+
6+
use kvm_ioctls::Kvm as KvmFd;
7+
8+
use crate::cpu_config::templates::KvmCapability;
9+
10+
/// ['Kvm'] initialization can't fail for Aarch64
11+
pub type KvmArchError = Infallible;
12+
13+
/// Optional capabilities.
14+
#[derive(Debug, Default)]
15+
pub struct OptionalCapabilities {
16+
/// KVM_CAP_COUNTER_OFFSET
17+
pub counter_offset: bool,
18+
}
19+
20+
/// Struct with kvm fd and kvm associated parameters.
21+
#[derive(Debug)]
22+
pub struct Kvm {
23+
/// KVM fd.
24+
pub fd: KvmFd,
25+
/// Maximum number of memory slots allowed by KVM.
26+
pub max_memslots: usize,
27+
/// Additional capabilities that were specified in cpu template.
28+
pub kvm_cap_modifiers: Vec<KvmCapability>,
29+
}
30+
31+
impl Kvm {
32+
pub(crate) const DEFAULT_CAPABILITIES: [u32; 7] = [
33+
kvm_bindings::KVM_CAP_IOEVENTFD,
34+
kvm_bindings::KVM_CAP_IRQFD,
35+
kvm_bindings::KVM_CAP_USER_MEMORY,
36+
kvm_bindings::KVM_CAP_ARM_PSCI_0_2,
37+
kvm_bindings::KVM_CAP_DEVICE_CTRL,
38+
kvm_bindings::KVM_CAP_MP_STATE,
39+
kvm_bindings::KVM_CAP_ONE_REG,
40+
];
41+
42+
/// Initialize [`Kvm`] type for Aarch64 architecture
43+
pub fn init_arch(
44+
fd: KvmFd,
45+
max_memslots: usize,
46+
kvm_cap_modifiers: Vec<KvmCapability>,
47+
) -> Result<Self, KvmArchError> {
48+
Ok(Self {
49+
fd,
50+
max_memslots,
51+
kvm_cap_modifiers,
52+
})
53+
}
54+
55+
/// Returns struct with optional capabilities statuses.
56+
pub fn optional_capabilities(&self) -> OptionalCapabilities {
57+
OptionalCapabilities {
58+
counter_offset: self
59+
.fd
60+
.check_extension_raw(kvm_bindings::KVM_CAP_COUNTER_OFFSET.into())
61+
!= 0,
62+
}
63+
}
64+
}

src/vmm/src/arch/aarch64/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@ pub(crate) mod cache_info;
55
mod fdt;
66
/// Module for the global interrupt controller configuration.
77
pub mod gic;
8+
/// Architecture specific KVM-related code
9+
pub mod kvm;
810
/// Layout for this aarch64 system.
911
pub mod layout;
1012
/// Logic for configuring aarch64 registers.
1113
pub mod regs;
12-
/// Helper methods for VcpuFd.
14+
/// Architecture specific vCPU code
1315
pub mod vcpu;
16+
/// Architecture specific VM state code
17+
pub mod vm;
1418

1519
use std::cmp::min;
1620
use std::collections::HashMap;

0 commit comments

Comments
 (0)