Skip to content

Commit 38f0977

Browse files
committed
Remove MemMgrWrapper abstraction because it's useless overhead with no benefit. Also remove WrapperGetter
Signed-off-by: Ludvig Liljenberg <[email protected]>
1 parent b419bde commit 38f0977

File tree

14 files changed

+131
-255
lines changed

14 files changed

+131
-255
lines changed

src/hyperlight_host/src/func/guest_err.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@ limitations under the License.
1717
use hyperlight_common::flatbuffer_wrappers::guest_error::ErrorCode;
1818

1919
use crate::error::HyperlightError::{GuestError, StackOverflow};
20+
use crate::mem::mgr::SandboxMemoryManager;
2021
use crate::mem::shared_mem::HostSharedMemory;
2122
use crate::metrics::{METRIC_GUEST_ERROR, METRIC_GUEST_ERROR_LABEL_CODE};
22-
use crate::sandbox::mem_mgr::MemMgrWrapper;
2323
use crate::{Result, log_then_return};
2424

2525
/// Check for a guest error and return an `Err` if one was found,
2626
/// and `Ok` if one was not found.
27-
pub(crate) fn check_for_guest_error(mgr: &mut MemMgrWrapper<HostSharedMemory>) -> Result<()> {
28-
let guest_err = mgr.as_mut().get_guest_error().ok();
27+
pub(crate) fn check_for_guest_error(
28+
mgr: &mut SandboxMemoryManager<HostSharedMemory>,
29+
) -> Result<()> {
30+
let guest_err = mgr.get_guest_error().ok();
2931
let Some(guest_err) = guest_err else {
3032
return Ok(());
3133
};

src/hyperlight_host/src/func/host_functions.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ impl Registerable for UninitializedSandbox {
6161
return_type: Output::TYPE,
6262
};
6363

64-
(*hfs).register_host_function(name.to_string(), entry, self.mgr.unwrap_mgr_mut())
64+
(*hfs).register_host_function(name.to_string(), entry, &mut self.mgr)
6565
}
6666
#[cfg(all(feature = "seccomp", target_os = "linux"))]
6767
fn register_host_function_with_syscalls<Args: ParameterTuple, Output: SupportedReturnType>(
@@ -82,7 +82,7 @@ impl Registerable for UninitializedSandbox {
8282
return_type: Output::TYPE,
8383
};
8484

85-
(*hfs).register_host_function(name.to_string(), entry, self.mgr.unwrap_mgr_mut())
85+
(*hfs).register_host_function(name.to_string(), entry, &mut self.mgr)
8686
}
8787
}
8888

@@ -210,7 +210,7 @@ pub(crate) fn register_host_function<Args: ParameterTuple, Output: SupportedRetu
210210
.host_funcs
211211
.try_lock()
212212
.map_err(|e| new_error!("Error locking at {}:{}: {}", file!(), line!(), e))?
213-
.register_host_function(name.to_string(), entry, sandbox.mgr.unwrap_mgr_mut())?;
213+
.register_host_function(name.to_string(), entry, &mut sandbox.mgr)?;
214214

215215
Ok(())
216216
}

src/hyperlight_host/src/hypervisor/gdb/mod.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ use x86_64_target::HyperlightSandboxTarget;
4747

4848
use super::InterruptHandle;
4949
use crate::mem::layout::SandboxMemoryLayout;
50+
use crate::mem::mgr::SandboxMemoryManager;
5051
use crate::mem::shared_mem::HostSharedMemory;
51-
use crate::sandbox::mem_mgr::MemMgrWrapper;
5252
use crate::{HyperlightError, new_error};
5353

5454
#[derive(Debug, Error)]
@@ -210,7 +210,7 @@ pub(super) trait GuestDebug {
210210
&mut self,
211211
vcpu_fd: &Self::Vcpu,
212212
addr: u64,
213-
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
213+
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
214214
) -> crate::Result<()> {
215215
let addr = self.translate_gva(vcpu_fd, addr)?;
216216

@@ -235,7 +235,7 @@ pub(super) trait GuestDebug {
235235
vcpu_fd: &Self::Vcpu,
236236
mut gva: u64,
237237
mut data: &mut [u8],
238-
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
238+
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
239239
) -> crate::Result<()> {
240240
let data_len = data.len();
241241
log::debug!("Read addr: {:X} len: {:X}", gva, data_len);
@@ -259,7 +259,6 @@ pub(super) trait GuestDebug {
259259
dbg_mem_access_fn
260260
.try_lock()
261261
.map_err(|e| new_error!("Error locking at {}:{}: {}", file!(), line!(), e))?
262-
.unwrap_mgr_mut()
263262
.get_shared_mem_mut()
264263
.copy_to_slice(&mut data[..read_len], offset)?;
265264

@@ -285,7 +284,7 @@ pub(super) trait GuestDebug {
285284
&mut self,
286285
vcpu_fd: &Self::Vcpu,
287286
addr: u64,
288-
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
287+
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
289288
) -> crate::Result<()> {
290289
let addr = self.translate_gva(vcpu_fd, addr)?;
291290

@@ -309,7 +308,7 @@ pub(super) trait GuestDebug {
309308
vcpu_fd: &Self::Vcpu,
310309
mut gva: u64,
311310
mut data: &[u8],
312-
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
311+
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
313312
) -> crate::Result<()> {
314313
let data_len = data.len();
315314
log::debug!("Write addr: {:X} len: {:X}", gva, data_len);
@@ -333,7 +332,6 @@ pub(super) trait GuestDebug {
333332
dbg_mem_access_fn
334333
.try_lock()
335334
.map_err(|e| new_error!("Error locking at {}:{}: {}", file!(), line!(), e))?
336-
.unwrap_mgr_mut()
337335
.get_shared_mem_mut()
338336
.copy_from_slice(&data[..write_len], offset)?;
339337

src/hyperlight_host/src/hypervisor/hyperv_linux.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,13 @@ use super::{HyperlightExit, Hypervisor, InterruptHandle, LinuxInterruptHandle, V
7575
use crate::HyperlightError;
7676
use crate::hypervisor::get_memory_access_violation;
7777
use crate::mem::memory_region::{MemoryRegion, MemoryRegionFlags};
78+
use crate::mem::mgr::SandboxMemoryManager;
7879
use crate::mem::ptr::{GuestPtr, RawPtr};
7980
use crate::mem::shared_mem::HostSharedMemory;
8081
use crate::sandbox::SandboxConfiguration;
8182
#[cfg(feature = "trace_guest")]
8283
use crate::sandbox::TraceInfo;
8384
use crate::sandbox::host_funcs::FunctionRegistry;
84-
use crate::sandbox::mem_mgr::MemMgrWrapper;
8585
use crate::sandbox::outb::handle_outb;
8686
#[cfg(crashdump)]
8787
use crate::sandbox::uninitialized::SandboxRuntimeConfig;
@@ -94,8 +94,8 @@ mod debug {
9494
use super::mshv_bindings::hv_x64_exception_intercept_message;
9595
use super::{HypervLinuxDriver, *};
9696
use crate::hypervisor::gdb::{DebugMsg, DebugResponse, VcpuStopReason, X86_64Regs};
97+
use crate::mem::mgr::SandboxMemoryManager;
9798
use crate::mem::shared_mem::HostSharedMemory;
98-
use crate::sandbox::mem_mgr::MemMgrWrapper;
9999
use crate::{Result, new_error};
100100

101101
impl HypervLinuxDriver {
@@ -126,7 +126,7 @@ mod debug {
126126
pub(crate) fn process_dbg_request(
127127
&mut self,
128128
req: DebugMsg,
129-
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
129+
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
130130
) -> Result<DebugResponse> {
131131
if let Some(debug) = self.debug.as_mut() {
132132
match req {
@@ -174,7 +174,6 @@ mod debug {
174174
.map_err(|e| {
175175
new_error!("Error locking at {}:{}: {}", file!(), line!(), e)
176176
})?
177-
.unwrap_mgr()
178177
.layout
179178
.get_guest_code_address();
180179

@@ -312,7 +311,7 @@ pub(crate) struct HypervLinuxDriver {
312311
orig_rsp: GuestPtr,
313312
entrypoint: u64,
314313
interrupt_handle: Arc<LinuxInterruptHandle>,
315-
mem_mgr: Option<MemMgrWrapper<HostSharedMemory>>,
314+
mem_mgr: Option<SandboxMemoryManager<HostSharedMemory>>,
316315
host_funcs: Option<Arc<Mutex<FunctionRegistry>>>,
317316

318317
sandbox_regions: Vec<MemoryRegion>, // Initially mapped regions when sandbox is created
@@ -584,10 +583,10 @@ impl Hypervisor for HypervLinuxDriver {
584583
peb_addr: RawPtr,
585584
seed: u64,
586585
page_size: u32,
587-
mem_mgr: MemMgrWrapper<HostSharedMemory>,
586+
mem_mgr: SandboxMemoryManager<HostSharedMemory>,
588587
host_funcs: Arc<Mutex<FunctionRegistry>>,
589588
max_guest_log_level: Option<LevelFilter>,
590-
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
589+
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
591590
) -> Result<()> {
592591
self.mem_mgr = Some(mem_mgr);
593592
self.host_funcs = Some(host_funcs);
@@ -659,7 +658,7 @@ impl Hypervisor for HypervLinuxDriver {
659658
fn dispatch_call_from_host(
660659
&mut self,
661660
dispatch_func_addr: RawPtr,
662-
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
661+
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
663662
) -> Result<()> {
664663
// Reset general purpose registers, then set RIP and RSP
665664
let regs = StandardRegisters {
@@ -1021,7 +1020,7 @@ impl Hypervisor for HypervLinuxDriver {
10211020
#[cfg(gdb)]
10221021
fn handle_debug(
10231022
&mut self,
1024-
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
1023+
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
10251024
stop_reason: VcpuStopReason,
10261025
) -> Result<()> {
10271026
if self.debug.is_none() {

src/hyperlight_host/src/hypervisor/hyperv_windows.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ use crate::hypervisor::fpu::FP_CONTROL_WORD_DEFAULT;
5858
use crate::hypervisor::get_memory_access_violation;
5959
use crate::hypervisor::wrappers::WHvGeneralRegisters;
6060
use crate::mem::memory_region::{MemoryRegion, MemoryRegionFlags};
61+
use crate::mem::mgr::SandboxMemoryManager;
6162
use crate::mem::ptr::{GuestPtr, RawPtr};
6263
use crate::mem::shared_mem::HostSharedMemory;
6364
#[cfg(feature = "trace_guest")]
6465
use crate::sandbox::TraceInfo;
6566
use crate::sandbox::host_funcs::FunctionRegistry;
66-
use crate::sandbox::mem_mgr::MemMgrWrapper;
6767
use crate::sandbox::outb::handle_outb;
6868
#[cfg(crashdump)]
6969
use crate::sandbox::uninitialized::SandboxRuntimeConfig;
@@ -78,8 +78,8 @@ mod debug {
7878
use super::{HypervWindowsDriver, *};
7979
use crate::Result;
8080
use crate::hypervisor::gdb::{DebugMsg, DebugResponse, VcpuStopReason, X86_64Regs};
81+
use crate::mem::mgr::SandboxMemoryManager;
8182
use crate::mem::shared_mem::HostSharedMemory;
82-
use crate::sandbox::mem_mgr::MemMgrWrapper;
8383

8484
impl HypervWindowsDriver {
8585
/// Resets the debug information to disable debugging
@@ -279,7 +279,7 @@ pub(crate) struct HypervWindowsDriver {
279279
entrypoint: u64,
280280
orig_rsp: GuestPtr,
281281
interrupt_handle: Arc<WindowsInterruptHandle>,
282-
mem_mgr: Option<MemMgrWrapper<HostSharedMemory>>,
282+
mem_mgr: Option<SandboxMemoryManager<HostSharedMemory>>,
283283
host_funcs: Option<Arc<Mutex<FunctionRegistry>>>,
284284

285285
sandbox_regions: Vec<MemoryRegion>, // Initially mapped regions when sandbox is created
@@ -599,10 +599,10 @@ impl Hypervisor for HypervWindowsDriver {
599599
peb_address: RawPtr,
600600
seed: u64,
601601
page_size: u32,
602-
mem_mgr: MemMgrWrapper<HostSharedMemory>,
602+
mem_mgr: SandboxMemoryManager<HostSharedMemory>,
603603
host_funcs: Arc<Mutex<FunctionRegistry>>,
604604
max_guest_log_level: Option<LevelFilter>,
605-
#[cfg(gdb)] dbg_mem_access_hdl: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
605+
#[cfg(gdb)] dbg_mem_access_hdl: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
606606
) -> Result<()> {
607607
self.mem_mgr = Some(mem_mgr);
608608
self.host_funcs = Some(host_funcs);
@@ -652,7 +652,7 @@ impl Hypervisor for HypervWindowsDriver {
652652
fn dispatch_call_from_host(
653653
&mut self,
654654
dispatch_func_addr: RawPtr,
655-
#[cfg(gdb)] dbg_mem_access_hdl: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
655+
#[cfg(gdb)] dbg_mem_access_hdl: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
656656
) -> Result<()> {
657657
// Reset general purpose registers, then set RIP and RSP
658658
let regs = WHvGeneralRegisters {
@@ -955,7 +955,7 @@ impl Hypervisor for HypervWindowsDriver {
955955
#[cfg(gdb)]
956956
fn handle_debug(
957957
&mut self,
958-
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
958+
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
959959
stop_reason: super::gdb::VcpuStopReason,
960960
) -> Result<()> {
961961
if self.debug.is_none() {

src/hyperlight_host/src/hypervisor/kvm.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ use super::{HyperlightExit, Hypervisor, InterruptHandle, LinuxInterruptHandle, V
4242
use crate::HyperlightError;
4343
use crate::hypervisor::get_memory_access_violation;
4444
use crate::mem::memory_region::{MemoryRegion, MemoryRegionFlags};
45+
use crate::mem::mgr::SandboxMemoryManager;
4546
use crate::mem::ptr::{GuestPtr, RawPtr};
4647
use crate::mem::shared_mem::HostSharedMemory;
4748
use crate::sandbox::SandboxConfiguration;
4849
#[cfg(feature = "trace_guest")]
4950
use crate::sandbox::TraceInfo;
5051
use crate::sandbox::host_funcs::FunctionRegistry;
51-
use crate::sandbox::mem_mgr::MemMgrWrapper;
5252
use crate::sandbox::outb::handle_outb;
5353
#[cfg(crashdump)]
5454
use crate::sandbox::uninitialized::SandboxRuntimeConfig;
@@ -86,8 +86,8 @@ mod debug {
8686
use crate::hypervisor::gdb::{
8787
DebugMsg, DebugResponse, GuestDebug, KvmDebug, VcpuStopReason, X86_64Regs,
8888
};
89+
use crate::mem::mgr::SandboxMemoryManager;
8990
use crate::mem::shared_mem::HostSharedMemory;
90-
use crate::sandbox::mem_mgr::MemMgrWrapper;
9191
use crate::{Result, new_error};
9292

9393
impl KVMDriver {
@@ -118,7 +118,7 @@ mod debug {
118118
pub(crate) fn process_dbg_request(
119119
&mut self,
120120
req: DebugMsg,
121-
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
121+
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
122122
) -> Result<DebugResponse> {
123123
if let Some(debug) = self.debug.as_mut() {
124124
match req {
@@ -166,7 +166,6 @@ mod debug {
166166
.map_err(|e| {
167167
new_error!("Error locking at {}:{}: {}", file!(), line!(), e)
168168
})?
169-
.unwrap_mgr()
170169
.layout
171170
.get_guest_code_address();
172171

@@ -292,7 +291,7 @@ pub(crate) struct KVMDriver {
292291
entrypoint: u64,
293292
orig_rsp: GuestPtr,
294293
interrupt_handle: Arc<LinuxInterruptHandle>,
295-
mem_mgr: Option<MemMgrWrapper<HostSharedMemory>>,
294+
mem_mgr: Option<SandboxMemoryManager<HostSharedMemory>>,
296295
host_funcs: Option<Arc<Mutex<FunctionRegistry>>>,
297296

298297
sandbox_regions: Vec<MemoryRegion>, // Initially mapped regions when sandbox is created
@@ -472,10 +471,10 @@ impl Hypervisor for KVMDriver {
472471
peb_addr: RawPtr,
473472
seed: u64,
474473
page_size: u32,
475-
mem_mgr: MemMgrWrapper<HostSharedMemory>,
474+
mem_mgr: SandboxMemoryManager<HostSharedMemory>,
476475
host_funcs: Arc<Mutex<FunctionRegistry>>,
477476
max_guest_log_level: Option<LevelFilter>,
478-
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
477+
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
479478
) -> Result<()> {
480479
self.mem_mgr = Some(mem_mgr);
481480
self.host_funcs = Some(host_funcs);
@@ -570,7 +569,7 @@ impl Hypervisor for KVMDriver {
570569
fn dispatch_call_from_host(
571570
&mut self,
572571
dispatch_func_addr: RawPtr,
573-
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
572+
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
574573
) -> Result<()> {
575574
// Reset general purpose registers, then set RIP and RSP
576575
let regs = kvm_regs {
@@ -898,7 +897,7 @@ impl Hypervisor for KVMDriver {
898897
#[cfg(gdb)]
899898
fn handle_debug(
900899
&mut self,
901-
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
900+
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
902901
stop_reason: VcpuStopReason,
903902
) -> Result<()> {
904903
if self.debug.is_none() {

src/hyperlight_host/src/hypervisor/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,10 @@ use std::time::Duration;
7070
#[cfg(gdb)]
7171
use gdb::VcpuStopReason;
7272

73+
use crate::mem::mgr::SandboxMemoryManager;
7374
use crate::mem::ptr::RawPtr;
7475
use crate::mem::shared_mem::HostSharedMemory;
7576
use crate::sandbox::host_funcs::FunctionRegistry;
76-
use crate::sandbox::mem_mgr::MemMgrWrapper;
7777

7878
cfg_if::cfg_if! {
7979
if #[cfg(feature = "init-paging")] {
@@ -141,10 +141,10 @@ pub(crate) trait Hypervisor: Debug + Send {
141141
peb_addr: RawPtr,
142142
seed: u64,
143143
page_size: u32,
144-
mem_mgr: MemMgrWrapper<HostSharedMemory>,
144+
mem_mgr: SandboxMemoryManager<HostSharedMemory>,
145145
host_funcs: Arc<Mutex<FunctionRegistry>>,
146146
guest_max_log_level: Option<LevelFilter>,
147-
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
147+
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
148148
) -> Result<()>;
149149

150150
/// Map a region of host memory into the sandbox.
@@ -171,7 +171,7 @@ pub(crate) trait Hypervisor: Debug + Send {
171171
fn dispatch_call_from_host(
172172
&mut self,
173173
dispatch_func_addr: RawPtr,
174-
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
174+
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
175175
) -> Result<()>;
176176

177177
/// Handle an IO exit from the internally stored vCPU.
@@ -236,7 +236,7 @@ pub(crate) trait Hypervisor: Debug + Send {
236236
/// handles the cases when the vCPU stops due to a Debug event
237237
fn handle_debug(
238238
&mut self,
239-
_dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
239+
_dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
240240
_stop_reason: VcpuStopReason,
241241
) -> Result<()> {
242242
unimplemented!()
@@ -289,7 +289,7 @@ impl VirtualCPU {
289289
#[instrument(err(Debug), skip_all, parent = Span::current(), level = "Trace")]
290290
pub(crate) fn run(
291291
hv: &mut dyn Hypervisor,
292-
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
292+
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
293293
) -> Result<()> {
294294
loop {
295295
match hv.run() {

0 commit comments

Comments
 (0)