unpause domain so domain can run during boot

This commit is contained in:
Alex Zenla
2024-01-17 01:41:17 -08:00
parent 5c1bb3d8fc
commit 6ca61410ad
7 changed files with 68 additions and 8 deletions

View File

@ -82,6 +82,8 @@ pub struct BootState {
pub image_info: BootImageInfo,
pub shared_info_frame: u64,
pub initrd_segment: DomainSegment,
pub store_evtchn: u32,
pub console_evtchn: u32,
}
impl BootSetup<'_> {
@ -282,7 +284,8 @@ impl BootSetup<'_> {
}
let initrd_segment = initrd_segment.unwrap();
let store_evtchn = self.domctl.call.evtchn_alloc_unbound(self.domid, 0)?;
let console_evtchn = self.domctl.call.evtchn_alloc_unbound(self.domid, 0)?;
let state = BootState {
kernel_segment,
start_info_segment,
@ -294,6 +297,8 @@ impl BootSetup<'_> {
page_table,
image_info,
initrd_segment,
store_evtchn,
console_evtchn,
shared_info_frame: 0,
};
debug!("BootSetup initialize state={:?}", state);
@ -491,10 +496,10 @@ impl BootSetup<'_> {
(*info).first_p2m_pfn = state.p2m_segment.pfn;
(*info).nr_p2m_frames = state.p2m_segment.pages;
(*info).flags = 0;
(*info).store_evtchn = 0;
(*info).store_evtchn = state.store_evtchn;
(*info).store_mfn = self.phys.p2m[state.xenstore_segment.pfn as usize];
(*info).console.mfn = self.phys.p2m[state.console_segment.pfn as usize];
(*info).console.evtchn = 0;
(*info).console.evtchn = state.console_evtchn;
(*info).mod_start = state.initrd_segment.vstart;
(*info).mod_len = state.initrd_segment.size;
for (i, c) in cmdline.chars().enumerate() {

View File

@ -12,6 +12,7 @@ use std::string::FromUtf8Error;
use xencall::domctl::DomainControl;
use xencall::sys::CreateDomain;
use xencall::{XenCall, XenCallError};
use xenevtchn::EventChannelError;
use xenstore::bus::XsdBusError;
use xenstore::client::{XsdClient, XsdInterface};
@ -69,6 +70,12 @@ impl From<FromUtf8Error> for XenClientError {
}
}
impl From<EventChannelError> for XenClientError {
fn from(value: EventChannelError) -> Self {
XenClientError::new(value.to_string().as_str())
}
}
impl XenClient {
pub fn open() -> Result<XenClient, XenClientError> {
let store = XsdClient::open()?;