Skip to content

Commit af0707b

Browse files
Copilotsimongdavies
andcommitted
Remove OutBHandlerWrapper type - replace with Arc<Mutex<OutBHandler>>
Co-authored-by: simongdavies <[email protected]>
1 parent 63ee7c5 commit af0707b

File tree

8 files changed

+28
-40
lines changed

8 files changed

+28
-40
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 & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ 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;
2928
use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
29+
use std::sync::{Arc, Mutex};
3030

3131
use log::{LevelFilter, error};
3232
#[cfg(mshv2)]
@@ -60,7 +60,7 @@ use super::gdb::{
6060
};
6161
#[cfg(gdb)]
6262
use super::handlers::DbgMemAccessHandlerWrapper;
63-
use super::handlers::{MemAccessHandlerWrapper, OutBHandlerWrapper};
63+
use super::handlers::{MemAccessHandlerWrapper, OutBHandler, OutBHandlerCaller};
6464
#[cfg(feature = "init-paging")]
6565
use super::{
6666
CR0_AM, CR0_ET, CR0_MP, CR0_NE, CR0_PE, CR0_PG, CR0_WP, CR4_OSFXSR, CR4_OSXMMEXCPT, CR4_PAE,
@@ -544,7 +544,7 @@ impl Hypervisor for HypervLinuxDriver {
544544
peb_addr: RawPtr,
545545
seed: u64,
546546
page_size: u32,
547-
outb_hdl: OutBHandlerWrapper,
547+
outb_hdl: Arc<Mutex<OutBHandler>>,
548548
mem_access_hdl: MemAccessHandlerWrapper,
549549
max_guest_log_level: Option<LevelFilter>,
550550
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
@@ -617,7 +617,7 @@ impl Hypervisor for HypervLinuxDriver {
617617
fn dispatch_call_from_host(
618618
&mut self,
619619
dispatch_func_addr: RawPtr,
620-
outb_handle_fn: OutBHandlerWrapper,
620+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
621621
mem_access_fn: MemAccessHandlerWrapper,
622622
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
623623
) -> Result<()> {
@@ -658,7 +658,7 @@ impl Hypervisor for HypervLinuxDriver {
658658
data: Vec<u8>,
659659
rip: u64,
660660
instruction_length: u64,
661-
outb_handle_fn: OutBHandlerWrapper,
661+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
662662
) -> Result<()> {
663663
let mut padded = [0u8; 4];
664664
let copy_len = data.len().min(4);

src/hyperlight_host/src/hypervisor/hyperv_windows.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ limitations under the License.
1717
use std::fmt;
1818
use std::fmt::{Debug, Formatter};
1919
use std::string::String;
20-
use std::sync::Arc;
2120
use std::sync::atomic::{AtomicBool, Ordering};
21+
use std::sync::{Arc, Mutex};
2222

2323
use log::LevelFilter;
2424
use tracing::{Span, instrument};
@@ -45,7 +45,7 @@ use {
4545
};
4646

4747
use super::fpu::{FP_TAG_WORD_DEFAULT, MXCSR_DEFAULT};
48-
use super::handlers::{MemAccessHandlerWrapper, OutBHandlerWrapper};
48+
use super::handlers::{MemAccessHandlerWrapper, OutBHandler, OutBHandlerCaller};
4949
use super::surrogate_process::SurrogateProcess;
5050
use super::surrogate_process_manager::*;
5151
use super::windows_hypervisor_platform::{VMPartition, VMProcessor};
@@ -579,7 +579,7 @@ impl Hypervisor for HypervWindowsDriver {
579579
peb_address: RawPtr,
580580
seed: u64,
581581
page_size: u32,
582-
outb_hdl: OutBHandlerWrapper,
582+
outb_hdl: Arc<Mutex<OutBHandler>>,
583583
mem_access_hdl: MemAccessHandlerWrapper,
584584
max_guest_log_level: Option<LevelFilter>,
585585
#[cfg(gdb)] dbg_mem_access_hdl: DbgMemAccessHandlerWrapper,
@@ -634,7 +634,7 @@ impl Hypervisor for HypervWindowsDriver {
634634
fn dispatch_call_from_host(
635635
&mut self,
636636
dispatch_func_addr: RawPtr,
637-
outb_hdl: OutBHandlerWrapper,
637+
outb_hdl: Arc<Mutex<OutBHandler>>,
638638
mem_access_hdl: MemAccessHandlerWrapper,
639639
#[cfg(gdb)] dbg_mem_access_hdl: DbgMemAccessHandlerWrapper,
640640
) -> Result<()> {
@@ -673,7 +673,7 @@ impl Hypervisor for HypervWindowsDriver {
673673
data: Vec<u8>,
674674
rip: u64,
675675
instruction_length: u64,
676-
outb_handle_fn: OutBHandlerWrapper,
676+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
677677
) -> Result<()> {
678678
let mut padded = [0u8; 4];
679679
let copy_len = data.len().min(4);

src/hyperlight_host/src/hypervisor/kvm.rs

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

1717
use std::convert::TryFrom;
1818
use std::fmt::Debug;
19-
use std::sync::Arc;
20-
#[cfg(gdb)]
21-
use std::sync::Mutex;
2219
use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
20+
use std::sync::{Arc, Mutex};
2321

2422
use kvm_bindings::{kvm_fpu, kvm_regs, kvm_userspace_memory_region};
2523
use kvm_ioctls::Cap::UserMemory;
@@ -34,7 +32,7 @@ use super::fpu::{FP_CONTROL_WORD_DEFAULT, FP_TAG_WORD_DEFAULT, MXCSR_DEFAULT};
3432
use super::gdb::{DebugCommChannel, DebugMsg, DebugResponse, GuestDebug, KvmDebug, VcpuStopReason};
3533
#[cfg(gdb)]
3634
use super::handlers::DbgMemAccessHandlerWrapper;
37-
use super::handlers::{MemAccessHandlerWrapper, OutBHandlerWrapper};
35+
use super::handlers::{MemAccessHandlerWrapper, OutBHandler, OutBHandlerCaller};
3836
#[cfg(feature = "init-paging")]
3937
use super::{
4038
CR0_AM, CR0_ET, CR0_MP, CR0_NE, CR0_PE, CR0_PG, CR0_WP, CR4_OSFXSR, CR4_OSXMMEXCPT, CR4_PAE,
@@ -448,7 +446,7 @@ impl Hypervisor for KVMDriver {
448446
peb_addr: RawPtr,
449447
seed: u64,
450448
page_size: u32,
451-
outb_hdl: OutBHandlerWrapper,
449+
outb_hdl: Arc<Mutex<OutBHandler>>,
452450
mem_access_hdl: MemAccessHandlerWrapper,
453451
max_guest_log_level: Option<LevelFilter>,
454452
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
@@ -528,7 +526,7 @@ impl Hypervisor for KVMDriver {
528526
fn dispatch_call_from_host(
529527
&mut self,
530528
dispatch_func_addr: RawPtr,
531-
outb_handle_fn: OutBHandlerWrapper,
529+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
532530
mem_access_fn: MemAccessHandlerWrapper,
533531
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
534532
) -> Result<()> {
@@ -568,7 +566,7 @@ impl Hypervisor for KVMDriver {
568566
data: Vec<u8>,
569567
_rip: u64,
570568
_instruction_length: u64,
571-
outb_handle_fn: OutBHandlerWrapper,
569+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
572570
) -> Result<()> {
573571
// KVM does not need RIP or instruction length, as it automatically sets the RIP
574572

src/hyperlight_host/src/hypervisor/mod.rs

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

7171
#[cfg(gdb)]
7272
use self::handlers::{DbgMemAccessHandlerCaller, DbgMemAccessHandlerWrapper};
73-
use self::handlers::{
74-
MemAccessHandlerCaller, MemAccessHandlerWrapper, OutBHandlerCaller, OutBHandlerWrapper,
75-
};
73+
use self::handlers::{MemAccessHandlerCaller, MemAccessHandlerWrapper, OutBHandler};
7674
use crate::mem::ptr::RawPtr;
7775

7876
cfg_if::cfg_if! {
@@ -126,7 +124,7 @@ pub(crate) trait Hypervisor: Debug + Sync + Send {
126124
peb_addr: RawPtr,
127125
seed: u64,
128126
page_size: u32,
129-
outb_handle_fn: OutBHandlerWrapper,
127+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
130128
mem_access_fn: MemAccessHandlerWrapper,
131129
guest_max_log_level: Option<LevelFilter>,
132130
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
@@ -151,7 +149,7 @@ pub(crate) trait Hypervisor: Debug + Sync + Send {
151149
fn dispatch_call_from_host(
152150
&mut self,
153151
dispatch_func_addr: RawPtr,
154-
outb_handle_fn: OutBHandlerWrapper,
152+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
155153
mem_access_fn: MemAccessHandlerWrapper,
156154
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
157155
) -> Result<()>;
@@ -163,7 +161,7 @@ pub(crate) trait Hypervisor: Debug + Sync + Send {
163161
data: Vec<u8>,
164162
rip: u64,
165163
instruction_length: u64,
166-
outb_handle_fn: OutBHandlerWrapper,
164+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
167165
) -> Result<()>;
168166

169167
/// Run the vCPU
@@ -261,7 +259,7 @@ impl VirtualCPU {
261259
#[instrument(err(Debug), skip_all, parent = Span::current(), level = "Trace")]
262260
pub fn run(
263261
hv: &mut dyn Hypervisor,
264-
outb_handle_fn: Arc<Mutex<dyn OutBHandlerCaller>>,
262+
outb_handle_fn: Arc<Mutex<OutBHandler>>,
265263
mem_access_fn: Arc<Mutex<dyn MemAccessHandlerCaller>>,
266264
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<dyn DbgMemAccessHandlerCaller>>,
267265
) -> Result<()> {

src/hyperlight_host/src/sandbox/initialized_multi_use.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use crate::func::guest_err::check_for_guest_error;
3434
use crate::func::{ParameterTuple, SupportedReturnType};
3535
#[cfg(gdb)]
3636
use crate::hypervisor::handlers::DbgMemAccessHandlerWrapper;
37-
use crate::hypervisor::handlers::{MemAccessHandlerCaller, OutBHandlerCaller};
37+
use crate::hypervisor::handlers::{MemAccessHandlerCaller, OutBHandler};
3838
use crate::hypervisor::{Hypervisor, InterruptHandle};
3939
#[cfg(unix)]
4040
use crate::mem::memory_region::MemoryRegionType;
@@ -57,7 +57,7 @@ pub struct MultiUseSandbox {
5757
pub(super) _host_funcs: Arc<Mutex<FunctionRegistry>>,
5858
pub(crate) mem_mgr: MemMgrWrapper<HostSharedMemory>,
5959
vm: Box<dyn Hypervisor>,
60-
out_hdl: Arc<Mutex<dyn OutBHandlerCaller>>,
60+
out_hdl: Arc<Mutex<OutBHandler>>,
6161
mem_hdl: Arc<Mutex<dyn MemAccessHandlerCaller>>,
6262
dispatch_ptr: RawPtr,
6363
#[cfg(gdb)]
@@ -75,7 +75,7 @@ impl MultiUseSandbox {
7575
host_funcs: Arc<Mutex<FunctionRegistry>>,
7676
mgr: MemMgrWrapper<HostSharedMemory>,
7777
vm: Box<dyn Hypervisor>,
78-
out_hdl: Arc<Mutex<dyn OutBHandlerCaller>>,
78+
out_hdl: Arc<Mutex<OutBHandler>>,
7979
mem_hdl: Arc<Mutex<dyn MemAccessHandlerCaller>>,
8080
dispatch_ptr: RawPtr,
8181
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,

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::{HyperlightError, Result, new_error};
@@ -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,

src/hyperlight_host/src/sandbox/uninitialized_evolve.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use super::mem_access::dbg_mem_access_handler_wrapper;
2727
use super::uninitialized::SandboxRuntimeConfig;
2828
use crate::HyperlightError::NoHypervisorFound;
2929
use crate::hypervisor::Hypervisor;
30-
use crate::hypervisor::handlers::{MemAccessHandlerCaller, OutBHandlerCaller};
30+
use crate::hypervisor::handlers::{MemAccessHandlerCaller, OutBHandler};
3131
use crate::mem::layout::SandboxMemoryLayout;
3232
use crate::mem::mgr::SandboxMemoryManager;
3333
use crate::mem::ptr::{GuestPtr, RawPtr};
@@ -66,7 +66,7 @@ where
6666
Arc<Mutex<FunctionRegistry>>,
6767
MemMgrWrapper<HostSharedMemory>,
6868
Box<dyn Hypervisor>,
69-
Arc<Mutex<dyn OutBHandlerCaller>>,
69+
Arc<Mutex<OutBHandler>>,
7070
Arc<Mutex<dyn MemAccessHandlerCaller>>,
7171
RawPtr,
7272
) -> Result<ResSandbox>,

0 commit comments

Comments
 (0)