diff --git a/crates/xen/xenclient/examples/boot.rs b/crates/xen/xenclient/examples/boot.rs index 34c3934..4e7cae6 100644 --- a/crates/xen/xenclient/examples/boot.rs +++ b/crates/xen/xenclient/examples/boot.rs @@ -20,10 +20,10 @@ async fn main() -> Result<()> { backend_domid: 0, name: "xenclient-test".to_string(), max_vcpus: 1, - mem_mb: 300, + mem_mb: 512, kernel: fs::read(&kernel_image_path).await?, initrd: fs::read(&initrd_path).await?, - cmdline: "debug elevator=noop earlyprintk=xen".to_string(), + cmdline: "console=hvc0 debug earlyprintk=xen,keep loglevel=10".to_string(), swap_console_backend: None, disks: vec![], channels: vec![], diff --git a/crates/xen/xenclient/src/lib.rs b/crates/xen/xenclient/src/lib.rs index 6673c9c..6e1d9e8 100644 --- a/crates/xen/xenclient/src/lib.rs +++ b/crates/xen/xenclient/src/lib.rs @@ -362,7 +362,7 @@ impl XenClient { .clone() .unwrap_or("xenconsoled".to_string()) .to_string(), - initialized: false, + initialized: true, }, &dom_path, &backend_dom_path, diff --git a/crates/xen/xenclient/src/x86acpi.rs b/crates/xen/xenclient/src/x86acpi.rs index 2438c15..e8e1de3 100644 --- a/crates/xen/xenclient/src/x86acpi.rs +++ b/crates/xen/xenclient/src/x86acpi.rs @@ -5,7 +5,10 @@ non_snake_case, non_upper_case_globals, unused_assignments, - unused_mut + unused_mut, + static_mut_refs, + clippy::single_match, + clippy::unnecessary_cast )] use std::ptr::addr_of_mut; diff --git a/crates/xen/xenclient/src/x86pvh.rs b/crates/xen/xenclient/src/x86pvh.rs index 94bbd64..4bd7a33 100644 --- a/crates/xen/xenclient/src/x86pvh.rs +++ b/crates/xen/xenclient/src/x86pvh.rs @@ -288,7 +288,7 @@ impl X86PvhPlatform { } ptr = ptr .add(size_of::()) - .add((*sd).length as usize) as *mut u8; + .add((*sd).length as usize); } std::ptr::null_mut() } @@ -630,7 +630,7 @@ impl BootSetupPlatform for X86PvhPlatform { let mut start_info_size = size_of::(); start_info_size += domain.cmdline.len() + 1; - start_info_size += size_of::() * memmap.len(); + start_info_size += size_of::() * memmap.len(); self.start_info_segment = Some(domain.alloc_segment(0, start_info_size as u64).await?); let pt = domain @@ -657,7 +657,10 @@ impl BootSetupPlatform for X86PvhPlatform { ) .await?; - domain.consoles.push((0, special_pfn(SPECIALPAGE_CONSOLE))); + let evtchn = domain.call.evtchn_alloc_unbound(domain.domid, 0).await?; + domain + .consoles + .push((evtchn, special_pfn(SPECIALPAGE_CONSOLE))); domain.store_mfn = special_pfn(SPECIALPAGE_XENSTORE); Ok(()) @@ -673,9 +676,16 @@ impl BootSetupPlatform for X86PvhPlatform { .start_info_segment .as_ref() .ok_or_else(|| Error::GenericError("start_info_segment missing".to_string()))?; - let ptr = domain.phys.pfn_to_ptr(start_info_segment.pfn, 1).await?; - let byte_slice = - unsafe { slice::from_raw_parts_mut(ptr as *mut u8, X86_PAGE_SIZE as usize) }; + let ptr = domain + .phys + .pfn_to_ptr(start_info_segment.pfn, start_info_segment.pages) + .await?; + let byte_slice = unsafe { + slice::from_raw_parts_mut( + ptr as *mut u8, + (self.page_size() * start_info_segment.pages) as usize, + ) + }; byte_slice.fill(0); let info = ptr as *mut HvmStartInfo; unsafe { @@ -886,7 +896,7 @@ unsafe extern "C" fn acpi_mem_free(_: *mut acpi_ctxt, _: *mut libc::c_void, _: u unsafe extern "C" fn acpi_v2p(ctxt: *mut acpi_ctxt, v: *mut c_void) -> libc::c_ulong { let ctx = (*ctxt).ptr as *mut AcpiBuildContext; - (*ctx).guest_start + (v.sub((*ctx).buf as usize) as u64) + (*ctx).guest_start + (v as u64 - ((*ctx).buf as u64)) } #[repr(C)] diff --git a/kernel/krata-x86_64.config b/kernel/krata-x86_64.config index abadc28..2a17441 100644 --- a/kernel/krata-x86_64.config +++ b/kernel/krata-x86_64.config @@ -228,7 +228,9 @@ CONFIG_CHECKPOINT_RESTORE=y CONFIG_SCHED_AUTOGROUP=y CONFIG_RELAY=y CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="" +CONFIG_INITRAMFS_SOURCE="/var/lib/krata/guest/initrd.cpio" +CONFIG_INITRAMFS_ROOT_UID=0 +CONFIG_INITRAMFS_ROOT_GID=0 CONFIG_RD_GZIP=y CONFIG_RD_BZIP2=y CONFIG_RD_LZMA=y @@ -236,6 +238,14 @@ CONFIG_RD_XZ=y CONFIG_RD_LZO=y CONFIG_RD_LZ4=y CONFIG_RD_ZSTD=y +CONFIG_INITRAMFS_COMPRESSION_GZIP=y +# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set +# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set +# CONFIG_INITRAMFS_COMPRESSION_XZ is not set +# CONFIG_INITRAMFS_COMPRESSION_LZO is not set +# CONFIG_INITRAMFS_COMPRESSION_LZ4 is not set +# CONFIG_INITRAMFS_COMPRESSION_ZSTD is not set +# CONFIG_INITRAMFS_COMPRESSION_NONE is not set # CONFIG_BOOT_CONFIG is not set CONFIG_INITRAMFS_PRESERVE_MTIME=y CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y @@ -495,7 +505,9 @@ CONFIG_HOTPLUG_CPU=y # CONFIG_COMPAT_VDSO is not set # CONFIG_LEGACY_VSYSCALL_XONLY is not set CONFIG_LEGACY_VSYSCALL_NONE=y -# CONFIG_CMDLINE_BOOL is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="earlyprintk=xen,keep debug loglevel=10" +CONFIG_CMDLINE_OVERRIDE=y CONFIG_MODIFY_LDT_SYSCALL=y # CONFIG_STRICT_SIGALTSTACK_SIZE is not set CONFIG_HAVE_LIVEPATCH=y