multiple fixes and cleanup

This commit is contained in:
Alex Zenla
2024-01-14 16:00:44 -08:00
parent a9275c4bdf
commit c9f39699dc
4 changed files with 81 additions and 28 deletions

View File

@ -188,7 +188,7 @@ impl DomainControl<'_> {
&self,
domid: u32,
vcpu: u32,
context: Option<&VcpuGuestContext>,
context: &VcpuGuestContext,
) -> Result<(), XenCallError> {
trace!(
"domctl fd={} set_vcpu_context domid={} context={:?}",
@ -196,7 +196,10 @@ impl DomainControl<'_> {
domid,
context,
);
let mut wrapper = context.map(|ctx| VcpuGuestContextAny { value: *ctx });
let mut value = VcpuGuestContextAny {
value: *context,
};
let mut domctl = DomCtl {
cmd: XEN_DOMCTL_SETVCPUCONTEXT,
interface_version: XEN_DOMCTL_INTERFACE_VERSION,
@ -204,11 +207,7 @@ impl DomainControl<'_> {
value: DomCtlValue {
vcpu_context: DomCtlVcpuContext {
vcpu,
ctx: if wrapper.is_some() {
addr_of_mut!(wrapper) as c_ulong
} else {
0
},
ctx: addr_of_mut!(value) as c_ulong,
},
},
};

View File

@ -3,7 +3,7 @@ use crate::sys::{
};
use crate::{XenCall, XenCallError};
use log::{trace};
use log::trace;
use std::ffi::c_ulong;
use std::os::fd::AsRawFd;
use std::ptr::addr_of_mut;
@ -52,11 +52,14 @@ impl MemoryControl<'_> {
self.call.multicall(calls)?;
let code = calls[0].result;
if code > !0xfff {
return Err(XenCallError::new("failed to populate physmap"));
return Err(XenCallError::new(
format!("failed to populate physmap: {:#x}", code).as_str(),
));
}
if code as usize > extent_starts.len() {
return Err(XenCallError::new("failed to populate physmap"));
}
Ok(extent_starts[0..code as usize].to_vec())
let extents = extent_starts[0..code as usize].to_vec();
Ok(extents)
}
}