Skip to content

Commit 5a51449

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 db966a7 commit 5a51449

File tree

15 files changed

+54
-77
lines changed

15 files changed

+54
-77
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::{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

@@ -55,7 +55,7 @@ pub struct Fs {
5555
worker_thread: Option<JoinHandle<()>>,
5656
worker_stopfd: EventFd,
5757
#[cfg(target_os = "macos")]
58-
map_sender: Option<Sender<MemoryMapping>>,
58+
map_sender: Option<Sender<WorkerMessage>>,
5959
}
6060

6161
impl Fs {
@@ -132,7 +132,7 @@ impl Fs {
132132
}
133133

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

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;
@@ -1133,7 +1133,7 @@ pub trait FileSystem {
11331133
moffset: u64,
11341134
host_shm_base: u64,
11351135
shm_size: u64,
1136-
#[cfg(target_os = "macos")] map_sender: &Option<Sender<MemoryMapping>>,
1136+
#[cfg(target_os = "macos")] map_sender: &Option<Sender<WorkerMessage>>,
11371137
) -> io::Result<()> {
11381138
Err(io::Error::from_raw_os_error(libc::ENOSYS))
11391139
}
@@ -1144,7 +1144,7 @@ pub trait FileSystem {
11441144
requests: Vec<RemovemappingOne>,
11451145
host_shm_base: u64,
11461146
shm_size: u64,
1147-
#[cfg(target_os = "macos")] map_sender: &Option<Sender<MemoryMapping>>,
1147+
#[cfg(target_os = "macos")] map_sender: &Option<Sender<WorkerMessage>>,
11481148
) -> io::Result<()> {
11491149
Err(io::Error::from_raw_os_error(libc::ENOSYS))
11501150
}

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

@@ -1986,7 +1986,7 @@ impl FileSystem for PassthroughFs {
19861986
moffset: u64,
19871987
guest_shm_base: u64,
19881988
shm_size: u64,
1989-
map_sender: &Option<Sender<MemoryMapping>>,
1989+
map_sender: &Option<Sender<WorkerMessage>>,
19901990
) -> io::Result<()> {
19911991
if map_sender.is_none() {
19921992
return Err(linux_error(io::Error::from_raw_os_error(libc::ENOSYS)));
@@ -2035,7 +2035,7 @@ impl FileSystem for PassthroughFs {
20352035
let sender = map_sender.as_ref().unwrap();
20362036
let (reply_sender, reply_receiver) = unbounded();
20372037
sender
2038-
.send(MemoryMapping::AddMapping(
2038+
.send(WorkerMessage::GpuAddMapping(
20392039
reply_sender,
20402040
host_addr as u64,
20412041
guest_addr,
@@ -2062,7 +2062,7 @@ impl FileSystem for PassthroughFs {
20622062
requests: Vec<fuse::RemovemappingOne>,
20632063
guest_shm_base: u64,
20642064
shm_size: u64,
2065-
map_sender: &Option<Sender<MemoryMapping>>,
2065+
map_sender: &Option<Sender<WorkerMessage>>,
20662066
) -> io::Result<()> {
20672067
if map_sender.is_none() {
20682068
return Err(linux_error(io::Error::from_raw_os_error(libc::ENOSYS)));
@@ -2085,7 +2085,7 @@ impl FileSystem for PassthroughFs {
20852085
let sender = map_sender.as_ref().unwrap();
20862086
let (reply_sender, reply_receiver) = unbounded();
20872087
sender
2088-
.send(MemoryMapping::RemoveMapping(
2088+
.send(WorkerMessage::GpuRemoveMapping(
20892089
reply_sender,
20902090
guest_addr,
20912091
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};
@@ -83,7 +83,7 @@ impl<F: FileSystem + Sync> Server<F> {
8383
mut r: Reader,
8484
w: Writer,
8585
shm_region: &Option<VirtioShmRegion>,
86-
#[cfg(target_os = "macos")] map_sender: &Option<Sender<MemoryMapping>>,
86+
#[cfg(target_os = "macos")] map_sender: &Option<Sender<WorkerMessage>>,
8787
) -> Result<usize> {
8888
let in_header: InHeader = r.read_obj().map_err(Error::DecodeMessage)?;
8989

@@ -1332,7 +1332,7 @@ impl<F: FileSystem + Sync> Server<F> {
13321332
w: Writer,
13331333
host_shm_base: u64,
13341334
shm_size: u64,
1335-
#[cfg(target_os = "macos")] map_sender: &Option<Sender<MemoryMapping>>,
1335+
#[cfg(target_os = "macos")] map_sender: &Option<Sender<WorkerMessage>>,
13361336
) -> Result<usize> {
13371337
let SetupmappingIn {
13381338
fh,
@@ -1367,7 +1367,7 @@ impl<F: FileSystem + Sync> Server<F> {
13671367
w: Writer,
13681368
host_shm_base: u64,
13691369
shm_size: u64,
1370-
#[cfg(target_os = "macos")] map_sender: &Option<Sender<MemoryMapping>>,
1370+
#[cfg(target_os = "macos")] map_sender: &Option<Sender<WorkerMessage>>,
13711371
) -> Result<usize> {
13721372
let RemovemappingIn { count } = r.read_obj().map_err(Error::DecodeMessage)?;
13731373

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::{AtomicUsize, Ordering};
@@ -33,7 +33,7 @@ pub struct FsWorker {
3333
server: Server<PassthroughFs>,
3434
stop_fd: EventFd,
3535
#[cfg(target_os = "macos")]
36-
map_sender: Option<Sender<MemoryMapping>>,
36+
map_sender: Option<Sender<WorkerMessage>>,
3737
}
3838

3939
impl FsWorker {
@@ -49,7 +49,7 @@ impl FsWorker {
4949
shm_region: Option<VirtioShmRegion>,
5050
passthrough_cfg: passthrough::Config,
5151
stop_fd: EventFd,
52-
#[cfg(target_os = "macos")] map_sender: Option<Sender<MemoryMapping>>,
52+
#[cfg(target_os = "macos")] map_sender: Option<Sender<WorkerMessage>>,
5353
) -> Self {
5454
Self {
5555
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
@@ -21,7 +21,6 @@ use std::time::Duration;
2121

2222
#[cfg(all(target_arch = "aarch64", target_os = "macos"))]
2323
use arch::aarch64::sysreg::{sys_reg_name, SYSREG_MASK};
24-
use crossbeam_channel::Sender;
2524
use log::debug;
2625

2726
extern "C" {
@@ -146,12 +145,6 @@ impl Display for Error {
146145
}
147146
}
148147

149-
/// Messages for requesting memory maps/unmaps.
150-
pub enum MemoryMapping {
151-
AddMapping(Sender<bool>, u64, u64, u64),
152-
RemoveMapping(Sender<bool>, u64, u64),
153-
}
154-
155148
pub enum InterruptType {
156149
Irq,
157150
Fiq,

0 commit comments

Comments
 (0)