Skip to content

Commit edc9bc1

Browse files
authored
vmbus_client: take over synic handling from the relay (#899)
Don't leak the synic details into `vmbus_relay` or `vmbus_relay_intercept_device`. This will make it easier to use `vmbus_client` without `vmbus_relay` in future changes.
1 parent 318ab04 commit edc9bc1

File tree

16 files changed

+888
-580
lines changed

16 files changed

+888
-580
lines changed

Cargo.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8128,6 +8128,7 @@ version = "0.0.0"
81288128
dependencies = [
81298129
"anyhow",
81308130
"futures",
8131+
"futures-concurrency",
81318132
"getrandom",
81328133
"guid",
81338134
"inspect",
@@ -8136,10 +8137,12 @@ dependencies = [
81368137
"pal_event",
81378138
"test_with_tracing",
81388139
"thiserror 2.0.0",
8140+
"tracelimit",
81398141
"tracing",
81408142
"vmbus_async",
81418143
"vmbus_channel",
81428144
"vmbus_core",
8145+
"vmcore",
81438146
"zerocopy 0.8.14",
81448147
]
81458148

@@ -8202,10 +8205,8 @@ dependencies = [
82028205
"inspect",
82038206
"mesh",
82048207
"mesh_protobuf",
8205-
"once_cell",
82068208
"pal_async",
82078209
"pal_event",
8208-
"parking_lot",
82098210
"tracelimit",
82108211
"tracing",
82118212
"unicycle",
@@ -8227,17 +8228,16 @@ dependencies = [
82278228
"inspect",
82288229
"mesh",
82298230
"pal_async",
8231+
"pal_event",
82308232
"safeatomic",
82318233
"task_control",
8232-
"tracelimit",
82338234
"tracing",
82348235
"user_driver",
82358236
"vmbus_channel",
82368237
"vmbus_client",
82378238
"vmbus_core",
82388239
"vmbus_relay",
82398240
"vmbus_ring",
8240-
"vmbus_server",
82418241
"vmcore",
82428242
"zerocopy 0.8.14",
82438243
]

openhcl/underhill_core/src/worker.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2604,7 +2604,6 @@ async fn new_underhill_vm(
26042604

26052605
let mut vmbus_server = None;
26062606
let mut host_vmbus_relay = None;
2607-
let mut vmbus_synic_client = None;
26082607

26092608
// VMBus
26102609
if with_vmbus {
@@ -2671,8 +2670,6 @@ async fn new_underhill_vm(
26712670
let builder = vmbus_client_hcl::vmbus_client_builder(relay_driver)
26722671
.context("failed to create synic client and message source")?;
26732672

2674-
let synic = builder.event_client().clone();
2675-
26762673
let vmbus_relay = vmbus_relay::HostVmbusTransport::new(
26772674
relay_driver.clone(),
26782675
Arc::clone(vmbus.control()),
@@ -2682,7 +2679,6 @@ async fn new_underhill_vm(
26822679
)
26832680
.context("failed to create host vmbus transport")?;
26842681

2685-
vmbus_synic_client = Some(synic);
26862682
host_vmbus_relay = Some(VmbusRelayHandle::new(
26872683
&tp,
26882684
state_units
@@ -2866,7 +2862,6 @@ async fn new_underhill_vm(
28662862
persistent_allocations: false,
28672863
})
28682864
.context("shutdown relay dma client")?,
2869-
vmbus_synic_client.clone().unwrap(),
28702865
shutdown_guest,
28712866
)?;
28722867
vmbus_intercept_devices

support/inspect/src/lib.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1414,6 +1414,18 @@ impl<T: Into<ValueKind> + Clone> From<&'_ T> for ValueKind {
14141414
}
14151415
}
14161416

1417+
impl Inspect for () {
1418+
fn inspect(&self, req: Request<'_>) {
1419+
req.respond();
1420+
}
1421+
}
1422+
1423+
impl InspectMut for () {
1424+
fn inspect_mut(&mut self, req: Request<'_>) {
1425+
req.respond();
1426+
}
1427+
}
1428+
14171429
macro_rules! inspect_value_immut {
14181430
($($(#[$attr:meta])* $ty:ty),* $(,)?) => {
14191431
$(

support/mesh/mesh_channel/src/rpc.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use crate::RecvError;
1212
use mesh_node::message::MeshField;
1313
use mesh_protobuf::Protobuf;
1414
use std::convert::Infallible;
15+
use std::fmt::Debug;
1516
use std::future::Future;
1617
use std::pin::Pin;
1718
use std::task::ready;
@@ -21,13 +22,19 @@ use thiserror::Error;
2122
/// An RPC message for a request with input of type `I` and output of type `R`.
2223
/// The receiver of the message should process the request and return results
2324
/// via the `Sender<R>`.
24-
#[derive(Debug, Protobuf)]
25+
#[derive(Protobuf)]
2526
#[mesh(
2627
bound = "I: 'static + MeshField + Send, R: 'static + MeshField + Send",
2728
resource = "mesh_node::resource::Resource"
2829
)]
2930
pub struct Rpc<I, R>(I, OneshotSender<R>);
3031

32+
impl<I: Debug, R> Debug for Rpc<I, R> {
33+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34+
f.debug_tuple("Rpc").field(&self.0).finish()
35+
}
36+
}
37+
3138
/// An RPC message with a failable result.
3239
pub type FailableRpc<I, R> = Rpc<I, RemoteResult<R>>;
3340

@@ -118,6 +125,14 @@ impl<I, R: 'static + Send> Rpc<I, Result<R, RemoteError>> {
118125
let r = f(self.0).await;
119126
self.1.send(r.map_err(RemoteError::new));
120127
}
128+
129+
/// Fails the RPC with the specified error.
130+
pub fn fail<E>(self, error: E)
131+
where
132+
E: Into<Box<dyn std::error::Error + Send + Sync>>,
133+
{
134+
self.1.send(Err(RemoteError::new(error)));
135+
}
121136
}
122137

123138
/// A trait implemented by objects that can send RPC requests.

vm/devices/vmbus/vmbus_client/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,18 @@ rust-version.workspace = true
1010
vmbus_async.workspace = true
1111
vmbus_channel.workspace = true
1212
vmbus_core.workspace = true
13+
vmcore.workspace = true
1314

1415
guid.workspace = true
1516
mesh.workspace = true
1617
pal_async.workspace = true
1718
pal_event.workspace = true
1819
inspect.workspace = true
20+
tracelimit.workspace = true
1921

2022
anyhow.workspace = true
2123
futures.workspace = true
24+
futures-concurrency.workspace = true
2225
thiserror.workspace = true
2326
tracing.workspace = true
2427
zerocopy.workspace = true

0 commit comments

Comments
 (0)