From f643ba6111edda95e74f30f9f142a528c6a1adf5 Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Fri, 23 Apr 2021 10:55:05 +0100 Subject: [PATCH] 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 --- devices/src/ioapic.rs | 11 +++-------- devices/src/legacy/serial.rs | 6 +++--- devices/src/legacy/uart_pl011.rs | 6 +++--- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/devices/src/ioapic.rs b/devices/src/ioapic.rs index e4c4c7f44..3387981e8 100644 --- a/devices/src/ioapic.rs +++ b/devices/src/ioapic.rs @@ -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 = result::Result; // 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)?; diff --git a/devices/src/legacy/serial.rs b/devices/src/legacy/serial.rs index 904165cd9..2b10edb98 100644 --- a/devices/src/legacy/serial.rs +++ b/devices/src/legacy/serial.rs @@ -80,7 +80,7 @@ pub struct SerialState { modem_status: u8, scratch: u8, baud_divisor: u16, - in_buffer: VecDeque, + in_buffer: Vec, } 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(); } } diff --git a/devices/src/legacy/uart_pl011.rs b/devices/src/legacy/uart_pl011.rs index 1ae9f86ea..c43cfe11a 100644 --- a/devices/src/legacy/uart_pl011.rs +++ b/devices/src/legacy/uart_pl011.rs @@ -95,7 +95,7 @@ pub struct Pl011State { dmacr: u32, int_enabled: u32, int_level: u32, - read_fifo: VecDeque, + read_fifo: Vec, 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;