This commit is contained in:
Alex Zenla
2024-04-26 00:20:09 -07:00
parent 2c7210d85e
commit f479963cd5
4 changed files with 10 additions and 12 deletions

View File

@ -346,6 +346,8 @@ pub struct ArchDomainConfig {
pub misc_flags: u32, pub misc_flags: u32,
} }
pub const X86_EMU_LAPIC: u32 = 1 << 0;
#[repr(C)] #[repr(C)]
#[derive(Copy, Clone, Debug, Default)] #[derive(Copy, Clone, Debug, Default)]
#[cfg(target_arch = "aarch64")] #[cfg(target_arch = "aarch64")]

View File

@ -91,7 +91,6 @@ impl BootSetup<'_> {
kernel_segment: &Option<DomainSegment>, kernel_segment: &Option<DomainSegment>,
initrd_segment: &Option<DomainSegment>, initrd_segment: &Option<DomainSegment>,
) -> Result<()> { ) -> Result<()> {
self.call.set_address_size(self.domid, 64).await?;
arch.meminit(self, total_pages, kernel_segment, initrd_segment) arch.meminit(self, total_pages, kernel_segment, initrd_segment)
.await?; .await?;
Ok(()) Ok(())

View File

@ -31,8 +31,7 @@ use std::str::FromStr;
use std::time::Duration; use std::time::Duration;
use uuid::Uuid; use uuid::Uuid;
use xencall::sys::{ use xencall::sys::{
CreateDomain, DOMCTL_DEV_RDM_RELAXED, XEN_DOMCTL_CDF_HAP, XEN_DOMCTL_CDF_HVM_GUEST, CreateDomain, DOMCTL_DEV_RDM_RELAXED, X86_EMU_LAPIC, XEN_DOMCTL_CDF_HAP, XEN_DOMCTL_CDF_HVM_GUEST, XEN_DOMCTL_CDF_IOMMU
XEN_DOMCTL_CDF_IOMMU,
}; };
use xencall::XenCall; use xencall::XenCall;
use xenstore::{ use xenstore::{
@ -155,15 +154,14 @@ impl XenClient {
} }
pub async fn create(&self, config: &DomainConfig) -> Result<CreatedDomain> { pub async fn create(&self, config: &DomainConfig) -> Result<CreatedDomain> {
let mut domain = CreateDomain { let mut domain = CreateDomain::default();
..Default::default()
};
domain.max_vcpus = config.max_vcpus; domain.max_vcpus = config.max_vcpus;
if cfg!(target_arch = "aarch64") { if cfg!(target_arch = "aarch64") {
domain.flags = XEN_DOMCTL_CDF_HVM_GUEST | XEN_DOMCTL_CDF_HAP; domain.flags = XEN_DOMCTL_CDF_HVM_GUEST | XEN_DOMCTL_CDF_HAP;
} else { } else {
domain.flags = XEN_DOMCTL_CDF_IOMMU; domain.flags = XEN_DOMCTL_CDF_HVM_GUEST | XEN_DOMCTL_CDF_HAP | XEN_DOMCTL_CDF_IOMMU;
domain.arch_domain_config.emulation_flags = X86_EMU_LAPIC;
} }
let domid = self.call.create_domain(domain).await?; let domid = self.call.create_domain(domain).await?;

View File

@ -762,7 +762,6 @@ impl ArchBootSetup for X86BootSetup {
.as_ref() .as_ref()
.ok_or(Error::MemorySetupFailed("page_table_segment missing"))?; .ok_or(Error::MemorySetupFailed("page_table_segment missing"))?;
let pg_pfn = page_table_segment.pfn; let pg_pfn = page_table_segment.pfn;
let pg_mfn = setup.phys.p2m[pg_pfn as usize];
setup.phys.unmap(pg_pfn)?; setup.phys.unmap(pg_pfn)?;
setup.phys.unmap(p2m_segment.pfn)?; setup.phys.unmap(p2m_segment.pfn)?;
@ -772,10 +771,10 @@ impl ArchBootSetup for X86BootSetup {
let e820 = self.e820_sanitize(map, mem_kb, 0)?; let e820 = self.e820_sanitize(map, mem_kb, 0)?;
setup.call.set_memory_map(setup.domid, e820).await?; setup.call.set_memory_map(setup.domid, e820).await?;
setup // setup
.call // .call
.mmuext(setup.domid, MMUEXT_PIN_L4_TABLE, pg_mfn, 0) // .mmuext(setup.domid, MMUEXT_PIN_L4_TABLE, pg_mfn, 0)
.await?; // .await?;
Ok(()) Ok(())
} }