From 444fb4e4b3902afaf1cec4dc917839fb978eea96 Mon Sep 17 00:00:00 2001 From: Alex Zenla Date: Mon, 13 May 2024 01:23:14 -0700 Subject: [PATCH] pvh work --- crates/runtime/src/launch.rs | 4 +++- crates/runtime/src/lib.rs | 8 +++++--- crates/xen/xenclient/src/x86acpi.rs | 11 ++++++----- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/crates/runtime/src/launch.rs b/crates/runtime/src/launch.rs index 534ebf5..5e9cd13 100644 --- a/crates/runtime/src/launch.rs +++ b/crates/runtime/src/launch.rs @@ -139,7 +139,9 @@ impl GuestLauncher { None }; let cmdline_options = [ - if request.debug { "debug" } else { "quiet" }, + "earlycon=xen,keep", + "earlyprintk=xen,keep", + "debug", "elevator=noop", ]; let cmdline = cmdline_options.join(" "); diff --git a/crates/runtime/src/lib.rs b/crates/runtime/src/lib.rs index 646d71c..1884e1c 100644 --- a/crates/runtime/src/lib.rs +++ b/crates/runtime/src/lib.rs @@ -7,7 +7,7 @@ use log::error; use loopdev::LoopControl; use tokio::sync::Semaphore; use uuid::Uuid; -use xenclient::{x86pv::X86PvPlatform, XenClient}; +use xenclient::{x86pvh::X86PvhPlatform, XenClient}; use xenstore::{XsdClient, XsdInterface}; use self::{ @@ -21,6 +21,8 @@ pub mod channel; pub mod ip; pub mod launch; +type RuntimePlatform = X86PvhPlatform; + pub struct GuestLoopInfo { pub device: String, pub file: String, @@ -49,13 +51,13 @@ pub struct GuestInfo { #[derive(Clone)] pub struct RuntimeContext { pub autoloop: AutoLoop, - pub xen: XenClient, + pub xen: XenClient, pub ipvendor: IpVendor, } impl RuntimeContext { pub async fn new(host_uuid: Uuid) -> Result { - let xen = XenClient::open(0, X86PvPlatform::new()).await?; + let xen = XenClient::open(0, RuntimePlatform::new()).await?; let ipv4_network = Ipv4Network::new(Ipv4Addr::new(10, 75, 80, 0), 24)?; let ipv6_network = Ipv6Network::from_str("fdd4:1476:6c7e::/48")?; let ipvend = diff --git a/crates/xen/xenclient/src/x86acpi.rs b/crates/xen/xenclient/src/x86acpi.rs index e8e1de3..983884d 100644 --- a/crates/xen/xenclient/src/x86acpi.rs +++ b/crates/xen/xenclient/src/x86acpi.rs @@ -377,8 +377,9 @@ pub struct acpi_info { pub pci_hi_len: uint64_t, } #[inline] -unsafe extern "C" fn test_bit(mut _b: libc::c_uint, mut _p: *const libc::c_void) -> libc::c_int { - panic!("Reached end of non-void function without returning"); +unsafe extern "C" fn test_bit(mut b: libc::c_uint, mut p: *const libc::c_void) -> libc::c_int { + let p = p as *const u8; + (*(p.offset((b >> 3) as isize)) & (1 << b & 7)) as i32 } #[no_mangle] pub static mut ssdt_s3: [libc::c_uchar; 49] = [ @@ -29650,9 +29651,9 @@ pub unsafe extern "C" fn acpi_build_tables( )]); i = 0 as libc::c_int; while secondary_tables[i as usize] != 0 { - (*addr_of_mut!((*xsdt).entry) - .offset((i + 1 as libc::c_int) as isize))[0] = - secondary_tables[i as usize]; + addr_of_mut!((*xsdt).entry) + .offset((i + 1 as libc::c_int) as isize) + .write_unaligned([secondary_tables[i as usize]]); i += 1; } (*xsdt).header.length =