mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-05 14:11:32 +00:00
actually allocate max memory
This commit is contained in:
@ -3,7 +3,7 @@ use crate::{XenCall, XenCallError};
|
||||
|
||||
use std::ffi::c_ulong;
|
||||
|
||||
use std::ptr::addr_of;
|
||||
use std::ptr::addr_of_mut;
|
||||
|
||||
pub struct MemoryControl<'a> {
|
||||
call: &'a XenCall,
|
||||
@ -22,19 +22,28 @@ impl MemoryControl<'_> {
|
||||
mem_flags: u32,
|
||||
extent_starts: &[u64],
|
||||
) -> Result<Vec<u64>, XenCallError> {
|
||||
let extent_starts = extent_starts.to_vec();
|
||||
let reservation = MemoryReservation {
|
||||
extent_start: addr_of!(extent_starts) as c_ulong,
|
||||
let mut extent_starts = extent_starts.to_vec();
|
||||
let mut reservation = MemoryReservation {
|
||||
extent_start: extent_starts.as_mut_ptr() as c_ulong,
|
||||
nr_extents,
|
||||
extent_order,
|
||||
mem_flags,
|
||||
domid: domid as u16,
|
||||
};
|
||||
self.call.hypercall2(
|
||||
let code = self.call.hypercall2(
|
||||
HYPERVISOR_MEMORY_OP,
|
||||
XEN_MEM_POPULATE_PHYSMAP as c_ulong,
|
||||
addr_of!(reservation) as c_ulong,
|
||||
addr_of_mut!(reservation) as c_ulong,
|
||||
)?;
|
||||
Ok(extent_starts)
|
||||
|
||||
if code < 0 {
|
||||
return Err(XenCallError::new("failed to populate physmap"));
|
||||
}
|
||||
|
||||
if code as usize > extent_starts.len() {
|
||||
return Err(XenCallError::new("failed to populate physmap"));
|
||||
}
|
||||
|
||||
Ok(extent_starts[0..code as usize].to_vec())
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user