devices: Simplify device state to support Versionize

In order to support using Versionize for state structures it is necessary
to use simpler, primitive, data types in the state definitions used for
snapshot restore.

Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
Rob Bradford 2021-04-23 10:55:05 +01:00
parent 8614a0ab2f
commit f643ba6111
3 changed files with 9 additions and 14 deletions

View File

@ -23,10 +23,6 @@ use vm_memory::GuestAddress;
use vm_migration::{Migratable, MigratableError, Pausable, Snapshot, Snapshottable, Transportable};
use vmm_sys_util::eventfd::EventFd;
#[derive(Serialize, Deserialize)]
#[serde(remote = "GuestAddress")]
pub struct GuestAddressDef(pub u64);
type Result<T> = result::Result<T, Error>;
// I/O REDIRECTION TABLE REGISTER
@ -143,8 +139,7 @@ pub struct IoapicState {
reg_sel: u32,
reg_entries: [RedirectionTableEntry; NUM_IOAPIC_PINS],
used_entries: [bool; NUM_IOAPIC_PINS],
#[serde(with = "GuestAddressDef")]
apic_address: GuestAddress,
apic_address: u64,
}
impl BusDevice for Ioapic {
@ -281,7 +276,7 @@ impl Ioapic {
reg_sel: self.reg_sel,
reg_entries: self.reg_entries,
used_entries: self.used_entries,
apic_address: self.apic_address,
apic_address: self.apic_address.0,
}
}
@ -290,7 +285,7 @@ impl Ioapic {
self.reg_sel = state.reg_sel;
self.reg_entries = state.reg_entries;
self.used_entries = state.used_entries;
self.apic_address = state.apic_address;
self.apic_address = GuestAddress(state.apic_address);
for (irq, entry) in self.used_entries.iter().enumerate() {
if *entry {
self.update_entry(irq)?;

View File

@ -80,7 +80,7 @@ pub struct SerialState {
modem_status: u8,
scratch: u8,
baud_divisor: u16,
in_buffer: VecDeque<u8>,
in_buffer: Vec<u8>,
}
impl Serial {
@ -223,7 +223,7 @@ impl Serial {
modem_status: self.modem_status,
scratch: self.scratch,
baud_divisor: self.baud_divisor,
in_buffer: self.in_buffer.clone(),
in_buffer: self.in_buffer.clone().into(),
}
}
@ -236,7 +236,7 @@ impl Serial {
self.modem_status = state.modem_status;
self.scratch = state.scratch;
self.baud_divisor = state.baud_divisor;
self.in_buffer = state.in_buffer.clone();
self.in_buffer = state.in_buffer.clone().into();
}
}

View File

@ -95,7 +95,7 @@ pub struct Pl011State {
dmacr: u32,
int_enabled: u32,
int_level: u32,
read_fifo: VecDeque<u8>,
read_fifo: Vec<u8>,
ilpr: u32,
ibrd: u32,
fbrd: u32,
@ -141,7 +141,7 @@ impl Pl011 {
dmacr: self.dmacr,
int_enabled: self.int_enabled,
int_level: self.int_level,
read_fifo: self.read_fifo.clone(),
read_fifo: self.read_fifo.clone().into(),
ilpr: self.ilpr,
ibrd: self.ibrd,
fbrd: self.fbrd,
@ -159,7 +159,7 @@ impl Pl011 {
self.dmacr = state.dmacr;
self.int_enabled = state.int_enabled;
self.int_level = state.int_level;
self.read_fifo = state.read_fifo.clone();
self.read_fifo = state.read_fifo.clone().into();
self.ilpr = state.ilpr;
self.ibrd = state.ibrd;
self.fbrd = state.fbrd;