Skip to content

Commit 6b6aad2

Browse files
committed
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 6c6c4db commit 6b6aad2

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
@@ -648,9 +648,9 @@ pub(crate) mod tests {
648648
use super::*;
649649
use crate::device_manager::tests::default_device_manager;
650650
use crate::devices::virtio::block::CacheType;
651+
use crate::devices::virtio::generated::virtio_ids;
651652
use crate::devices::virtio::rng::device::ENTROPY_DEV_ID;
652-
use crate::devices::virtio::vsock::{TYPE_VSOCK, VSOCK_DEV_ID};
653-
use crate::devices::virtio::{TYPE_BALLOON, TYPE_BLOCK, TYPE_RNG};
653+
use crate::devices::virtio::vsock::VSOCK_DEV_ID;
654654
use crate::mmds::data_store::{Mmds, MmdsVersion};
655655
use crate::mmds::ns::MmdsNetworkStack;
656656
use crate::utils::mib_to_bytes;
@@ -848,7 +848,7 @@ pub(crate) mod tests {
848848

849849
assert!(
850850
vmm.device_manager
851-
.get_virtio_device(TYPE_VSOCK, &vsock_dev_id)
851+
.get_virtio_device(virtio_ids::VIRTIO_ID_VSOCK, &vsock_dev_id)
852852
.is_some()
853853
);
854854
}
@@ -873,7 +873,7 @@ pub(crate) mod tests {
873873

874874
assert!(
875875
vmm.device_manager
876-
.get_virtio_device(TYPE_RNG, ENTROPY_DEV_ID)
876+
.get_virtio_device(virtio_ids::VIRTIO_ID_RNG, ENTROPY_DEV_ID)
877877
.is_some()
878878
);
879879
}
@@ -907,7 +907,7 @@ pub(crate) mod tests {
907907

908908
assert!(
909909
vmm.device_manager
910-
.get_virtio_device(TYPE_BALLOON, BALLOON_DEV_ID)
910+
.get_virtio_device(virtio_ids::VIRTIO_ID_BALLOON, BALLOON_DEV_ID)
911911
.is_some()
912912
);
913913
}
@@ -958,7 +958,7 @@ pub(crate) mod tests {
958958
assert!(cmdline_contains(&cmdline, "root=/dev/vda ro"));
959959
assert!(
960960
vmm.device_manager
961-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
961+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
962962
.is_some()
963963
);
964964
}
@@ -979,7 +979,7 @@ pub(crate) mod tests {
979979
assert!(cmdline_contains(&cmdline, "root=PARTUUID=0eaa91a0-01 rw"));
980980
assert!(
981981
vmm.device_manager
982-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
982+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
983983
.is_some()
984984
);
985985
}
@@ -1001,7 +1001,7 @@ pub(crate) mod tests {
10011001
assert!(!cmdline_contains(&cmdline, "root=/dev/vda"));
10021002
assert!(
10031003
vmm.device_manager
1004-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
1004+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
10051005
.is_some()
10061006
);
10071007
}
@@ -1038,17 +1038,17 @@ pub(crate) mod tests {
10381038
assert!(cmdline_contains(&cmdline, "root=PARTUUID=0eaa91a0-01 rw"));
10391039
assert!(
10401040
vmm.device_manager
1041-
.get_virtio_device(TYPE_BLOCK, "root")
1041+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, "root")
10421042
.is_some()
10431043
);
10441044
assert!(
10451045
vmm.device_manager
1046-
.get_virtio_device(TYPE_BLOCK, "secondary")
1046+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, "secondary")
10471047
.is_some()
10481048
);
10491049
assert!(
10501050
vmm.device_manager
1051-
.get_virtio_device(TYPE_BLOCK, "third")
1051+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, "third")
10521052
.is_some()
10531053
);
10541054

@@ -1077,7 +1077,7 @@ pub(crate) mod tests {
10771077
assert!(cmdline_contains(&cmdline, "root=/dev/vda rw"));
10781078
assert!(
10791079
vmm.device_manager
1080-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
1080+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
10811081
.is_some()
10821082
);
10831083
}
@@ -1098,7 +1098,7 @@ pub(crate) mod tests {
10981098
assert!(cmdline_contains(&cmdline, "root=PARTUUID=0eaa91a0-01 ro"));
10991099
assert!(
11001100
vmm.device_manager
1101-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
1101+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
11021102
.is_some()
11031103
);
11041104
}
@@ -1119,7 +1119,7 @@ pub(crate) mod tests {
11191119
assert!(cmdline_contains(&cmdline, "root=/dev/vda rw"));
11201120
assert!(
11211121
vmm.device_manager
1122-
.get_virtio_device(TYPE_BLOCK, drive_id.as_str())
1122+
.get_virtio_device(virtio_ids::VIRTIO_ID_BLOCK, drive_id.as_str())
11231123
.is_some()
11241124
);
11251125
}

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
@@ -19,12 +19,14 @@ use crate::devices::acpi::vmgenid::{VMGenIDState, VMGenIdConstructorArgs, VmGenI
1919
use crate::devices::legacy::serial::SerialOut;
2020
#[cfg(target_arch = "aarch64")]
2121
use crate::devices::legacy::{RTCDevice, SerialDevice};
22+
use crate::devices::virtio::ActivateError;
2223
use crate::devices::virtio::balloon::persist::{BalloonConstructorArgs, BalloonState};
2324
use crate::devices::virtio::balloon::{Balloon, BalloonError};
2425
use crate::devices::virtio::block::BlockError;
2526
use crate::devices::virtio::block::device::Block;
2627
use crate::devices::virtio::block::persist::{BlockConstructorArgs, BlockState};
2728
use crate::devices::virtio::device::VirtioDevice;
29+
use crate::devices::virtio::generated::virtio_ids;
2830
use crate::devices::virtio::net::Net;
2931
use crate::devices::virtio::net::persist::{
3032
NetConstructorArgs, NetPersistError as NetError, NetState,
@@ -38,10 +40,7 @@ use crate::devices::virtio::transport::mmio::{IrqTrigger, MmioTransport};
3840
use crate::devices::virtio::vsock::persist::{
3941
VsockConstructorArgs, VsockState, VsockUdsConstructorArgs,
4042
};
41-
use crate::devices::virtio::vsock::{
42-
TYPE_VSOCK, Vsock, VsockError, VsockUnixBackend, VsockUnixBackendError,
43-
};
44-
use crate::devices::virtio::{ActivateError, TYPE_BALLOON, TYPE_BLOCK, TYPE_NET, TYPE_RNG};
43+
use crate::devices::virtio::vsock::{Vsock, VsockError, VsockUnixBackend, VsockUnixBackendError};
4544
use crate::mmds::data_store::MmdsVersion;
4645
use crate::resources::{ResourcesError, VmResources};
4746
use crate::snapshot::Persist;
@@ -244,7 +243,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
244243

245244
let mut locked_device = mmio_transport_locked.locked_device();
246245
match locked_device.device_type() {
247-
TYPE_BALLOON => {
246+
virtio_ids::VIRTIO_ID_BALLOON => {
248247
let device_state = locked_device
249248
.as_any()
250249
.downcast_ref::<Balloon>()
@@ -258,7 +257,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
258257
});
259258
}
260259
// Both virtio-block and vhost-user-block share same device type.
261-
TYPE_BLOCK => {
260+
virtio_ids::VIRTIO_ID_BLOCK => {
262261
let block = locked_device.as_mut_any().downcast_mut::<Block>().unwrap();
263262
if block.is_vhost_user() {
264263
warn!(
@@ -276,7 +275,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
276275
});
277276
}
278277
}
279-
TYPE_NET => {
278+
virtio_ids::VIRTIO_ID_NET => {
280279
let net = locked_device.as_mut_any().downcast_mut::<Net>().unwrap();
281280
if let (Some(mmds_ns), None) = (net.mmds_ns.as_ref(), states.mmds.as_ref()) {
282281
let mmds_guard = mmds_ns.mmds.lock().expect("Poisoned lock");
@@ -295,7 +294,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
295294
device_info,
296295
});
297296
}
298-
TYPE_VSOCK => {
297+
virtio_ids::VIRTIO_ID_VSOCK => {
299298
let vsock = locked_device
300299
.as_mut_any()
301300
// Currently, VsockUnixBackend is the only implementation of VsockBackend.
@@ -324,7 +323,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
324323
device_info,
325324
});
326325
}
327-
TYPE_RNG => {
326+
virtio_ids::VIRTIO_ID_RNG => {
328327
let entropy = locked_device
329328
.as_mut_any()
330329
.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;
@@ -199,7 +198,7 @@ mod tests {
199198
)
200199
.unwrap();
201200

202-
assert_eq!(restored_balloon.device_type(), TYPE_BALLOON);
201+
assert_eq!(restored_balloon.device_type(), VIRTIO_ID_BALLOON);
203202
assert!(restored_balloon.restored_from_file);
204203

205204
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)