vmm: AArch64: enable VM states save/restore for AArch64

The states of GIC should be part of the VM states. This commit
enables the AArch64 VM states save/restore by adding save/restore
of GIC states.

Signed-off-by: Henry Wang <Henry.Wang@arm.com>
This commit is contained in:
Henry Wang
2020-09-04 19:48:08 +08:00
committed by Rob Bradford
parent 7c40a78b66
commit 961c5f2cb2
5 changed files with 124 additions and 4 deletions

View File

@@ -4,6 +4,7 @@
pub mod kvm {
use crate::aarch64::gic::kvm::KvmGICDevice;
use crate::aarch64::gic::{Error, GICDevice};
use std::any::Any;
use std::{boxed::Box, result};
type Result<T> = result::Result<T, Error>;
use crate::layout;
@@ -82,6 +83,10 @@ pub mod kvm {
fn set_gicr_typers(&mut self, gicr_typers: Vec<u64>) {
self.gicr_typers = gicr_typers;
}
fn as_any_concrete_mut(&mut self) -> &mut dyn Any {
self
}
}
impl KvmGICDevice for KvmGICv2 {

View File

@@ -10,6 +10,7 @@ pub mod kvm {
use crate::layout;
use anyhow::anyhow;
use hypervisor::kvm::kvm_bindings;
use std::any::Any;
use std::convert::TryInto;
use std::sync::Arc;
use std::{boxed::Box, result};
@@ -163,6 +164,10 @@ pub mod kvm {
fn set_gicr_typers(&mut self, gicr_typers: Vec<u64>) {
self.gicr_typers = gicr_typers;
}
fn as_any_concrete_mut(&mut self) -> &mut dyn Any {
self
}
}
impl KvmGICDevice for KvmGICv3 {
@@ -217,7 +222,7 @@ pub mod kvm {
}
}
const GIC_V3_SNAPSHOT_ID: &str = "gic-v3";
pub const GIC_V3_SNAPSHOT_ID: &str = "gic-v3";
impl Snapshottable for KvmGICv3 {
fn id(&self) -> String {
GIC_V3_SNAPSHOT_ID.to_string()

View File

@@ -2,6 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
pub mod kvm {
use std::any::Any;
use std::convert::TryInto;
use std::sync::Arc;
use std::{boxed::Box, result};
@@ -76,6 +77,10 @@ pub mod kvm {
fn set_gicr_typers(&mut self, gicr_typers: Vec<u64>) {
self.gicr_typers = gicr_typers;
}
fn as_any_concrete_mut(&mut self) -> &mut dyn Any {
self
}
}
impl KvmGICDevice for KvmGICv3ITS {

View File

@@ -2,15 +2,16 @@
// SPDX-License-Identifier: Apache-2.0
pub mod dist_regs;
mod gicv2;
mod gicv3;
mod gicv3_its;
pub mod gicv2;
pub mod gicv3;
pub mod gicv3_its;
pub mod icc_regs;
pub mod redist_regs;
pub use self::dist_regs::{get_dist_regs, read_ctlr, set_dist_regs, write_ctlr};
pub use self::icc_regs::{get_icc_regs, set_icc_regs};
pub use self::redist_regs::{get_redist_regs, set_redist_regs};
use std::any::Any;
use std::result;
use std::sync::Arc;
@@ -59,6 +60,9 @@ pub trait GICDevice: Send {
/// Get the values of GICR_TYPER for each vCPU.
fn set_gicr_typers(&mut self, gicr_typers: Vec<u64>);
/// Downcast the trait object to its concrete type.
fn as_any_concrete_mut(&mut self) -> &mut dyn Any;
}
pub mod kvm {