Skip to content

Commit 132d0f4

Browse files
Copilotsimongdavies
andcommitted
Remove OutBHandlerWrapper type
Co-authored-by: simongdavies <[email protected]>
1 parent d9c2455 commit 132d0f4

File tree

7 files changed

+26
-35
lines changed

7 files changed

+26
-35
lines changed

src/hyperlight_host/src/hypervisor/handlers.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,6 @@ pub trait OutBHandlerCaller: Sync + Send {
2828
fn call(&mut self, port: u16, payload: u32) -> Result<()>;
2929
}
3030

31-
/// A convenient type representing a common way `OutBHandler` implementations
32-
/// are passed as parameters to functions
33-
///
34-
/// Note: This needs to be wrapped in a Mutex to be able to grab a mutable
35-
/// reference to the underlying data (i.e., handle_outb in `Sandbox` takes
36-
/// a &mut self).
37-
pub type OutBHandlerWrapper = Arc<Mutex<dyn OutBHandlerCaller>>;
38-
3931
pub(crate) type OutBHandlerFunction = Box<dyn FnMut(u16, u32) -> Result<()> + Send>;
4032

4133
/// A `OutBHandler` implementation using a `OutBHandlerFunction`

src/hyperlight_host/src/hypervisor/hyperv_linux.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ extern crate mshv_bindings3 as mshv_bindings;
2525
extern crate mshv_ioctls3 as mshv_ioctls;
2626

2727
use std::fmt::{Debug, Formatter};
28+
use std::sync::{Arc, Mutex};
2829

2930
use log::{error, LevelFilter};
3031
#[cfg(mshv2)]
@@ -54,7 +55,7 @@ use super::fpu::{FP_CONTROL_WORD_DEFAULT, FP_TAG_WORD_DEFAULT, MXCSR_DEFAULT};
5455
use super::gdb::{DebugCommChannel, DebugMsg, DebugResponse, GuestDebug, MshvDebug};
5556
#[cfg(gdb)]
5657
use super::handlers::DbgMemAccessHandlerWrapper;
57-
use super::handlers::{MemAccessHandlerWrapper, OutBHandlerWrapper};
58+
use super::handlers::{MemAccessHandlerWrapper, OutBHandler, OutBHandlerCaller};
5859
use super::{
5960
Hypervisor, VirtualCPU, CR0_AM, CR0_ET, CR0_MP, CR0_NE, CR0_PE, CR0_PG, CR0_WP, CR4_OSFXSR,
6061
CR4_OSXMMEXCPT, CR4_PAE, EFER_LMA, EFER_LME, EFER_NX, EFER_SCE,
@@ -459,7 +460,7 @@ impl Hypervisor for HypervLinuxDriver {
459460
peb_addr: RawPtr,
460461
seed: u64,
461462
page_size: u32,
462-
outb_hdl: OutBHandlerWrapper,
463+
outb_hdl: Arc<Mutex<OutBHandler>>,
463464
mem_access_hdl: MemAccessHandlerWrapper,
464465
hv_handler: Option<HypervisorHandler>,
465466
max_guest_log_level: Option<LevelFilter>,
@@ -501,7 +502,7 @@ impl Hypervisor for HypervLinuxDriver {
501502
fn dispatch_call_from_host(
502503
&mut self,
503504
dispatch_func_addr: RawPtr,
504-
outb_handle_fn: OutBHandlerWrapper,
505+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
505506
mem_access_fn: MemAccessHandlerWrapper,
506507
hv_handler: Option<HypervisorHandler>,
507508
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
@@ -544,7 +545,7 @@ impl Hypervisor for HypervLinuxDriver {
544545
data: Vec<u8>,
545546
rip: u64,
546547
instruction_length: u64,
547-
outb_handle_fn: OutBHandlerWrapper,
548+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
548549
) -> Result<()> {
549550
let mut padded = [0u8; 4];
550551
let copy_len = data.len().min(4);

src/hyperlight_host/src/hypervisor/hyperv_windows.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use core::ffi::c_void;
1818
use std::fmt;
1919
use std::fmt::{Debug, Formatter};
2020
use std::string::String;
21+
use std::sync::{Arc, Mutex};
2122

2223
use hyperlight_common::mem::PAGE_SIZE_USIZE;
2324
use log::LevelFilter;
@@ -31,7 +32,7 @@ use windows::Win32::System::Hypervisor::{
3132
use super::fpu::{FP_TAG_WORD_DEFAULT, MXCSR_DEFAULT};
3233
#[cfg(gdb)]
3334
use super::handlers::DbgMemAccessHandlerWrapper;
34-
use super::handlers::{MemAccessHandlerWrapper, OutBHandlerWrapper};
35+
use super::handlers::{MemAccessHandlerWrapper, OutBHandler, OutBHandlerCaller};
3536
use super::surrogate_process::SurrogateProcess;
3637
use super::surrogate_process_manager::*;
3738
use super::windows_hypervisor_platform::{VMPartition, VMProcessor};
@@ -305,7 +306,7 @@ impl Hypervisor for HypervWindowsDriver {
305306
peb_address: RawPtr,
306307
seed: u64,
307308
page_size: u32,
308-
outb_hdl: OutBHandlerWrapper,
309+
outb_hdl: Arc<Mutex<OutBHandler>>,
309310
mem_access_hdl: MemAccessHandlerWrapper,
310311
hv_handler: Option<HypervisorHandler>,
311312
max_guest_log_level: Option<LevelFilter>,
@@ -347,7 +348,7 @@ impl Hypervisor for HypervWindowsDriver {
347348
fn dispatch_call_from_host(
348349
&mut self,
349350
dispatch_func_addr: RawPtr,
350-
outb_hdl: OutBHandlerWrapper,
351+
outb_hdl: Arc<Mutex<OutBHandler>>,
351352
mem_access_hdl: MemAccessHandlerWrapper,
352353
hv_handler: Option<HypervisorHandler>,
353354
#[cfg(gdb)] dbg_mem_access_hdl: DbgMemAccessHandlerWrapper,
@@ -388,7 +389,7 @@ impl Hypervisor for HypervWindowsDriver {
388389
data: Vec<u8>,
389390
rip: u64,
390391
instruction_length: u64,
391-
outb_handle_fn: OutBHandlerWrapper,
392+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
392393
) -> Result<()> {
393394
let mut padded = [0u8; 4];
394395
let copy_len = data.len().min(4);

src/hyperlight_host/src/hypervisor/hypervisor_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use windows::Win32::System::Hypervisor::{WHvCancelRunVirtualProcessor, WHV_PARTI
3939
use super::gdb::create_gdb_thread;
4040
#[cfg(gdb)]
4141
use crate::hypervisor::handlers::DbgMemAccessHandlerWrapper;
42-
use crate::hypervisor::handlers::{MemAccessHandlerWrapper, OutBHandlerWrapper};
42+
use crate::hypervisor::handlers::{MemAccessHandlerWrapper, OutBHandler};
4343
#[cfg(target_os = "windows")]
4444
use crate::hypervisor::wrappers::HandleWrapper;
4545
use crate::hypervisor::Hypervisor;
@@ -184,7 +184,7 @@ pub(crate) struct HvHandlerConfig {
184184
pub(crate) dispatch_function_addr: Arc<Mutex<Option<RawPtr>>>,
185185
pub(crate) max_init_time: Duration,
186186
pub(crate) max_exec_time: Duration,
187-
pub(crate) outb_handler: OutBHandlerWrapper,
187+
pub(crate) outb_handler: Arc<Mutex<OutBHandler>>,
188188
pub(crate) mem_access_handler: MemAccessHandlerWrapper,
189189
pub(crate) max_wait_for_cancellation: Duration,
190190
pub(crate) max_guest_log_level: Option<LevelFilter>,

src/hyperlight_host/src/hypervisor/kvm.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ limitations under the License.
1616

1717
use std::convert::TryFrom;
1818
use std::fmt::Debug;
19-
#[cfg(gdb)]
2019
use std::sync::{Arc, Mutex};
2120

2221
use kvm_bindings::{kvm_fpu, kvm_regs, kvm_userspace_memory_region, KVM_MEM_READONLY};
@@ -30,7 +29,7 @@ use super::fpu::{FP_CONTROL_WORD_DEFAULT, FP_TAG_WORD_DEFAULT, MXCSR_DEFAULT};
3029
use super::gdb::{DebugCommChannel, DebugMsg, DebugResponse, GuestDebug, KvmDebug, VcpuStopReason};
3130
#[cfg(gdb)]
3231
use super::handlers::DbgMemAccessHandlerWrapper;
33-
use super::handlers::{MemAccessHandlerWrapper, OutBHandlerWrapper};
32+
use super::handlers::{MemAccessHandlerWrapper, OutBHandler, OutBHandlerCaller};
3433
use super::{
3534
HyperlightExit, Hypervisor, VirtualCPU, CR0_AM, CR0_ET, CR0_MP, CR0_NE, CR0_PE, CR0_PG, CR0_WP,
3635
CR4_OSFXSR, CR4_OSXMMEXCPT, CR4_PAE, EFER_LMA, EFER_LME, EFER_NX, EFER_SCE,
@@ -404,7 +403,7 @@ impl Hypervisor for KVMDriver {
404403
peb_addr: RawPtr,
405404
seed: u64,
406405
page_size: u32,
407-
outb_hdl: OutBHandlerWrapper,
406+
outb_hdl: Arc<Mutex<OutBHandler>>,
408407
mem_access_hdl: MemAccessHandlerWrapper,
409408
hv_handler: Option<HypervisorHandler>,
410409
max_guest_log_level: Option<LevelFilter>,
@@ -445,7 +444,7 @@ impl Hypervisor for KVMDriver {
445444
fn dispatch_call_from_host(
446445
&mut self,
447446
dispatch_func_addr: RawPtr,
448-
outb_handle_fn: OutBHandlerWrapper,
447+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
449448
mem_access_fn: MemAccessHandlerWrapper,
450449
hv_handler: Option<HypervisorHandler>,
451450
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
@@ -487,7 +486,7 @@ impl Hypervisor for KVMDriver {
487486
data: Vec<u8>,
488487
_rip: u64,
489488
_instruction_length: u64,
490-
outb_handle_fn: OutBHandlerWrapper,
489+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
491490
) -> Result<()> {
492491
// KVM does not need RIP or instruction length, as it automatically sets the RIP
493492

src/hyperlight_host/src/hypervisor/mod.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,7 @@ use gdb::VcpuStopReason;
6767

6868
#[cfg(gdb)]
6969
use self::handlers::{DbgMemAccessHandlerCaller, DbgMemAccessHandlerWrapper};
70-
use self::handlers::{
71-
MemAccessHandlerCaller, MemAccessHandlerWrapper, OutBHandlerCaller, OutBHandlerWrapper,
72-
};
70+
use self::handlers::{MemAccessHandlerCaller, MemAccessHandlerWrapper, OutBHandler};
7371
use crate::hypervisor::hypervisor_handler::HypervisorHandler;
7472
use crate::mem::ptr::RawPtr;
7573

@@ -124,7 +122,7 @@ pub(crate) trait Hypervisor: Debug + Sync + Send {
124122
peb_addr: RawPtr,
125123
seed: u64,
126124
page_size: u32,
127-
outb_handle_fn: OutBHandlerWrapper,
125+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
128126
mem_access_fn: MemAccessHandlerWrapper,
129127
hv_handler: Option<HypervisorHandler>,
130128
guest_max_log_level: Option<LevelFilter>,
@@ -141,7 +139,7 @@ pub(crate) trait Hypervisor: Debug + Sync + Send {
141139
fn dispatch_call_from_host(
142140
&mut self,
143141
dispatch_func_addr: RawPtr,
144-
outb_handle_fn: OutBHandlerWrapper,
142+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
145143
mem_access_fn: MemAccessHandlerWrapper,
146144
hv_handler: Option<HypervisorHandler>,
147145
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
@@ -154,7 +152,7 @@ pub(crate) trait Hypervisor: Debug + Sync + Send {
154152
data: Vec<u8>,
155153
rip: u64,
156154
instruction_length: u64,
157-
outb_handle_fn: OutBHandlerWrapper,
155+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
158156
) -> Result<()>;
159157

160158
/// Run the vCPU
@@ -254,7 +252,7 @@ impl VirtualCPU {
254252
pub fn run(
255253
hv: &mut dyn Hypervisor,
256254
hv_handler: Option<HypervisorHandler>,
257-
outb_handle_fn: Arc<Mutex<dyn OutBHandlerCaller>>,
255+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
258256
mem_access_fn: Arc<Mutex<dyn MemAccessHandlerCaller>>,
259257
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<dyn DbgMemAccessHandlerCaller>>,
260258
) -> Result<()> {
@@ -341,7 +339,7 @@ pub(crate) mod tests {
341339

342340
#[cfg(gdb)]
343341
use super::handlers::DbgMemAccessHandlerWrapper;
344-
use super::handlers::{MemAccessHandlerWrapper, OutBHandlerWrapper};
342+
use super::handlers::{MemAccessHandlerWrapper, OutBHandler};
345343
use crate::hypervisor::hypervisor_handler::{
346344
HvHandlerConfig, HypervisorHandler, HypervisorHandlerAction,
347345
};
@@ -351,7 +349,7 @@ pub(crate) mod tests {
351349
use crate::{new_error, Result};
352350

353351
pub(crate) fn test_initialise(
354-
outb_hdl: OutBHandlerWrapper,
352+
outb_hdl: Arc<Mutex<OutBHandler>>,
355353
mem_access_hdl: MemAccessHandlerWrapper,
356354
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
357355
) -> Result<()> {

src/hyperlight_host/src/sandbox/outb.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use tracing_log::format_trace;
2626

2727
use super::host_funcs::FunctionRegistry;
2828
use super::mem_mgr::MemMgrWrapper;
29-
use crate::hypervisor::handlers::{OutBHandler, OutBHandlerFunction, OutBHandlerWrapper};
29+
use crate::hypervisor::handlers::{OutBHandler, OutBHandlerFunction};
3030
use crate::mem::mgr::SandboxMemoryManager;
3131
use crate::mem::shared_mem::HostSharedMemory;
3232
use crate::{new_error, HyperlightError, Result};
@@ -184,14 +184,14 @@ fn handle_outb_impl(
184184
}
185185

186186
/// Given a `MemMgrWrapper` and ` HostFuncsWrapper` -- both passed by _value_
187-
/// -- return an `OutBHandlerWrapper` wrapping the core OUTB handler logic.
187+
/// -- return an `Arc<Mutex<OutBHandler>>` wrapping the core OUTB handler logic.
188188
///
189189
/// TODO: pass at least the `host_funcs_wrapper` param by reference.
190190
#[instrument(skip_all, parent = Span::current(), level= "Trace")]
191191
pub(crate) fn outb_handler_wrapper(
192192
mut mem_mgr_wrapper: MemMgrWrapper<HostSharedMemory>,
193193
host_funcs_wrapper: Arc<Mutex<FunctionRegistry>>,
194-
) -> OutBHandlerWrapper {
194+
) -> Arc<Mutex<OutBHandler>> {
195195
let outb_func: OutBHandlerFunction = Box::new(move |port, payload| {
196196
handle_outb_impl(
197197
&mut mem_mgr_wrapper,

0 commit comments

Comments
 (0)