Skip to content

Commit 4755d5b

Browse files
committed
snapshot: remove Versionize serialization functions
We do not need these any more, because we will never serialize to older versions of Firecracker snapshots. Signed-off-by: Babis Chalios <[email protected]>
1 parent d2d60ec commit 4755d5b

File tree

7 files changed

+12
-151
lines changed

7 files changed

+12
-151
lines changed

src/vmm/src/device_manager/persist.rs

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,13 @@ pub struct DeviceStates {
181181
/// Vsock device state.
182182
pub vsock_device: Option<ConnectedVsockState>,
183183
/// Balloon device state.
184-
#[version(start = 2, ser_fn = "balloon_serialize")]
184+
#[version(start = 2)]
185185
pub balloon_device: Option<ConnectedBalloonState>,
186186
/// Mmds version.
187-
#[version(start = 3, ser_fn = "mmds_version_serialize")]
187+
#[version(start = 3)]
188188
pub mmds_version: Option<MmdsVersionState>,
189189
/// Entropy device state.
190-
#[version(start = 4, ser_fn = "entropy_serialize")]
190+
#[version(start = 4)]
191191
pub entropy_device: Option<ConnectedEntropyState>,
192192
}
193193

@@ -202,39 +202,6 @@ pub enum SharedDeviceType {
202202
Entropy(Arc<Mutex<Entropy>>),
203203
}
204204

205-
impl DeviceStates {
206-
fn balloon_serialize(&mut self, target_version: u16) -> VersionizeResult<()> {
207-
if target_version < 2 && self.balloon_device.is_some() {
208-
return Err(VersionizeError::Semantic(
209-
"Target version does not implement the virtio-balloon device.".to_owned(),
210-
));
211-
}
212-
213-
Ok(())
214-
}
215-
216-
fn mmds_version_serialize(&mut self, target_version: u16) -> VersionizeResult<()> {
217-
if target_version < 3 && self.mmds_version.is_some() {
218-
warn!(
219-
"Target version does not support persisting the MMDS version. The default will be \
220-
used when restoring."
221-
);
222-
}
223-
224-
Ok(())
225-
}
226-
227-
fn entropy_serialize(&mut self, target_version: u16) -> VersionizeResult<()> {
228-
if target_version < 4 && self.entropy_device.is_some() {
229-
return Err(VersionizeError::Semantic(
230-
"Target version does not support persisting the virtio-rng device.".to_owned(),
231-
));
232-
}
233-
234-
Ok(())
235-
}
236-
}
237-
238205
pub struct MMIODevManagerConstructorArgs<'a> {
239206
pub mem: GuestMemoryMmap,
240207
pub vm: &'a VmFd,

src/vmm/src/devices/virtio/block/persist.rs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -88,35 +88,17 @@ impl From<FileEngineTypeState> for FileEngineType {
8888
pub struct BlockState {
8989
id: String,
9090
partuuid: Option<String>,
91-
#[version(
92-
start = 2,
93-
ser_fn = "block_cache_type_ser",
94-
default_fn = "default_cache_type_flush"
95-
)]
91+
#[version(start = 2, default_fn = "default_cache_type_flush")]
9692
cache_type: CacheTypeState,
9793
root_device: bool,
9894
disk_path: String,
9995
virtio_state: VirtioDeviceState,
10096
rate_limiter_state: RateLimiterState,
10197
#[version(start = 3)]
102-
// We don't need to specify a `ser_fn` for the `file_engine_type` since snapshots created in
103-
// v1.0 are incompatible with older FC versions (due to incompatible notification suppression
104-
// feature).
10598
file_engine_type: FileEngineTypeState,
10699
}
107100

108101
impl BlockState {
109-
fn block_cache_type_ser(&mut self, target_version: u16) -> VersionizeResult<()> {
110-
if target_version < 3 && self.cache_type != CacheTypeState::Unsafe {
111-
warn!(
112-
"Target version does not implement the current cache type. Defaulting to \
113-
\"unsafe\" mode."
114-
);
115-
}
116-
117-
Ok(())
118-
}
119-
120102
fn default_cache_type_flush(_source_version: u16) -> CacheTypeState {
121103
CacheTypeState::Unsafe
122104
}

src/vmm/src/devices/virtio/net/persist.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use crate::vstate::memory::GuestMemoryMmap;
3131
pub struct NetConfigSpaceState {
3232
#[version(end = 2, default_fn = "def_guest_mac_old")]
3333
guest_mac: [u8; MAC_ADDR_LEN as usize],
34-
#[version(start = 2, de_fn = "de_guest_mac_v2", ser_fn = "ser_guest_mac_v2")]
34+
#[version(start = 2, de_fn = "de_guest_mac_v2")]
3535
guest_mac_v2: Option<MacAddr>,
3636
}
3737

@@ -45,16 +45,6 @@ impl NetConfigSpaceState {
4545
Ok(())
4646
}
4747

48-
fn ser_guest_mac_v2(&mut self, _target_version: u16) -> VersionizeResult<()> {
49-
// v1.1 and older versions do not have optional MAC address.
50-
warn!("Saving to older snapshot version, optional MAC address will not be saved.");
51-
match self.guest_mac_v2 {
52-
Some(mac) => self.guest_mac = mac.into(),
53-
None => self.guest_mac = Default::default(),
54-
}
55-
Ok(())
56-
}
57-
5848
fn def_guest_mac_old(_: u16) -> [u8; MAC_ADDR_LEN as usize] {
5949
// v1.2 and newer don't use this field anyway
6050
Default::default()

src/vmm/src/devices/virtio/persist.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,7 @@ pub struct VirtioDeviceState {
103103
/// List of queues.
104104
pub queues: Vec<QueueState>,
105105
/// The MMIO interrupt status.
106-
#[version(
107-
start = 2,
108-
de_fn = "de_interrupt_status",
109-
ser_fn = "ser_interrupt_status"
110-
)]
106+
#[version(start = 2, de_fn = "de_interrupt_status")]
111107
pub interrupt_status: u32,
112108
/// The MMIO interrupt status as a usize.
113109
#[version(end = 2)]
@@ -188,12 +184,6 @@ impl VirtioDeviceState {
188184
}
189185
Ok(())
190186
}
191-
192-
fn ser_interrupt_status(&mut self, _target_version: u16) -> VersionizeResult<()> {
193-
// v1 uses a usize type for interrupt status.
194-
self.interrupt_status_old = self.interrupt_status as usize;
195-
Ok(())
196-
}
197187
}
198188

199189
/// Transport information saved in snapshot.

src/vmm/src/persist.rs

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,13 @@ pub struct VmInfo {
5454
/// Guest memory size.
5555
pub mem_size_mib: u64,
5656
/// smt information
57-
#[version(start = 2, default_fn = "def_smt", ser_fn = "ser_smt")]
57+
#[version(start = 2, default_fn = "def_smt")]
5858
pub smt: bool,
5959
/// CPU template type
60-
#[version(
61-
start = 2,
62-
default_fn = "def_cpu_template",
63-
ser_fn = "ser_cpu_template"
64-
)]
60+
#[version(start = 2, default_fn = "def_cpu_template")]
6561
pub cpu_template: StaticCpuTemplate,
6662
/// Boot source information.
67-
#[version(start = 2, default_fn = "def_boot_source", ser_fn = "ser_boot_source")]
63+
#[version(start = 2, default_fn = "def_boot_source")]
6864
pub boot_source: BootSourceConfig,
6965
}
7066

@@ -74,33 +70,15 @@ impl VmInfo {
7470
false
7571
}
7672

77-
fn ser_smt(&mut self, _target_version: u16) -> VersionizeResult<()> {
78-
// v1.1 and older versions do not include smt info.
79-
warn!("Saving to older snapshot version, SMT information will not be saved.");
80-
Ok(())
81-
}
82-
8373
fn def_cpu_template(_: u16) -> StaticCpuTemplate {
8474
warn!("CPU template field not found in snapshot.");
8575
StaticCpuTemplate::default()
8676
}
8777

88-
fn ser_cpu_template(&mut self, _target_version: u16) -> VersionizeResult<()> {
89-
// v1.1 and older versions do not include cpu template info.
90-
warn!("Saving to older snapshot version, CPU template information will not be saved.");
91-
Ok(())
92-
}
93-
9478
fn def_boot_source(_: u16) -> BootSourceConfig {
9579
warn!("Boot source information not found in snapshot.");
9680
BootSourceConfig::default()
9781
}
98-
99-
fn ser_boot_source(&mut self, _target_version: u16) -> VersionizeResult<()> {
100-
// v1.1 and older versions do not include boot source info.
101-
warn!("Saving to older snapshot version, boot source information will not be saved.");
102-
Ok(())
103-
}
10482
}
10583

10684
impl From<&VmResources> for VmInfo {

src/vmm/src/vstate/vcpu/aarch64.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ pub struct VcpuState {
258258
#[version(end = 2, default_fn = "default_old_regs")]
259259
pub old_regs: Vec<Aarch64RegisterOld>,
260260
/// Vcpu registers.
261-
#[version(start = 2, de_fn = "de_regs", ser_fn = "ser_regs")]
261+
#[version(start = 2, de_fn = "de_regs")]
262262
pub regs: Aarch64RegisterVec,
263263
/// We will be using the mpidr for passing it to the VmState.
264264
/// The VmState will give this away for saving restoring the icc and redistributor
@@ -291,16 +291,6 @@ impl VcpuState {
291291
self.regs = regs;
292292
Ok(())
293293
}
294-
295-
fn ser_regs(&mut self, _target_version: u16) -> VersionizeResult<()> {
296-
self.old_regs = self
297-
.regs
298-
.iter()
299-
.map(TryInto::try_into)
300-
.collect::<Result<_, _>>()
301-
.map_err(|e: &str| VersionizeError::Serialize(e.into()))?;
302-
Ok(())
303-
}
304294
}
305295

306296
#[cfg(test)]

src/vmm/src/vstate/vcpu/x86_64.rs

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ pub struct VcpuState {
550550
#[version(end = 3, default_fn = "default_msrs")]
551551
pub msrs: Msrs,
552552
/// Saved msrs.
553-
#[version(start = 3, de_fn = "de_saved_msrs", ser_fn = "ser_saved_msrs")]
553+
#[version(start = 3, de_fn = "de_saved_msrs")]
554554
pub saved_msrs: Vec<Msrs>,
555555
/// Debug regs.
556556
pub debug_regs: kvm_debugregs,
@@ -569,7 +569,7 @@ pub struct VcpuState {
569569
/// Xsave.
570570
pub xsave: kvm_xsave,
571571
/// Tsc khz.
572-
#[version(start = 2, default_fn = "default_tsc_khz", ser_fn = "ser_tsc")]
572+
#[version(start = 2, default_fn = "default_tsc_khz")]
573573
pub tsc_khz: Option<u32>,
574574
}
575575

@@ -579,18 +579,6 @@ impl VcpuState {
579579
None
580580
}
581581

582-
fn ser_tsc(&mut self, _target_version: u16) -> VersionizeResult<()> {
583-
// v0.24 and older versions do not support TSC scaling.
584-
warn!(
585-
"Saving to older snapshot version, TSC freq {}",
586-
self.tsc_khz
587-
.map(|freq| freq.to_string() + "KHz not included in snapshot.")
588-
.unwrap_or_else(|| "not available.".to_string())
589-
);
590-
591-
Ok(())
592-
}
593-
594582
fn default_msrs(_source_version: u16) -> Msrs {
595583
// Safe to unwrap since Msrs::new() only returns an error if the number
596584
// of elements exceeds KVM_MAX_MSR_ENTRIES
@@ -603,30 +591,6 @@ impl VcpuState {
603591
}
604592
Ok(())
605593
}
606-
607-
fn ser_saved_msrs(&mut self, target_version: u16) -> VersionizeResult<()> {
608-
match self.saved_msrs.len() {
609-
0 => Err(VersionizeError::Serialize(
610-
"Cannot serialize MSRs because the MSR list is empty".to_string(),
611-
)),
612-
1 => {
613-
if target_version < 3 {
614-
self.msrs = self.saved_msrs[0].clone();
615-
Ok(())
616-
} else {
617-
Err(VersionizeError::Serialize(format!(
618-
"Cannot serialize MSRs to target version {}",
619-
target_version
620-
)))
621-
}
622-
}
623-
_ => Err(VersionizeError::Serialize(
624-
"Cannot serialize MSRs. The uVM state needs to save
625-
more MSRs than the target snapshot version supports."
626-
.to_string(),
627-
)),
628-
}
629-
}
630594
}
631595

632596
#[cfg(test)]

0 commit comments

Comments
 (0)