Coverage Report

Created: 2024-05-21 06:19

/src/cloud-hypervisor/vmm/src/vm_config.rs
Line
Count
Source (jump to first uncovered line)
1
// Copyright © 2022 Intel Corporation
2
//
3
// SPDX-License-Identifier: Apache-2.0
4
//
5
use net_util::MacAddr;
6
use serde::{Deserialize, Serialize};
7
use std::{net::Ipv4Addr, path::PathBuf};
8
use virtio_devices::RateLimiterConfig;
9
10
228
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::CpuAffinity as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::CpuAffinity as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
10
3
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuAffinity as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
10
130
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuAffinity as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
10
37
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuAffinity as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
10
65
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::CpuAffinity as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
10
124
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuAffinity as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
10
61
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::CpuAffinity as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::CpuAffinity as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
11
pub struct CpuAffinity {
12
    pub vcpu: u8,
13
    pub host_cpus: Vec<usize>,
14
}
15
16
888
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::CpuFeatures as core::default::Default>::default
Line
Count
Source
16
849
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::CpuFeatures as core::default::Default>::default
Line
Count
Source
16
39
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuFeatures as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
16
1
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::CpuFeatures as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<vmm::vm_config::CpuFeatures as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
16
118
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuFeatures as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
16
7
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuFeatures as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
16
96
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuFeatures as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
16
213
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuFeatures as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
16
98
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::CpuFeatures as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::CpuFeatures as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
17
pub struct CpuFeatures {
18
    #[cfg(target_arch = "x86_64")]
19
    #[serde(default)]
20
    pub amx: bool,
21
}
22
23
375
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuTopology as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
23
8
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::CpuTopology as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<vmm::vm_config::CpuTopology as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
23
148
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuTopology as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
23
184
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuTopology as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
23
161
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuTopology as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
23
30
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpuTopology as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
23
166
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::CpuTopology as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::CpuTopology as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
24
pub struct CpuTopology {
25
    pub threads_per_core: u8,
26
    pub cores_per_die: u8,
27
    pub dies_per_package: u8,
28
    pub packages: u8,
29
}
30
31
// When booting with PVH boot the maximum physical addressable size
32
// is a 46 bit address space even when the host supports with 5-level
33
// paging.
34
pub const DEFAULT_MAX_PHYS_BITS: u8 = 46;
35
36
792
pub fn default_cpuconfig_max_phys_bits() -> u8 {
37
792
    DEFAULT_MAX_PHYS_BITS
38
792
}
39
40
3.41k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpusConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
40
6
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::CpusConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::CpusConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
40
760
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::CpusConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
40
1.57k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpusConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
40
747
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpusConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
40
1.22k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::CpusConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
40
1.44k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::CpusConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::CpusConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
41
pub struct CpusConfig {
42
    pub boot_vcpus: u8,
43
    pub max_vcpus: u8,
44
    #[serde(default)]
45
    pub topology: Option<CpuTopology>,
46
    #[serde(default)]
47
    pub kvm_hyperv: bool,
48
    #[serde(default = "default_cpuconfig_max_phys_bits")]
49
    pub max_phys_bits: u8,
50
    #[serde(default)]
51
    pub affinity: Option<Vec<CpuAffinity>>,
52
    #[serde(default)]
53
    pub features: CpuFeatures,
54
}
55
56
pub const DEFAULT_VCPUS: u8 = 1;
57
58
impl Default for CpusConfig {
59
57
    fn default() -> Self {
60
57
        CpusConfig {
61
57
            boot_vcpus: DEFAULT_VCPUS,
62
57
            max_vcpus: DEFAULT_VCPUS,
63
57
            topology: None,
64
57
            kvm_hyperv: false,
65
57
            max_phys_bits: DEFAULT_MAX_PHYS_BITS,
66
57
            affinity: None,
67
57
            features: CpuFeatures::default(),
68
57
        }
69
57
    }
70
}
71
72
pub const DEFAULT_NUM_PCI_SEGMENTS: u16 = 1;
73
1
pub fn default_platformconfig_num_pci_segments() -> u16 {
74
1
    DEFAULT_NUM_PCI_SEGMENTS
75
1
}
76
77
355
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::PlatformConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::PlatformConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
77
1
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PlatformConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
77
85
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PlatformConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
77
80
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::PlatformConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
77
151
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PlatformConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
77
147
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PlatformConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
77
128
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::PlatformConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::PlatformConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
78
pub struct PlatformConfig {
79
    #[serde(default = "default_platformconfig_num_pci_segments")]
80
    pub num_pci_segments: u16,
81
    #[serde(default)]
82
    pub iommu_segments: Option<Vec<u16>>,
83
    #[serde(default)]
84
    pub serial_number: Option<String>,
85
    #[serde(default)]
86
    pub uuid: Option<String>,
87
    #[serde(default)]
88
    pub oem_strings: Option<Vec<String>>,
89
    #[cfg(feature = "tdx")]
90
    #[serde(default)]
91
    pub tdx: bool,
92
    #[cfg(feature = "sev_snp")]
93
    #[serde(default)]
94
    pub sev_snp: bool,
95
}
96
97
pub const DEFAULT_PCI_SEGMENT_APERTURE_WEIGHT: u32 = 1;
98
99
73
fn default_pci_segment_aperture_weight() -> u32 {
100
73
    DEFAULT_PCI_SEGMENT_APERTURE_WEIGHT
101
73
}
102
103
423
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::PciSegmentConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::PciSegmentConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
103
3
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PciSegmentConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
103
227
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PciSegmentConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
103
111
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PciSegmentConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
103
113
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::PciSegmentConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
103
187
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PciSegmentConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
103
85
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::PciSegmentConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::PciSegmentConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
104
pub struct PciSegmentConfig {
105
    #[serde(default)]
106
    pub pci_segment: u16,
107
    #[serde(default = "default_pci_segment_aperture_weight")]
108
    pub mmio32_aperture_weight: u32,
109
    #[serde(default = "default_pci_segment_aperture_weight")]
110
    pub mmio64_aperture_weight: u32,
111
}
112
113
118
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::MemoryZoneConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::MemoryZoneConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
113
2
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::MemoryZoneConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
113
4
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::MemoryZoneConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
113
29
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::MemoryZoneConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
113
85
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::MemoryZoneConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
113
59
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::MemoryZoneConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
113
32
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::MemoryZoneConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::MemoryZoneConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
114
pub struct MemoryZoneConfig {
115
    pub id: String,
116
    pub size: u64,
117
    #[serde(default)]
118
    pub file: Option<PathBuf>,
119
    #[serde(default)]
120
    pub shared: bool,
121
    #[serde(default)]
122
    pub hugepages: bool,
123
    #[serde(default)]
124
    pub hugepage_size: Option<u64>,
125
    #[serde(default)]
126
    pub host_numa_node: Option<u32>,
127
    #[serde(default)]
128
    pub hotplug_size: Option<u64>,
129
    #[serde(default)]
130
    pub hotplugged_size: Option<u64>,
131
    #[serde(default)]
132
    pub prefault: bool,
133
}
134
135
538
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
Unexecuted instantiation: <<vmm::vm_config::HotplugMethod as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
<<vmm::vm_config::HotplugMethod as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
Line
Count
Source
135
1
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
<<vmm::vm_config::HotplugMethod as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
135
19
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
<vmm::vm_config::HotplugMethod as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
135
45
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
<<vmm::vm_config::HotplugMethod as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
135
2
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
<<vmm::vm_config::HotplugMethod as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_enum::<serde_json::de::VariantAccess<serde_json::read::SliceRead>>
Line
Count
Source
135
36
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
<<vmm::vm_config::HotplugMethod as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_enum::<serde_json::de::UnitVariantAccess<serde_json::read::SliceRead>>
Line
Count
Source
135
2
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
Unexecuted instantiation: <<vmm::vm_config::HotplugMethod as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::HotplugMethod as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
136
pub enum HotplugMethod {
137
    #[default]
138
    Acpi,
139
    VirtioMem,
140
}
141
142
538
fn default_memoryconfig_thp() -> bool {
143
538
    true
144
538
}
145
146
2.38k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::MemoryConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::MemoryConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
146
4
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::MemoryConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
146
1.01k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::MemoryConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
146
1.08k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::MemoryConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
146
605
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::MemoryConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
146
697
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::MemoryConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
146
692
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::MemoryConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::MemoryConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
147
pub struct MemoryConfig {
148
    pub size: u64,
149
    #[serde(default)]
150
    pub mergeable: bool,
151
    #[serde(default)]
152
    pub hotplug_method: HotplugMethod,
153
    #[serde(default)]
154
    pub hotplug_size: Option<u64>,
155
    #[serde(default)]
156
    pub hotplugged_size: Option<u64>,
157
    #[serde(default)]
158
    pub shared: bool,
159
    #[serde(default)]
160
    pub hugepages: bool,
161
    #[serde(default)]
162
    pub hugepage_size: Option<u64>,
163
    #[serde(default)]
164
    pub prefault: bool,
165
    #[serde(default)]
166
    pub zones: Option<Vec<MemoryZoneConfig>>,
167
    #[serde(default = "default_memoryconfig_thp")]
168
    pub thp: bool,
169
}
170
171
pub const DEFAULT_MEMORY_MB: u64 = 512;
172
173
impl Default for MemoryConfig {
174
58
    fn default() -> Self {
175
58
        MemoryConfig {
176
58
            size: DEFAULT_MEMORY_MB << 20,
177
58
            mergeable: false,
178
58
            hotplug_method: HotplugMethod::Acpi,
179
58
            hotplug_size: None,
180
58
            hotplugged_size: None,
181
58
            shared: false,
182
58
            hugepages: false,
183
58
            hugepage_size: None,
184
58
            prefault: false,
185
58
            zones: None,
186
58
            thp: true,
187
58
        }
188
58
    }
189
}
190
191
185
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
<<vmm::vm_config::VhostMode as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
Line
Count
Source
191
8
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
Unexecuted instantiation: <<vmm::vm_config::VhostMode as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
<<vmm::vm_config::VhostMode as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_enum::<serde_json::de::UnitVariantAccess<serde_json::read::SliceRead>>
Line
Count
Source
191
13
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
<<vmm::vm_config::VhostMode as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
191
70
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
<vmm::vm_config::VhostMode as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
191
93
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
<<vmm::vm_config::VhostMode as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_enum::<serde_json::de::VariantAccess<serde_json::read::SliceRead>>
Line
Count
Source
191
126
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
<<vmm::vm_config::VhostMode as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
191
46
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
Unexecuted instantiation: <<vmm::vm_config::VhostMode as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::VhostMode as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
192
pub enum VhostMode {
193
    #[default]
194
    Client,
195
    Server,
196
}
197
198
680
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::RateLimiterGroupConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::RateLimiterGroupConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
198
6
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::RateLimiterGroupConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
198
146
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::RateLimiterGroupConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
198
175
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::RateLimiterGroupConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
198
364
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::RateLimiterGroupConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
198
294
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::RateLimiterGroupConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
198
170
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::RateLimiterGroupConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::RateLimiterGroupConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
199
pub struct RateLimiterGroupConfig {
200
    #[serde(default)]
201
    pub id: String,
202
    #[serde(default)]
203
    pub rate_limiter_config: RateLimiterConfig,
204
}
205
206
757
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VirtQueueAffinity as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
206
3
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::VirtQueueAffinity as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::VirtQueueAffinity as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
206
250
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VirtQueueAffinity as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
206
238
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::VirtQueueAffinity as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
206
292
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VirtQueueAffinity as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
206
324
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VirtQueueAffinity as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
206
195
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::VirtQueueAffinity as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::VirtQueueAffinity as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
207
pub struct VirtQueueAffinity {
208
    pub queue_index: u16,
209
    pub host_cpus: Vec<usize>,
210
}
211
212
5.98k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DiskConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
212
14
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::DiskConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::DiskConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
212
200
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DiskConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
212
2.48k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::DiskConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
212
1.47k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DiskConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
212
2.42k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DiskConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
212
3.35k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::DiskConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::DiskConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
213
pub struct DiskConfig {
214
    pub path: Option<PathBuf>,
215
    #[serde(default)]
216
    pub readonly: bool,
217
    #[serde(default)]
218
    pub direct: bool,
219
    #[serde(default)]
220
    pub iommu: bool,
221
    #[serde(default = "default_diskconfig_num_queues")]
222
    pub num_queues: usize,
223
    #[serde(default = "default_diskconfig_queue_size")]
224
    pub queue_size: u16,
225
    #[serde(default)]
226
    pub vhost_user: bool,
227
    pub vhost_socket: Option<String>,
228
    #[serde(default)]
229
    pub rate_limit_group: Option<String>,
230
    #[serde(default)]
231
    pub rate_limiter_config: Option<RateLimiterConfig>,
232
    #[serde(default)]
233
    pub id: Option<String>,
234
    // For testing use only. Not exposed in API.
235
    #[serde(default)]
236
    pub disable_io_uring: bool,
237
    // For testing use only. Not exposed in API.
238
    #[serde(default)]
239
    pub disable_aio: bool,
240
    #[serde(default)]
241
    pub pci_segment: u16,
242
    #[serde(default)]
243
    pub serial: Option<String>,
244
    #[serde(default)]
245
    pub queue_affinity: Option<Vec<VirtQueueAffinity>>,
246
}
247
248
pub const DEFAULT_DISK_NUM_QUEUES: usize = 1;
249
250
103
pub fn default_diskconfig_num_queues() -> usize {
251
103
    DEFAULT_DISK_NUM_QUEUES
252
103
}
253
254
pub const DEFAULT_DISK_QUEUE_SIZE: u16 = 128;
255
256
103
pub fn default_diskconfig_queue_size() -> u16 {
257
103
    DEFAULT_DISK_QUEUE_SIZE
258
103
}
259
260
7.05k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
260
73
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
260
2.52k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
260
1.88k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::__DeserializeWith as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Unexecuted instantiation: <<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>::{closure#0}
<<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
260
3.98k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::__DeserializeWith as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
260
357
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
260
2.56k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::NetConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <vmm::vm_config::NetConfig as serde::ser::Serialize>::serialize::<&mut serde_json::ser::Serializer<&mut alloc::vec::Vec<u8>>>
Unexecuted instantiation: <<vmm::vm_config::NetConfig as serde::ser::Serialize>::serialize::__SerializeWith as serde::ser::Serialize>::serialize::<&mut serde_json::ser::Serializer<&mut alloc::vec::Vec<u8>>>
261
pub struct NetConfig {
262
    #[serde(default = "default_netconfig_tap")]
263
    pub tap: Option<String>,
264
    #[serde(default = "default_netconfig_ip")]
265
    pub ip: Ipv4Addr,
266
    #[serde(default = "default_netconfig_mask")]
267
    pub mask: Ipv4Addr,
268
    #[serde(default = "default_netconfig_mac")]
269
    pub mac: MacAddr,
270
    #[serde(default)]
271
    pub host_mac: Option<MacAddr>,
272
    #[serde(default)]
273
    pub mtu: Option<u16>,
274
    #[serde(default)]
275
    pub iommu: bool,
276
    #[serde(default = "default_netconfig_num_queues")]
277
    pub num_queues: usize,
278
    #[serde(default = "default_netconfig_queue_size")]
279
    pub queue_size: u16,
280
    #[serde(default)]
281
    pub vhost_user: bool,
282
    pub vhost_socket: Option<String>,
283
    #[serde(default)]
284
    pub vhost_mode: VhostMode,
285
    #[serde(default)]
286
    pub id: Option<String>,
287
    #[serde(
288
        default,
289
        serialize_with = "serialize_netconfig_fds",
290
        deserialize_with = "deserialize_netconfig_fds"
291
    )]
292
    pub fds: Option<Vec<i32>>,
293
    #[serde(default)]
294
    pub rate_limiter_config: Option<RateLimiterConfig>,
295
    #[serde(default)]
296
    pub pci_segment: u16,
297
    #[serde(default = "default_netconfig_true")]
298
    pub offload_tso: bool,
299
    #[serde(default = "default_netconfig_true")]
300
    pub offload_ufo: bool,
301
    #[serde(default = "default_netconfig_true")]
302
    pub offload_csum: bool,
303
}
304
305
288
pub fn default_netconfig_true() -> bool {
306
288
    true
307
288
}
308
309
106
pub fn default_netconfig_tap() -> Option<String> {
310
106
    None
311
106
}
312
313
110
pub fn default_netconfig_ip() -> Ipv4Addr {
314
110
    Ipv4Addr::new(192, 168, 249, 1)
315
110
}
316
317
110
pub fn default_netconfig_mask() -> Ipv4Addr {
318
110
    Ipv4Addr::new(255, 255, 255, 0)
319
110
}
320
321
110
pub fn default_netconfig_mac() -> MacAddr {
322
110
    MacAddr::local_random()
323
110
}
324
325
pub const DEFAULT_NET_NUM_QUEUES: usize = 2;
326
327
110
pub fn default_netconfig_num_queues() -> usize {
328
110
    DEFAULT_NET_NUM_QUEUES
329
110
}
330
331
pub const DEFAULT_NET_QUEUE_SIZE: u16 = 256;
332
333
110
pub fn default_netconfig_queue_size() -> u16 {
334
110
    DEFAULT_NET_QUEUE_SIZE
335
110
}
336
337
0
fn serialize_netconfig_fds<S>(x: &Option<Vec<i32>>, s: S) -> Result<S::Ok, S::Error>
338
0
where
339
0
    S: serde::Serializer,
340
0
{
341
0
    if let Some(x) = x {
342
0
        warn!("'NetConfig' contains FDs that can't be serialized correctly. Serializing them as invalid FDs.");
343
0
        let invalid_fds = vec![-1; x.len()];
344
0
        s.serialize_some(&invalid_fds)
345
    } else {
346
0
        s.serialize_none()
347
    }
348
0
}
349
350
185
fn deserialize_netconfig_fds<'de, D>(d: D) -> Result<Option<Vec<i32>>, D::Error>
351
185
where
352
185
    D: serde::Deserializer<'de>,
353
185
{
354
185
    let invalid_fds: Option<Vec<i32>> = Option::deserialize(d)?;
355
13
    if let Some(invalid_fds) = invalid_fds {
356
10
        warn!("'NetConfig' contains FDs that can't be deserialized correctly. Deserializing them as invalid FDs.");
357
10
        Ok(Some(vec![-1; invalid_fds.len()]))
358
    } else {
359
3
        Ok(None)
360
    }
361
185
}
362
363
465
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::RngConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::RngConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
363
2
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::RngConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
363
232
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::RngConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
363
225
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::RngConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
363
218
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::RngConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
363
15
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::RngConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
363
144
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::RngConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::RngConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
364
pub struct RngConfig {
365
    pub src: PathBuf,
366
    #[serde(default)]
367
    pub iommu: bool,
368
}
369
370
pub const DEFAULT_RNG_SOURCE: &str = "/dev/urandom";
371
372
impl Default for RngConfig {
373
60
    fn default() -> Self {
374
60
        RngConfig {
375
60
            src: PathBuf::from(DEFAULT_RNG_SOURCE),
376
60
            iommu: false,
377
60
        }
378
60
    }
379
}
380
381
1.08k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::BalloonConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::BalloonConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
381
2
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::BalloonConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
381
762
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::BalloonConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
381
163
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::BalloonConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
381
16
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::BalloonConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
381
322
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::BalloonConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
381
750
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::BalloonConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::BalloonConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
382
pub struct BalloonConfig {
383
    pub size: u64,
384
    /// Option to deflate the balloon in case the guest is out of memory.
385
    #[serde(default)]
386
    pub deflate_on_oom: bool,
387
    /// Option to enable free page reporting from the guest.
388
    #[serde(default)]
389
    pub free_page_reporting: bool,
390
}
391
392
2.35k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::FsConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
392
14
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::FsConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::FsConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
392
202
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::FsConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
392
1.01k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::FsConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
392
645
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::FsConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
392
998
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::FsConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
392
1.15k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::FsConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::FsConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
393
pub struct FsConfig {
394
    pub tag: String,
395
    pub socket: PathBuf,
396
    #[serde(default = "default_fsconfig_num_queues")]
397
    pub num_queues: usize,
398
    #[serde(default = "default_fsconfig_queue_size")]
399
    pub queue_size: u16,
400
    #[serde(default)]
401
    pub id: Option<String>,
402
    #[serde(default)]
403
    pub pci_segment: u16,
404
}
405
406
22
pub fn default_fsconfig_num_queues() -> usize {
407
22
    1
408
22
}
409
410
29
pub fn default_fsconfig_queue_size() -> u16 {
411
29
    1024
412
29
}
413
414
2.70k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::PmemConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::PmemConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
414
29
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::PmemConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
414
888
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PmemConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
414
1.10k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PmemConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
414
1.07k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PmemConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
414
1.10k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::PmemConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
414
517
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::PmemConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::PmemConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
415
pub struct PmemConfig {
416
    pub file: PathBuf,
417
    #[serde(default)]
418
    pub size: Option<u64>,
419
    #[serde(default)]
420
    pub iommu: bool,
421
    #[serde(default)]
422
    pub discard_writes: bool,
423
    #[serde(default)]
424
    pub id: Option<String>,
425
    #[serde(default)]
426
    pub pci_segment: u16,
427
}
428
429
122
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::ConsoleOutputMode as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
Line
Count
Source
429
3
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::ConsoleOutputMode as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
<<vmm::vm_config::ConsoleOutputMode as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_enum::<serde_json::de::UnitVariantAccess<serde_json::read::SliceRead>>
Line
Count
Source
429
17
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::ConsoleOutputMode as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_enum::<serde_json::de::VariantAccess<serde_json::read::SliceRead>>
Line
Count
Source
429
84
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::ConsoleOutputMode as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
429
21
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::ConsoleOutputMode as serde::de::Deserialize>::deserialize::<serde::__private::de::missing_field::MissingFieldDeserializer<serde_json::error::Error>>
Line
Count
Source
429
2
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::ConsoleOutputMode as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
429
80
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::ConsoleOutputMode as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
429
51
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::ConsoleOutputMode as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::ConsoleOutputMode as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
430
pub enum ConsoleOutputMode {
431
    Off,
432
    Pty,
433
    Tty,
434
    File,
435
    Socket,
436
    Null,
437
}
438
439
1.29k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::ConsoleConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
439
3
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::ConsoleConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::ConsoleConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
439
661
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::ConsoleConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
439
655
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::ConsoleConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
439
479
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::ConsoleConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
439
288
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::ConsoleConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
439
163
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::ConsoleConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::ConsoleConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
440
pub struct ConsoleConfig {
441
    #[serde(default = "default_consoleconfig_file")]
442
    pub file: Option<PathBuf>,
443
    pub mode: ConsoleOutputMode,
444
    #[serde(default)]
445
    pub iommu: bool,
446
    pub socket: Option<PathBuf>,
447
}
448
449
2
pub fn default_consoleconfig_file() -> Option<PathBuf> {
450
2
    None
451
2
}
452
453
#[cfg(target_arch = "x86_64")]
454
114
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DebugConsoleConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
454
1
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::DebugConsoleConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<vmm::vm_config::DebugConsoleConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
454
59
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DebugConsoleConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
454
17
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DebugConsoleConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
454
20
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DebugConsoleConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
454
19
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DebugConsoleConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
454
78
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::DebugConsoleConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::DebugConsoleConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
455
pub struct DebugConsoleConfig {
456
    #[serde(default)]
457
    pub file: Option<PathBuf>,
458
    pub mode: ConsoleOutputMode,
459
    /// Optionally dedicated I/O-port, if the default port should not be used.
460
    pub iobase: Option<u16>,
461
}
462
463
#[cfg(target_arch = "x86_64")]
464
impl Default for DebugConsoleConfig {
465
94
    fn default() -> Self {
466
94
        Self {
467
94
            file: None,
468
94
            mode: ConsoleOutputMode::Off,
469
94
            iobase: Some(devices::debug_console::DEFAULT_PORT as u16),
470
94
        }
471
94
    }
472
}
473
474
2.53k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::DeviceConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::DeviceConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
474
130
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DeviceConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
474
200
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DeviceConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
474
1.24k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::DeviceConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
474
857
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DeviceConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
474
1.17k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::DeviceConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
474
1.16k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::DeviceConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::DeviceConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
475
pub struct DeviceConfig {
476
    pub path: PathBuf,
477
    #[serde(default)]
478
    pub iommu: bool,
479
    #[serde(default)]
480
    pub id: Option<String>,
481
    #[serde(default)]
482
    pub pci_segment: u16,
483
    #[serde(default)]
484
    pub x_nv_gpudirect_clique: Option<u8>,
485
}
486
487
2.22k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::UserDeviceConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
487
24
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::UserDeviceConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::UserDeviceConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
487
1.20k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::UserDeviceConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
487
595
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::UserDeviceConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
487
745
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::UserDeviceConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
487
1.16k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::UserDeviceConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
487
312
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::UserDeviceConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::UserDeviceConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
488
pub struct UserDeviceConfig {
489
    pub socket: PathBuf,
490
    #[serde(default)]
491
    pub id: Option<String>,
492
    #[serde(default)]
493
    pub pci_segment: u16,
494
}
495
496
2.24k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::VdpaConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::VdpaConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
496
11
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::VdpaConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
496
722
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VdpaConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
496
965
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VdpaConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
496
444
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VdpaConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
496
856
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VdpaConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
496
946
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::VdpaConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::VdpaConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
497
pub struct VdpaConfig {
498
    pub path: PathBuf,
499
    #[serde(default = "default_vdpaconfig_num_queues")]
500
    pub num_queues: usize,
501
    #[serde(default)]
502
    pub iommu: bool,
503
    #[serde(default)]
504
    pub id: Option<String>,
505
    #[serde(default)]
506
    pub pci_segment: u16,
507
}
508
509
153
pub fn default_vdpaconfig_num_queues() -> usize {
510
153
    1
511
153
}
512
513
1.96k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VsockConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
513
15
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::VsockConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::VsockConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
513
798
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VsockConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
513
817
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VsockConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
513
349
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::VsockConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
513
561
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VsockConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
513
820
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::VsockConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::VsockConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
514
pub struct VsockConfig {
515
    pub cid: u32,
516
    pub socket: PathBuf,
517
    #[serde(default)]
518
    pub iommu: bool,
519
    #[serde(default)]
520
    pub id: Option<String>,
521
    #[serde(default)]
522
    pub pci_segment: u16,
523
}
524
525
#[cfg(target_arch = "x86_64")]
526
844
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::SgxEpcConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::SgxEpcConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
526
5
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::SgxEpcConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
526
79
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::SgxEpcConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
526
245
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::SgxEpcConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
526
422
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::SgxEpcConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
526
343
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::SgxEpcConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
526
428
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::SgxEpcConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::SgxEpcConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
527
pub struct SgxEpcConfig {
528
    pub id: String,
529
    #[serde(default)]
530
    pub size: u64,
531
    #[serde(default)]
532
    pub prefault: bool,
533
}
534
535
232
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::NumaDistance as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::NumaDistance as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
535
2
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::NumaDistance as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
535
54
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::NumaDistance as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
535
129
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::NumaDistance as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
535
127
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::NumaDistance as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
535
51
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::NumaDistance as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
535
52
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::NumaDistance as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::NumaDistance as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
536
pub struct NumaDistance {
537
    #[serde(default)]
538
    pub destination: u32,
539
    #[serde(default)]
540
    pub distance: u8,
541
}
542
543
1.35k
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::NumaConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
543
3
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::NumaConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::NumaConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
543
567
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::NumaConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
543
225
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::NumaConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
543
573
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::NumaConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
543
221
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::NumaConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
543
566
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::NumaConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::NumaConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
544
pub struct NumaConfig {
545
    #[serde(default)]
546
    pub guest_numa_id: u32,
547
    #[serde(default)]
548
    pub cpus: Option<Vec<u8>>,
549
    #[serde(default)]
550
    pub distances: Option<Vec<NumaDistance>>,
551
    #[serde(default)]
552
    pub memory_zones: Option<Vec<String>>,
553
    #[cfg(target_arch = "x86_64")]
554
    #[serde(default)]
555
    pub sgx_epc_sections: Option<Vec<String>>,
556
    #[serde(default)]
557
    pub pci_segments: Option<Vec<u16>>,
558
}
559
560
1.68k
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
<<vmm::vm_config::PayloadConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
560
4
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::PayloadConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::PayloadConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
560
752
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
<<vmm::vm_config::PayloadConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
560
745
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
<vmm::vm_config::PayloadConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
560
713
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
<<vmm::vm_config::PayloadConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
560
393
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
<<vmm::vm_config::PayloadConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
560
543
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::PayloadConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::PayloadConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
561
pub struct PayloadConfig {
562
    #[serde(default)]
563
    pub firmware: Option<PathBuf>,
564
    #[serde(default)]
565
    pub kernel: Option<PathBuf>,
566
    #[serde(default)]
567
    pub cmdline: Option<String>,
568
    #[serde(default)]
569
    pub initramfs: Option<PathBuf>,
570
    #[cfg(feature = "igvm")]
571
    #[serde(default)]
572
    pub igvm: Option<PathBuf>,
573
    #[cfg(feature = "sev_snp")]
574
    #[serde(default)]
575
    pub host_data: Option<String>,
576
}
577
578
55
pub fn default_serial() -> ConsoleConfig {
579
55
    ConsoleConfig {
580
55
        file: None,
581
55
        mode: ConsoleOutputMode::Null,
582
55
        iommu: false,
583
55
        socket: None,
584
55
    }
585
55
}
586
587
55
pub fn default_console() -> ConsoleConfig {
588
55
    ConsoleConfig {
589
55
        file: None,
590
55
        mode: ConsoleOutputMode::Tty,
591
55
        iommu: false,
592
55
        socket: None,
593
55
    }
594
55
}
595
596
248
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::TpmConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
596
2
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::TpmConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::TpmConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
596
97
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::TpmConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
596
9
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::TpmConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
596
101
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::TpmConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
596
142
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::TpmConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
596
98
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::TpmConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
Unexecuted instantiation: <<vmm::vm_config::TpmConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
597
pub struct TpmConfig {
598
    pub socket: PathBuf,
599
}
600
601
18.1k
#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::VmConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::expecting
<<vmm::vm_config::VmConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::expecting
Line
Count
Source
601
14
#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)]
<vmm::vm_config::VmConfig as serde::de::Deserialize>::deserialize::<&mut serde_json::de::Deserializer<serde_json::read::SliceRead>>
Line
Count
Source
601
5.24k
#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VmConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_map::<serde_json::de::MapAccess<serde_json::read::SliceRead>>
Line
Count
Source
601
10.5k
#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VmConfig as serde::de::Deserialize>::deserialize::__Visitor as serde::de::Visitor>::visit_seq::<serde_json::de::SeqAccess<serde_json::read::SliceRead>>
Line
Count
Source
601
3.09k
#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <vmm::vm_config::VmConfig as serde::de::Deserialize>::deserialize::<serde::__private::de::missing_field::MissingFieldDeserializer<serde_json::error::Error>>
<<vmm::vm_config::VmConfig as serde::de::Deserialize>::deserialize::__Field as serde::de::Deserialize>::deserialize::<serde_json::de::MapKey<serde_json::read::SliceRead>>
Line
Count
Source
601
4.53k
#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)]
<<vmm::vm_config::VmConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str::<serde_json::error::Error>
Line
Count
Source
601
4.49k
#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)]
Unexecuted instantiation: <<vmm::vm_config::VmConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_bytes::<_>
Unexecuted instantiation: <<vmm::vm_config::VmConfig as serde::de::Deserialize>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_u64::<_>
602
pub struct VmConfig {
603
    #[serde(default)]
604
    pub cpus: CpusConfig,
605
    #[serde(default)]
606
    pub memory: MemoryConfig,
607
    pub payload: Option<PayloadConfig>,
608
    pub rate_limit_groups: Option<Vec<RateLimiterGroupConfig>>,
609
    pub disks: Option<Vec<DiskConfig>>,
610
    pub net: Option<Vec<NetConfig>>,
611
    #[serde(default)]
612
    pub rng: RngConfig,
613
    pub balloon: Option<BalloonConfig>,
614
    pub fs: Option<Vec<FsConfig>>,
615
    pub pmem: Option<Vec<PmemConfig>>,
616
    #[serde(default = "default_serial")]
617
    pub serial: ConsoleConfig,
618
    #[serde(default = "default_console")]
619
    pub console: ConsoleConfig,
620
    #[cfg(target_arch = "x86_64")]
621
    #[serde(default)]
622
    pub debug_console: DebugConsoleConfig,
623
    pub devices: Option<Vec<DeviceConfig>>,
624
    pub user_devices: Option<Vec<UserDeviceConfig>>,
625
    pub vdpa: Option<Vec<VdpaConfig>>,
626
    pub vsock: Option<VsockConfig>,
627
    #[serde(default)]
628
    pub pvpanic: bool,
629
    #[serde(default)]
630
    pub iommu: bool,
631
    #[cfg(target_arch = "x86_64")]
632
    pub sgx_epc: Option<Vec<SgxEpcConfig>>,
633
    pub numa: Option<Vec<NumaConfig>>,
634
    #[serde(default)]
635
    pub watchdog: bool,
636
    #[cfg(feature = "guest_debug")]
637
    #[serde(default)]
638
    pub gdb: bool,
639
    pub pci_segments: Option<Vec<PciSegmentConfig>>,
640
    pub platform: Option<PlatformConfig>,
641
    pub tpm: Option<TpmConfig>,
642
    // Preserved FDs are the ones that share the same life-time as its holding
643
    // VmConfig instance, such as FDs for creating TAP devices.
644
    // Preserved FDs will stay open as long as the holding VmConfig instance is
645
    // valid, and will be closed when the holding VmConfig instance is destroyed.
646
    #[serde(skip)]
647
    pub preserved_fds: Option<Vec<i32>>,
648
}