Skip to content

Commit f724291

Browse files
committed
Generify worker thread on macOS
Rather than creating the worker thread on macOS differently than we do for the other x86 tasks, use the same associative function by taking advnatage of the generic `WorkerMessage` enum. Signed-off-by: Jake Correnti <[email protected]>
1 parent e3023e9 commit f724291

File tree

16 files changed

+53
-75
lines changed

16 files changed

+53
-75
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/devices/src/virtio/fs/device.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ use std::sync::atomic::{AtomicI32, AtomicU64, AtomicUsize, Ordering};
66
use std::sync::Arc;
77
use std::thread::JoinHandle;
88

9-
#[cfg(target_os = "macos")]
10-
use hvf::MemoryMapping;
119
use utils::eventfd::{EventFd, EFD_NONBLOCK};
10+
#[cfg(target_os = "macos")]
11+
use utils::worker_message::WorkerMessage;
1212
use virtio_bindings::{virtio_config::VIRTIO_F_VERSION_1, virtio_ring::VIRTIO_RING_F_EVENT_IDX};
1313
use vm_memory::{ByteValued, GuestMemoryMmap};
1414

@@ -56,7 +56,7 @@ pub struct Fs {
5656
worker_stopfd: EventFd,
5757
exit_code: Arc<AtomicI32>,
5858
#[cfg(target_os = "macos")]
59-
map_sender: Option<Sender<MemoryMapping>>,
59+
map_sender: Option<Sender<WorkerMessage>>,
6060
}
6161

6262
impl Fs {
@@ -135,7 +135,7 @@ impl Fs {
135135
}
136136

137137
#[cfg(target_os = "macos")]
138-
pub fn set_map_sender(&mut self, map_sender: Sender<MemoryMapping>) {
138+
pub fn set_map_sender(&mut self, map_sender: Sender<WorkerMessage>) {
139139
self.map_sender = Some(map_sender);
140140
}
141141
}

src/devices/src/virtio/fs/filesystem.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#[cfg(target_os = "macos")]
66
use crossbeam_channel::Sender;
77
#[cfg(target_os = "macos")]
8-
use hvf::MemoryMapping;
8+
use utils::worker_message::WorkerMessage;
99

1010
use std::collections::BTreeMap;
1111
use std::convert::TryInto;
@@ -1134,7 +1134,7 @@ pub trait FileSystem {
11341134
moffset: u64,
11351135
host_shm_base: u64,
11361136
shm_size: u64,
1137-
#[cfg(target_os = "macos")] map_sender: &Option<Sender<MemoryMapping>>,
1137+
#[cfg(target_os = "macos")] map_sender: &Option<Sender<WorkerMessage>>,
11381138
) -> io::Result<()> {
11391139
Err(io::Error::from_raw_os_error(libc::ENOSYS))
11401140
}
@@ -1145,7 +1145,7 @@ pub trait FileSystem {
11451145
requests: Vec<RemovemappingOne>,
11461146
host_shm_base: u64,
11471147
shm_size: u64,
1148-
#[cfg(target_os = "macos")] map_sender: &Option<Sender<MemoryMapping>>,
1148+
#[cfg(target_os = "macos")] map_sender: &Option<Sender<WorkerMessage>>,
11491149
) -> io::Result<()> {
11501150
Err(io::Error::from_raw_os_error(libc::ENOSYS))
11511151
}

src/devices/src/virtio/fs/macos/passthrough.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use std::sync::{Arc, Mutex, RwLock};
1919
use std::time::Duration;
2020

2121
use crossbeam_channel::{unbounded, Sender};
22-
use hvf::MemoryMapping;
22+
use utils::worker_message::WorkerMessage;
2323

2424
use crate::virtio::fs::filesystem::SecContext;
2525

@@ -1994,7 +1994,7 @@ impl FileSystem for PassthroughFs {
19941994
moffset: u64,
19951995
guest_shm_base: u64,
19961996
shm_size: u64,
1997-
map_sender: &Option<Sender<MemoryMapping>>,
1997+
map_sender: &Option<Sender<WorkerMessage>>,
19981998
) -> io::Result<()> {
19991999
if map_sender.is_none() {
20002000
return Err(linux_error(io::Error::from_raw_os_error(libc::ENOSYS)));
@@ -2043,7 +2043,7 @@ impl FileSystem for PassthroughFs {
20432043
let sender = map_sender.as_ref().unwrap();
20442044
let (reply_sender, reply_receiver) = unbounded();
20452045
sender
2046-
.send(MemoryMapping::AddMapping(
2046+
.send(WorkerMessage::GpuAddMapping(
20472047
reply_sender,
20482048
host_addr as u64,
20492049
guest_addr,
@@ -2070,7 +2070,7 @@ impl FileSystem for PassthroughFs {
20702070
requests: Vec<fuse::RemovemappingOne>,
20712071
guest_shm_base: u64,
20722072
shm_size: u64,
2073-
map_sender: &Option<Sender<MemoryMapping>>,
2073+
map_sender: &Option<Sender<WorkerMessage>>,
20742074
) -> io::Result<()> {
20752075
if map_sender.is_none() {
20762076
return Err(linux_error(io::Error::from_raw_os_error(libc::ENOSYS)));
@@ -2093,7 +2093,7 @@ impl FileSystem for PassthroughFs {
20932093
let sender = map_sender.as_ref().unwrap();
20942094
let (reply_sender, reply_receiver) = unbounded();
20952095
sender
2096-
.send(MemoryMapping::RemoveMapping(
2096+
.send(WorkerMessage::GpuRemoveMapping(
20972097
reply_sender,
20982098
guest_addr,
20992099
req.len,

src/devices/src/virtio/fs/server.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#[cfg(target_os = "macos")]
66
use crossbeam_channel::Sender;
77
#[cfg(target_os = "macos")]
8-
use hvf::MemoryMapping;
8+
use utils::worker_message::WorkerMessage;
99

1010
use std::convert::TryInto;
1111
use std::ffi::{CStr, CString};
@@ -85,7 +85,7 @@ impl<F: FileSystem + Sync> Server<F> {
8585
w: Writer,
8686
shm_region: &Option<VirtioShmRegion>,
8787
exit_code: &Arc<AtomicI32>,
88-
#[cfg(target_os = "macos")] map_sender: &Option<Sender<MemoryMapping>>,
88+
#[cfg(target_os = "macos")] map_sender: &Option<Sender<WorkerMessage>>,
8989
) -> Result<usize> {
9090
let in_header: InHeader = r.read_obj().map_err(Error::DecodeMessage)?;
9191

@@ -1341,7 +1341,7 @@ impl<F: FileSystem + Sync> Server<F> {
13411341
w: Writer,
13421342
host_shm_base: u64,
13431343
shm_size: u64,
1344-
#[cfg(target_os = "macos")] map_sender: &Option<Sender<MemoryMapping>>,
1344+
#[cfg(target_os = "macos")] map_sender: &Option<Sender<WorkerMessage>>,
13451345
) -> Result<usize> {
13461346
let SetupmappingIn {
13471347
fh,
@@ -1376,7 +1376,7 @@ impl<F: FileSystem + Sync> Server<F> {
13761376
w: Writer,
13771377
host_shm_base: u64,
13781378
shm_size: u64,
1379-
#[cfg(target_os = "macos")] map_sender: &Option<Sender<MemoryMapping>>,
1379+
#[cfg(target_os = "macos")] map_sender: &Option<Sender<WorkerMessage>>,
13801380
) -> Result<usize> {
13811381
let RemovemappingIn { count } = r.read_obj().map_err(Error::DecodeMessage)?;
13821382

src/devices/src/virtio/fs/worker.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#[cfg(target_os = "macos")]
22
use crossbeam_channel::Sender;
33
#[cfg(target_os = "macos")]
4-
use hvf::MemoryMapping;
4+
use utils::worker_message::WorkerMessage;
55

66
use std::os::fd::AsRawFd;
77
use std::sync::atomic::{AtomicI32, AtomicUsize, Ordering};
@@ -34,7 +34,7 @@ pub struct FsWorker {
3434
stop_fd: EventFd,
3535
exit_code: Arc<AtomicI32>,
3636
#[cfg(target_os = "macos")]
37-
map_sender: Option<Sender<MemoryMapping>>,
37+
map_sender: Option<Sender<WorkerMessage>>,
3838
}
3939

4040
impl FsWorker {
@@ -51,7 +51,7 @@ impl FsWorker {
5151
passthrough_cfg: passthrough::Config,
5252
stop_fd: EventFd,
5353
exit_code: Arc<AtomicI32>,
54-
#[cfg(target_os = "macos")] map_sender: Option<Sender<MemoryMapping>>,
54+
#[cfg(target_os = "macos")] map_sender: Option<Sender<WorkerMessage>>,
5555
) -> Self {
5656
Self {
5757
queues,

src/devices/src/virtio/gpu/device.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use super::worker::Worker;
1818
use crate::legacy::IrqChip;
1919
use crate::Error as DeviceError;
2020
#[cfg(target_os = "macos")]
21-
use hvf::MemoryMapping;
21+
use utils::worker_message::WorkerMessage;
2222

2323
// Control queue.
2424
pub(crate) const CTL_INDEX: usize = 0;
@@ -49,15 +49,15 @@ pub struct Gpu {
4949
pub(crate) sender: Option<Sender<u64>>,
5050
virgl_flags: u32,
5151
#[cfg(target_os = "macos")]
52-
map_sender: Sender<MemoryMapping>,
52+
map_sender: Sender<WorkerMessage>,
5353
export_table: Option<ExportTable>,
5454
}
5555

5656
impl Gpu {
5757
pub(crate) fn with_queues(
5858
queues: Vec<VirtQueue>,
5959
virgl_flags: u32,
60-
#[cfg(target_os = "macos")] map_sender: Sender<MemoryMapping>,
60+
#[cfg(target_os = "macos")] map_sender: Sender<WorkerMessage>,
6161
) -> super::Result<Gpu> {
6262
let mut queue_events = Vec::new();
6363
for _ in 0..queues.len() {
@@ -92,7 +92,7 @@ impl Gpu {
9292

9393
pub fn new(
9494
virgl_flags: u32,
95-
#[cfg(target_os = "macos")] map_sender: Sender<MemoryMapping>,
95+
#[cfg(target_os = "macos")] map_sender: Sender<WorkerMessage>,
9696
) -> super::Result<Gpu> {
9797
let queues: Vec<VirtQueue> = defs::QUEUE_SIZES
9898
.iter()

src/devices/src/virtio/gpu/virtio_gpu.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ use std::sync::{Arc, Mutex};
88

99
#[cfg(target_os = "macos")]
1010
use crossbeam_channel::{unbounded, Sender};
11-
#[cfg(target_os = "macos")]
12-
use hvf::MemoryMapping;
1311
use libc::c_void;
1412
#[cfg(target_os = "macos")]
1513
use rutabaga_gfx::RUTABAGA_MEM_HANDLE_TYPE_APPLE;
@@ -28,6 +26,8 @@ use rutabaga_gfx::{
2826
RUTABAGA_MAP_ACCESS_READ, RUTABAGA_MAP_ACCESS_RW, RUTABAGA_MAP_ACCESS_WRITE,
2927
};
3028
use utils::eventfd::EventFd;
29+
#[cfg(target_os = "macos")]
30+
use utils::worker_message::WorkerMessage;
3131
use vm_memory::{GuestAddress, GuestMemory, GuestMemoryMmap, VolatileSlice};
3232

3333
use super::super::Queue as VirtQueue;
@@ -107,7 +107,7 @@ pub struct VirtioGpu {
107107
resources: BTreeMap<u32, VirtioGpuResource>,
108108
fence_state: Arc<Mutex<FenceState>>,
109109
#[cfg(target_os = "macos")]
110-
map_sender: Sender<MemoryMapping>,
110+
map_sender: Sender<WorkerMessage>,
111111
}
112112

113113
impl VirtioGpu {
@@ -182,7 +182,7 @@ impl VirtioGpu {
182182
intc: Option<IrqChip>,
183183
irq_line: Option<u32>,
184184
virgl_flags: u32,
185-
#[cfg(target_os = "macos")] map_sender: Sender<MemoryMapping>,
185+
#[cfg(target_os = "macos")] map_sender: Sender<WorkerMessage>,
186186
export_table: Option<ExportTable>,
187187
) -> Self {
188188
let xdg_runtime_dir = match env::var("XDG_RUNTIME_DIR") {
@@ -676,7 +676,7 @@ impl VirtioGpu {
676676

677677
let (reply_sender, reply_receiver) = unbounded();
678678
self.map_sender
679-
.send(MemoryMapping::AddMapping(
679+
.send(WorkerMessage::GpuAddMapping(
680680
reply_sender,
681681
map_ptr,
682682
guest_addr,
@@ -756,7 +756,7 @@ impl VirtioGpu {
756756

757757
let (reply_sender, reply_receiver) = unbounded();
758758
self.map_sender
759-
.send(MemoryMapping::RemoveMapping(
759+
.send(WorkerMessage::GpuRemoveMapping(
760760
reply_sender,
761761
guest_addr,
762762
resource.size,

src/devices/src/virtio/gpu/worker.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ use std::{result, thread};
66
use crossbeam_channel::Receiver;
77
#[cfg(target_os = "macos")]
88
use crossbeam_channel::Sender;
9-
#[cfg(target_os = "macos")]
10-
use hvf::MemoryMapping;
119
use rutabaga_gfx::{
1210
ResourceCreate3D, ResourceCreateBlob, RutabagaFence, Transfer3D,
1311
RUTABAGA_PIPE_BIND_RENDER_TARGET, RUTABAGA_PIPE_TEXTURE_2D,
1412
};
1513
use utils::eventfd::EventFd;
14+
#[cfg(target_os = "macos")]
15+
use utils::worker_message::WorkerMessage;
1616
use vm_memory::{GuestAddress, GuestMemoryMmap};
1717

1818
use super::super::descriptor_utils::{Reader, Writer};
@@ -39,7 +39,7 @@ pub struct Worker {
3939
shm_region: VirtioShmRegion,
4040
virgl_flags: u32,
4141
#[cfg(target_os = "macos")]
42-
map_sender: Sender<MemoryMapping>,
42+
map_sender: Sender<WorkerMessage>,
4343
export_table: Option<ExportTable>,
4444
}
4545

@@ -55,7 +55,7 @@ impl Worker {
5555
irq_line: Option<u32>,
5656
shm_region: VirtioShmRegion,
5757
virgl_flags: u32,
58-
#[cfg(target_os = "macos")] map_sender: Sender<MemoryMapping>,
58+
#[cfg(target_os = "macos")] map_sender: Sender<WorkerMessage>,
5959
export_table: Option<ExportTable>,
6060
) -> Self {
6161
Self {

src/hvf/src/lib.rs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ use std::time::Duration;
2424

2525
#[cfg(all(target_arch = "aarch64", target_os = "macos"))]
2626
use arch::aarch64::sysreg::{sys_reg_name, SYSREG_MASK};
27-
use crossbeam_channel::Sender;
2827
use log::debug;
2928

3029
extern "C" {
@@ -149,12 +148,6 @@ impl Display for Error {
149148
}
150149
}
151150

152-
/// Messages for requesting memory maps/unmaps.
153-
pub enum MemoryMapping {
154-
AddMapping(Sender<bool>, u64, u64, u64),
155-
RemoveMapping(Sender<bool>, u64, u64),
156-
}
157-
158151
pub enum InterruptType {
159152
Irq,
160153
Fiq,

0 commit comments

Comments
 (0)