Skip to content

Commit ad58102

Browse files
Manciukicroypat
authored andcommitted
refactor: generate virtio device ids with bindgen
Currently, the device ids (TYPE_*) are hardcoded in various places. With this change, they are generated from linux headers. Signed-off-by: Riccardo Mancini <[email protected]>
1 parent 5e94d12 commit ad58102

File tree

22 files changed

+164
-103
lines changed

22 files changed

+164
-103
lines changed

src/vmm/src/builder.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -656,9 +656,9 @@ pub(crate) mod tests {
656656
use super::*;
657657
use crate::device_manager::tests::default_device_manager;
658658
use crate::devices::virtio::block::CacheType;
659+
use crate::devices::virtio::generated::virtio_ids;
659660
use crate::devices::virtio::rng::device::ENTROPY_DEV_ID;
660-
use crate::devices::virtio::vsock::{TYPE_VSOCK, VSOCK_DEV_ID};
661-
use crate::devices::virtio::{TYPE_BALLOON, TYPE_BLOCK, TYPE_RNG};
661+
use crate::devices::virtio::vsock::VSOCK_DEV_ID;
662662
use crate::mmds::data_store::{Mmds, MmdsVersion};
663663
use crate::mmds::ns::MmdsNetworkStack;
664664
use crate::utils::mib_to_bytes;
@@ -855,7 +855,7 @@ pub(crate) mod tests {
855855

856856
assert!(
857857
vmm.device_manager
858-
.get_virtio_device(TYPE_VSOCK, &vsock_dev_id)
858+
.get_virtio_device(virtio_ids::VIRTIO_ID_VSOCK, &vsock_dev_id)
859859
.is_some()
860860
);
861861
}
@@ -880,7 +880,7 @@ pub(crate) mod tests {
880880

881881
assert!(
882882
vmm.device_manager
883-
.get_virtio_device(TYPE_RNG, ENTROPY_DEV_ID)
883+
.get_virtio_device(virtio_ids::VIRTIO_ID_RNG, ENTROPY_DEV_ID)
884884
.is_some()
885885
);
886886
}
@@ -914,7 +914,7 @@ pub(crate) mod tests {
914914

915915
assert!(
916916
vmm.device_manager
917-
.get_virtio_device(TYPE_BALLOON, BALLOON_DEV_ID)
917+
.get_virtio_device(virtio_ids::VIRTIO_ID_BALLOON, BALLOON_DEV_ID)
918918
.is_some()
919919
);
920920
}
@@ -965,7 +965,7 @@ pub(crate) mod tests {
965965
assert!(cmdline_contains(&cmdline, "root=/dev/vda ro"));
966966
assert!(
967967
vmm.device_manager
968-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
968+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
969969
.is_some()
970970
);
971971
}
@@ -986,7 +986,7 @@ pub(crate) mod tests {
986986
assert!(cmdline_contains(&cmdline, "root=PARTUUID=0eaa91a0-01 rw"));
987987
assert!(
988988
vmm.device_manager
989-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
989+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
990990
.is_some()
991991
);
992992
}
@@ -1008,7 +1008,7 @@ pub(crate) mod tests {
10081008
assert!(!cmdline_contains(&cmdline, "root=/dev/vda"));
10091009
assert!(
10101010
vmm.device_manager
1011-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
1011+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
10121012
.is_some()
10131013
);
10141014
}
@@ -1045,17 +1045,17 @@ pub(crate) mod tests {
10451045
assert!(cmdline_contains(&cmdline, "root=PARTUUID=0eaa91a0-01 rw"));
10461046
assert!(
10471047
vmm.device_manager
1048-
.get_virtio_device(TYPE_BLOCK, "root")
1048+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, "root")
10491049
.is_some()
10501050
);
10511051
assert!(
10521052
vmm.device_manager
1053-
.get_virtio_device(TYPE_BLOCK, "secondary")
1053+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, "secondary")
10541054
.is_some()
10551055
);
10561056
assert!(
10571057
vmm.device_manager
1058-
.get_virtio_device(TYPE_BLOCK, "third")
1058+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, "third")
10591059
.is_some()
10601060
);
10611061

@@ -1084,7 +1084,7 @@ pub(crate) mod tests {
10841084
assert!(cmdline_contains(&cmdline, "root=/dev/vda rw"));
10851085
assert!(
10861086
vmm.device_manager
1087-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
1087+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
10881088
.is_some()
10891089
);
10901090
}
@@ -1105,7 +1105,7 @@ pub(crate) mod tests {
11051105
assert!(cmdline_contains(&cmdline, "root=PARTUUID=0eaa91a0-01 ro"));
11061106
assert!(
11071107
vmm.device_manager
1108-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
1108+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
11091109
.is_some()
11101110
);
11111111
}
@@ -1126,7 +1126,7 @@ pub(crate) mod tests {
11261126
assert!(cmdline_contains(&cmdline, "root=/dev/vda rw"));
11271127
assert!(
11281128
vmm.device_manager
1129-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
1129+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
11301130
.is_some()
11311131
);
11321132
}

src/vmm/src/device_manager/pci_mngr.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use crate::devices::virtio::balloon::persist::{BalloonConstructorArgs, BalloonSt
1919
use crate::devices::virtio::block::device::Block;
2020
use crate::devices::virtio::block::persist::{BlockConstructorArgs, BlockState};
2121
use crate::devices::virtio::device::VirtioDevice;
22+
use crate::devices::virtio::generated::virtio_ids;
2223
use crate::devices::virtio::net::Net;
2324
use crate::devices::virtio::net::persist::{NetConstructorArgs, NetState};
2425
use crate::devices::virtio::rng::Entropy;
@@ -29,8 +30,7 @@ use crate::devices::virtio::transport::pci::device::{
2930
use crate::devices::virtio::vsock::persist::{
3031
VsockConstructorArgs, VsockState, VsockUdsConstructorArgs,
3132
};
32-
use crate::devices::virtio::vsock::{TYPE_VSOCK, Vsock, VsockUnixBackend};
33-
use crate::devices::virtio::{TYPE_BALLOON, TYPE_BLOCK, TYPE_NET, TYPE_RNG};
33+
use crate::devices::virtio::vsock::{Vsock, VsockUnixBackend};
3434
use crate::resources::VmResources;
3535
use crate::snapshot::Persist;
3636
use crate::vmm_config::mmds::MmdsConfigError;
@@ -285,7 +285,7 @@ impl<'a> Persist<'a> for PciDevices {
285285
let pci_device_bdf = transport_state.pci_device_bdf.into();
286286

287287
match locked_virtio_dev.device_type() {
288-
TYPE_BALLOON => {
288+
virtio_ids::VIRTIO_ID_BALLOON => {
289289
let balloon_device = locked_virtio_dev
290290
.as_any()
291291
.downcast_ref::<Balloon>()
@@ -300,7 +300,7 @@ impl<'a> Persist<'a> for PciDevices {
300300
transport_state,
301301
});
302302
}
303-
TYPE_BLOCK => {
303+
virtio_ids::VIRTIO_ID_BLOCK => {
304304
let block_dev = locked_virtio_dev
305305
.as_mut_any()
306306
.downcast_mut::<Block>()
@@ -321,7 +321,7 @@ impl<'a> Persist<'a> for PciDevices {
321321
});
322322
}
323323
}
324-
TYPE_NET => {
324+
virtio_ids::VIRTIO_ID_NET => {
325325
let net_dev = locked_virtio_dev
326326
.as_mut_any()
327327
.downcast_mut::<Net>()
@@ -343,7 +343,7 @@ impl<'a> Persist<'a> for PciDevices {
343343
transport_state,
344344
})
345345
}
346-
TYPE_VSOCK => {
346+
virtio_ids::VIRTIO_ID_VSOCK => {
347347
let vsock_dev = locked_virtio_dev
348348
.as_mut_any()
349349
// Currently, VsockUnixBackend is the only implementation of VsockBackend.
@@ -374,7 +374,7 @@ impl<'a> Persist<'a> for PciDevices {
374374
transport_state,
375375
});
376376
}
377-
TYPE_RNG => {
377+
virtio_ids::VIRTIO_ID_RNG => {
378378
let rng_dev = locked_virtio_dev
379379
.as_mut_any()
380380
.downcast_mut::<Entropy>()

src/vmm/src/device_manager/persist.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@ use crate::arch::DeviceType;
1717
use crate::devices::acpi::vmgenid::{VMGenIDState, VMGenIdConstructorArgs, VmGenId, VmGenIdError};
1818
#[cfg(target_arch = "aarch64")]
1919
use crate::devices::legacy::RTCDevice;
20+
use crate::devices::virtio::ActivateError;
2021
use crate::devices::virtio::balloon::persist::{BalloonConstructorArgs, BalloonState};
2122
use crate::devices::virtio::balloon::{Balloon, BalloonError};
2223
use crate::devices::virtio::block::BlockError;
2324
use crate::devices::virtio::block::device::Block;
2425
use crate::devices::virtio::block::persist::{BlockConstructorArgs, BlockState};
2526
use crate::devices::virtio::device::VirtioDevice;
27+
use crate::devices::virtio::generated::virtio_ids;
2628
use crate::devices::virtio::net::Net;
2729
use crate::devices::virtio::net::persist::{
2830
NetConstructorArgs, NetPersistError as NetError, NetState,
@@ -36,10 +38,7 @@ use crate::devices::virtio::transport::mmio::{IrqTrigger, MmioTransport};
3638
use crate::devices::virtio::vsock::persist::{
3739
VsockConstructorArgs, VsockState, VsockUdsConstructorArgs,
3840
};
39-
use crate::devices::virtio::vsock::{
40-
TYPE_VSOCK, Vsock, VsockError, VsockUnixBackend, VsockUnixBackendError,
41-
};
42-
use crate::devices::virtio::{ActivateError, TYPE_BALLOON, TYPE_BLOCK, TYPE_NET, TYPE_RNG};
41+
use crate::devices::virtio::vsock::{Vsock, VsockError, VsockUnixBackend, VsockUnixBackendError};
4342
use crate::mmds::data_store::MmdsVersion;
4443
use crate::resources::{ResourcesError, VmResources};
4544
use crate::snapshot::Persist;
@@ -242,7 +241,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
242241

243242
let mut locked_device = mmio_transport_locked.locked_device();
244243
match locked_device.device_type() {
245-
TYPE_BALLOON => {
244+
virtio_ids::VIRTIO_ID_BALLOON => {
246245
let device_state = locked_device
247246
.as_any()
248247
.downcast_ref::<Balloon>()
@@ -256,7 +255,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
256255
});
257256
}
258257
// Both virtio-block and vhost-user-block share same device type.
259-
TYPE_BLOCK => {
258+
virtio_ids::VIRTIO_ID_BLOCK => {
260259
let block = locked_device.as_mut_any().downcast_mut::<Block>().unwrap();
261260
if block.is_vhost_user() {
262261
warn!(
@@ -274,7 +273,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
274273
});
275274
}
276275
}
277-
TYPE_NET => {
276+
virtio_ids::VIRTIO_ID_NET => {
278277
let net = locked_device.as_mut_any().downcast_mut::<Net>().unwrap();
279278
if let (Some(mmds_ns), None) = (net.mmds_ns.as_ref(), states.mmds.as_ref()) {
280279
let mmds_guard = mmds_ns.mmds.lock().expect("Poisoned lock");
@@ -293,7 +292,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
293292
device_info,
294293
});
295294
}
296-
TYPE_VSOCK => {
295+
virtio_ids::VIRTIO_ID_VSOCK => {
297296
let vsock = locked_device
298297
.as_mut_any()
299298
// Currently, VsockUnixBackend is the only implementation of VsockBackend.
@@ -322,7 +321,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
322321
device_info,
323322
});
324323
}
325-
TYPE_RNG => {
324+
virtio_ids::VIRTIO_ID_RNG => {
326325
let entropy = locked_device
327326
.as_mut_any()
328327
.downcast_mut::<Entropy>()

src/vmm/src/devices/virtio/balloon/device.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ use serde::Serialize;
1010
use timerfd::{ClockId, SetTimeFlags, TimerFd, TimerState};
1111
use vmm_sys_util::eventfd::EventFd;
1212

13+
use super::super::ActivateError;
1314
use super::super::device::{DeviceState, VirtioDevice};
1415
use super::super::queue::Queue;
15-
use super::super::{ActivateError, TYPE_BALLOON};
1616
use super::metrics::METRICS;
1717
use super::util::{compact_page_frame_numbers, remove_range};
1818
use super::{
@@ -27,6 +27,7 @@ use super::{
2727
use crate::devices::virtio::balloon::BalloonError;
2828
use crate::devices::virtio::device::ActiveState;
2929
use crate::devices::virtio::generated::virtio_config::VIRTIO_F_VERSION_1;
30+
use crate::devices::virtio::generated::virtio_ids::VIRTIO_ID_BALLOON;
3031
use crate::devices::virtio::queue::InvalidAvailIdx;
3132
use crate::devices::virtio::transport::{VirtioInterrupt, VirtioInterruptType};
3233
use crate::logger::IncMetric;
@@ -547,7 +548,7 @@ impl VirtioDevice for Balloon {
547548
}
548549

549550
fn device_type(&self) -> u32 {
550-
TYPE_BALLOON
551+
VIRTIO_ID_BALLOON
551552
}
552553

553554
fn queues(&self) -> &[Queue] {
@@ -732,7 +733,7 @@ pub(crate) mod tests {
732733
for deflate_on_oom in [true, false].iter() {
733734
for stats_interval in [0, 1].iter() {
734735
let mut balloon = Balloon::new(0, *deflate_on_oom, *stats_interval, false).unwrap();
735-
assert_eq!(balloon.device_type(), TYPE_BALLOON);
736+
assert_eq!(balloon.device_type(), VIRTIO_ID_BALLOON);
736737

737738
let features: u64 = (1u64 << VIRTIO_F_VERSION_1)
738739
| (u64::from(*deflate_on_oom) << VIRTIO_BALLOON_F_DEFLATE_ON_OOM)

src/vmm/src/devices/virtio/balloon/persist.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ use serde::{Deserialize, Serialize};
1010
use timerfd::{SetTimeFlags, TimerState};
1111

1212
use super::*;
13-
use crate::devices::virtio::TYPE_BALLOON;
1413
use crate::devices::virtio::balloon::device::{BalloonStats, ConfigSpace};
1514
use crate::devices::virtio::device::{ActiveState, DeviceState};
15+
use crate::devices::virtio::generated::virtio_ids::VIRTIO_ID_BALLOON;
1616
use crate::devices::virtio::persist::VirtioDeviceState;
1717
use crate::devices::virtio::queue::FIRECRACKER_MAX_QUEUE_SIZE;
1818
use crate::devices::virtio::transport::VirtioInterrupt;
@@ -139,7 +139,7 @@ impl Persist<'_> for Balloon {
139139
.virtio_state
140140
.build_queues_checked(
141141
&constructor_args.mem,
142-
TYPE_BALLOON,
142+
VIRTIO_ID_BALLOON,
143143
num_queues,
144144
FIRECRACKER_MAX_QUEUE_SIZE,
145145
)
@@ -174,7 +174,6 @@ impl Persist<'_> for Balloon {
174174
mod tests {
175175

176176
use super::*;
177-
use crate::devices::virtio::TYPE_BALLOON;
178177
use crate::devices::virtio::device::VirtioDevice;
179178
use crate::devices::virtio::test_utils::{default_interrupt, default_mem};
180179
use crate::snapshot::Snapshot;
@@ -201,7 +200,7 @@ mod tests {
201200
)
202201
.unwrap();
203202

204-
assert_eq!(restored_balloon.device_type(), TYPE_BALLOON);
203+
assert_eq!(restored_balloon.device_type(), VIRTIO_ID_BALLOON);
205204
assert!(restored_balloon.restored_from_file);
206205

207206
assert_eq!(restored_balloon.acked_features, balloon.acked_features);

src/vmm/src/devices/virtio/block/device.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ use super::BlockError;
1111
use super::persist::{BlockConstructorArgs, BlockState};
1212
use super::vhost_user::device::{VhostUserBlock, VhostUserBlockConfig};
1313
use super::virtio::device::{VirtioBlock, VirtioBlockConfig};
14+
use crate::devices::virtio::ActivateError;
1415
use crate::devices::virtio::device::VirtioDevice;
16+
use crate::devices::virtio::generated::virtio_ids::VIRTIO_ID_BLOCK;
1517
use crate::devices::virtio::queue::{InvalidAvailIdx, Queue};
1618
use crate::devices::virtio::transport::VirtioInterrupt;
17-
use crate::devices::virtio::{ActivateError, TYPE_BLOCK};
1819
use crate::rate_limiter::BucketUpdate;
1920
use crate::snapshot::Persist;
2021
use crate::vmm_config::drive::BlockDeviceConfig;
@@ -153,7 +154,7 @@ impl VirtioDevice for Block {
153154
}
154155

155156
fn device_type(&self) -> u32 {
156-
TYPE_BLOCK
157+
VIRTIO_ID_BLOCK
157158
}
158159

159160
fn queues(&self) -> &[Queue] {

src/vmm/src/devices/virtio/block/vhost_user/device.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,19 @@ use vhost::vhost_user::message::*;
1414
use vmm_sys_util::eventfd::EventFd;
1515

1616
use super::{NUM_QUEUES, QUEUE_SIZE, VhostUserBlockError};
17+
use crate::devices::virtio::ActivateError;
1718
use crate::devices::virtio::block::CacheType;
1819
use crate::devices::virtio::device::{ActiveState, DeviceState, VirtioDevice};
1920
use crate::devices::virtio::generated::virtio_blk::{VIRTIO_BLK_F_FLUSH, VIRTIO_BLK_F_RO};
2021
use crate::devices::virtio::generated::virtio_config::VIRTIO_F_VERSION_1;
22+
use crate::devices::virtio::generated::virtio_ids::VIRTIO_ID_BLOCK;
2123
use crate::devices::virtio::generated::virtio_ring::VIRTIO_RING_F_EVENT_IDX;
2224
use crate::devices::virtio::queue::Queue;
2325
use crate::devices::virtio::transport::{VirtioInterrupt, VirtioInterruptType};
2426
use crate::devices::virtio::vhost_user::{VhostUserHandleBackend, VhostUserHandleImpl};
2527
use crate::devices::virtio::vhost_user_metrics::{
2628
VhostUserDeviceMetrics, VhostUserMetricsPerDevice,
2729
};
28-
use crate::devices::virtio::{ActivateError, TYPE_BLOCK};
2930
use crate::logger::{IncMetric, StoreMetric, log_dev_preview_warning};
3031
use crate::utils::u64_to_usize;
3132
use crate::vmm_config::drive::BlockDeviceConfig;
@@ -299,7 +300,7 @@ impl<T: VhostUserHandleBackend + Send + 'static> VirtioDevice for VhostUserBlock
299300
}
300301

301302
fn device_type(&self) -> u32 {
302-
TYPE_BLOCK
303+
VIRTIO_ID_BLOCK
303304
}
304305

305306
fn queues(&self) -> &[Queue] {

0 commit comments

Comments
 (0)