Skip to content

Commit 8aae298

Browse files
committed
refactor: don't duplicate VIRTIO_F_* constants in generated modules
Add a dedicated virtio_config.rs module that is bindgen'd from virtio_config.h and contains exactly the VIRTIO_F constants. This avoid the VIRTIO_F constants being redefined across bindgen'd modules for the block, net and rng devices (or in the case of the balloon device, avoids one device using another's bindgen module). Since this completely eliminates all contents from virtio_rng.rs, delete that module. Note that for some reason, my laptop's virtio_config.h was missing half the constants, despite upstream 6.8 headers containing them. So I bindgen'd this file on a .metal where all the constants were present in the header. Lastly, there's the question of the vsock modules, which has manually written bindings in the uapi module, contained in `vsock/mod.rs`. I tried autogenerating these, but bindgen chokes on the enum-constants contained in virtio_vsock.h, so I'm leaving that as-is for now, apart from deduplicating the VIRTIO_F_* constants. Signed-off-by: Patrick Roy <[email protected]>
1 parent 83a9a55 commit 8aae298

File tree

12 files changed

+15
-86
lines changed

12 files changed

+15
-86
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use super::{
2525
};
2626
use crate::devices::virtio::balloon::BalloonError;
2727
use crate::devices::virtio::device::{IrqTrigger, IrqType};
28-
use crate::devices::virtio::generated::virtio_blk::VIRTIO_F_VERSION_1;
28+
use crate::devices::virtio::generated::virtio_config::VIRTIO_F_VERSION_1;
2929
use crate::logger::IncMetric;
3030
use crate::utils::u64_to_usize;
3131
use crate::vstate::memory::{Address, ByteValued, Bytes, GuestAddress, GuestMemoryMmap};

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@ use vmm_sys_util::eventfd::EventFd;
1515
use super::{NUM_QUEUES, QUEUE_SIZE, VhostUserBlockError};
1616
use crate::devices::virtio::block::CacheType;
1717
use crate::devices::virtio::device::{DeviceState, IrqTrigger, IrqType, VirtioDevice};
18-
use crate::devices::virtio::generated::virtio_blk::{
19-
VIRTIO_BLK_F_FLUSH, VIRTIO_BLK_F_RO, VIRTIO_F_VERSION_1,
20-
};
18+
use crate::devices::virtio::generated::virtio_blk::{VIRTIO_BLK_F_FLUSH, VIRTIO_BLK_F_RO};
19+
use crate::devices::virtio::generated::virtio_config::VIRTIO_F_VERSION_1;
2120
use crate::devices::virtio::generated::virtio_ring::VIRTIO_RING_F_EVENT_IDX;
2221
use crate::devices::virtio::queue::Queue;
2322
use crate::devices::virtio::vhost_user::{VhostUserHandleBackend, VhostUserHandleImpl};

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ use crate::devices::virtio::block::CacheType;
2525
use crate::devices::virtio::block::virtio::metrics::{BlockDeviceMetrics, BlockMetricsPerDevice};
2626
use crate::devices::virtio::device::{DeviceState, IrqTrigger, IrqType, VirtioDevice};
2727
use crate::devices::virtio::generated::virtio_blk::{
28-
VIRTIO_BLK_F_FLUSH, VIRTIO_BLK_F_RO, VIRTIO_BLK_ID_BYTES, VIRTIO_F_VERSION_1,
28+
VIRTIO_BLK_F_FLUSH, VIRTIO_BLK_F_RO, VIRTIO_BLK_ID_BYTES,
2929
};
30+
use crate::devices::virtio::generated::virtio_config::VIRTIO_F_VERSION_1;
3031
use crate::devices::virtio::generated::virtio_ring::VIRTIO_RING_F_EVENT_IDX;
3132
use crate::devices::virtio::queue::Queue;
3233
use crate::devices::virtio::{ActivateError, TYPE_BLOCK};

src/vmm/src/devices/virtio/generated/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
#![allow(non_snake_case)]
1212

1313
pub mod virtio_blk;
14+
pub mod virtio_config;
1415
pub mod virtio_net;
1516
pub mod virtio_ring;
16-
pub mod virtio_rng;

src/vmm/src/devices/virtio/generated/virtio_blk.rs

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,6 @@
1515
unsafe_op_in_unsafe_fn
1616
)]
1717

18-
pub const VIRTIO_F_NOTIFY_ON_EMPTY: u32 = 24;
19-
pub const VIRTIO_F_ANY_LAYOUT: u32 = 27;
20-
pub const VIRTIO_F_VERSION_1: u32 = 32;
21-
pub const VIRTIO_F_ACCESS_PLATFORM: u32 = 33;
22-
pub const VIRTIO_F_IOMMU_PLATFORM: u32 = 33;
23-
pub const VIRTIO_F_RING_PACKED: u32 = 34;
24-
pub const VIRTIO_F_IN_ORDER: u32 = 35;
25-
pub const VIRTIO_F_ORDER_PLATFORM: u32 = 36;
26-
pub const VIRTIO_F_SR_IOV: u32 = 37;
27-
pub const VIRTIO_F_NOTIFICATION_DATA: u32 = 38;
28-
pub const VIRTIO_F_NOTIF_CONFIG_DATA: u32 = 39;
29-
pub const VIRTIO_F_RING_RESET: u32 = 40;
30-
pub const VIRTIO_F_ADMIN_VQ: u32 = 41;
3118
pub const VIRTIO_BLK_F_SIZE_MAX: u32 = 1;
3219
pub const VIRTIO_BLK_F_SEG_MAX: u32 = 2;
3320
pub const VIRTIO_BLK_F_GEOMETRY: u32 = 4;
@@ -37,8 +24,6 @@ pub const VIRTIO_BLK_F_TOPOLOGY: u32 = 10;
3724
pub const VIRTIO_BLK_F_MQ: u32 = 12;
3825
pub const VIRTIO_BLK_F_DISCARD: u32 = 13;
3926
pub const VIRTIO_BLK_F_WRITE_ZEROES: u32 = 14;
40-
pub const VIRTIO_BLK_F_SECURE_ERASE: u32 = 16;
41-
pub const VIRTIO_BLK_F_ZONED: u32 = 17;
4227
pub const VIRTIO_BLK_F_BARRIER: u32 = 0;
4328
pub const VIRTIO_BLK_F_SCSI: u32 = 7;
4429
pub const VIRTIO_BLK_F_FLUSH: u32 = 9;
@@ -52,34 +37,8 @@ pub const VIRTIO_BLK_T_FLUSH: u32 = 4;
5237
pub const VIRTIO_BLK_T_GET_ID: u32 = 8;
5338
pub const VIRTIO_BLK_T_DISCARD: u32 = 11;
5439
pub const VIRTIO_BLK_T_WRITE_ZEROES: u32 = 13;
55-
pub const VIRTIO_BLK_T_SECURE_ERASE: u32 = 14;
56-
pub const VIRTIO_BLK_T_ZONE_APPEND: u32 = 15;
57-
pub const VIRTIO_BLK_T_ZONE_REPORT: u32 = 16;
58-
pub const VIRTIO_BLK_T_ZONE_OPEN: u32 = 18;
59-
pub const VIRTIO_BLK_T_ZONE_CLOSE: u32 = 20;
60-
pub const VIRTIO_BLK_T_ZONE_FINISH: u32 = 22;
61-
pub const VIRTIO_BLK_T_ZONE_RESET: u32 = 24;
62-
pub const VIRTIO_BLK_T_ZONE_RESET_ALL: u32 = 26;
6340
pub const VIRTIO_BLK_T_BARRIER: u32 = 2147483648;
64-
pub const VIRTIO_BLK_Z_NONE: u32 = 0;
65-
pub const VIRTIO_BLK_Z_HM: u32 = 1;
66-
pub const VIRTIO_BLK_Z_HA: u32 = 2;
67-
pub const VIRTIO_BLK_ZT_CONV: u32 = 1;
68-
pub const VIRTIO_BLK_ZT_SWR: u32 = 2;
69-
pub const VIRTIO_BLK_ZT_SWP: u32 = 3;
70-
pub const VIRTIO_BLK_ZS_NOT_WP: u32 = 0;
71-
pub const VIRTIO_BLK_ZS_EMPTY: u32 = 1;
72-
pub const VIRTIO_BLK_ZS_IOPEN: u32 = 2;
73-
pub const VIRTIO_BLK_ZS_EOPEN: u32 = 3;
74-
pub const VIRTIO_BLK_ZS_CLOSED: u32 = 4;
75-
pub const VIRTIO_BLK_ZS_RDONLY: u32 = 13;
76-
pub const VIRTIO_BLK_ZS_FULL: u32 = 14;
77-
pub const VIRTIO_BLK_ZS_OFFLINE: u32 = 15;
7841
pub const VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP: u32 = 1;
7942
pub const VIRTIO_BLK_S_OK: u32 = 0;
8043
pub const VIRTIO_BLK_S_IOERR: u32 = 1;
8144
pub const VIRTIO_BLK_S_UNSUPP: u32 = 2;
82-
pub const VIRTIO_BLK_S_ZONE_INVALID_CMD: u32 = 3;
83-
pub const VIRTIO_BLK_S_ZONE_UNALIGNED_WP: u32 = 4;
84-
pub const VIRTIO_BLK_S_ZONE_OPEN_RESOURCE: u32 = 5;
85-
pub const VIRTIO_BLK_S_ZONE_ACTIVE_RESOURCE: u32 = 6;

src/vmm/src/devices/virtio/generated/virtio_net.rs

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,6 @@
1515
unsafe_op_in_unsafe_fn
1616
)]
1717

18-
pub const VIRTIO_F_NOTIFY_ON_EMPTY: u32 = 24;
19-
pub const VIRTIO_F_ANY_LAYOUT: u32 = 27;
20-
pub const VIRTIO_F_VERSION_1: u32 = 32;
21-
pub const VIRTIO_F_ACCESS_PLATFORM: u32 = 33;
22-
pub const VIRTIO_F_IOMMU_PLATFORM: u32 = 33;
23-
pub const VIRTIO_F_RING_PACKED: u32 = 34;
24-
pub const VIRTIO_F_IN_ORDER: u32 = 35;
25-
pub const VIRTIO_F_ORDER_PLATFORM: u32 = 36;
26-
pub const VIRTIO_F_SR_IOV: u32 = 37;
27-
pub const VIRTIO_F_NOTIFICATION_DATA: u32 = 38;
28-
pub const VIRTIO_F_NOTIF_CONFIG_DATA: u32 = 39;
29-
pub const VIRTIO_F_RING_RESET: u32 = 40;
30-
pub const VIRTIO_F_ADMIN_VQ: u32 = 41;
3118
pub const VIRTIO_NET_F_CSUM: u32 = 0;
3219
pub const VIRTIO_NET_F_GUEST_CSUM: u32 = 1;
3320
pub const VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: u32 = 2;
@@ -50,13 +37,7 @@ pub const VIRTIO_NET_F_CTRL_RX_EXTRA: u32 = 20;
5037
pub const VIRTIO_NET_F_GUEST_ANNOUNCE: u32 = 21;
5138
pub const VIRTIO_NET_F_MQ: u32 = 22;
5239
pub const VIRTIO_NET_F_CTRL_MAC_ADDR: u32 = 23;
53-
pub const VIRTIO_NET_F_VQ_NOTF_COAL: u32 = 52;
54-
pub const VIRTIO_NET_F_NOTF_COAL: u32 = 53;
55-
pub const VIRTIO_NET_F_GUEST_USO4: u32 = 54;
56-
pub const VIRTIO_NET_F_GUEST_USO6: u32 = 55;
57-
pub const VIRTIO_NET_F_HOST_USO: u32 = 56;
5840
pub const VIRTIO_NET_F_HASH_REPORT: u32 = 57;
59-
pub const VIRTIO_NET_F_GUEST_HDRLEN: u32 = 59;
6041
pub const VIRTIO_NET_F_RSS: u32 = 60;
6142
pub const VIRTIO_NET_F_RSC_EXT: u32 = 61;
6243
pub const VIRTIO_NET_F_STANDBY: u32 = 62;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use vmm_sys_util::eventfd::EventFd;
1616

1717
use super::NET_QUEUE_MAX_SIZE;
1818
use crate::devices::virtio::device::{DeviceState, IrqTrigger, IrqType, VirtioDevice};
19-
use crate::devices::virtio::generated::virtio_blk::VIRTIO_F_VERSION_1;
19+
use crate::devices::virtio::generated::virtio_config::VIRTIO_F_VERSION_1;
2020
use crate::devices::virtio::generated::virtio_net::{
2121
VIRTIO_NET_F_CSUM, VIRTIO_NET_F_GUEST_CSUM, VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6,
2222
VIRTIO_NET_F_GUEST_UFO, VIRTIO_NET_F_HOST_TSO4, VIRTIO_NET_F_HOST_TSO6, VIRTIO_NET_F_HOST_UFO,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use super::metrics::METRICS;
1313
use super::{RNG_NUM_QUEUES, RNG_QUEUE};
1414
use crate::devices::DeviceError;
1515
use crate::devices::virtio::device::{DeviceState, IrqTrigger, IrqType, VirtioDevice};
16-
use crate::devices::virtio::generated::virtio_rng::VIRTIO_F_VERSION_1;
16+
use crate::devices::virtio::generated::virtio_config::VIRTIO_F_VERSION_1;
1717
use crate::devices::virtio::iov_deque::IovDequeError;
1818
use crate::devices::virtio::iovec::IoVecBufferMut;
1919
use crate::devices::virtio::queue::{FIRECRACKER_MAX_QUEUE_SIZE, Queue};

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use super::packet::{VSOCK_PKT_HDR_SIZE, VsockPacketRx, VsockPacketTx};
3131
use super::{VsockBackend, defs};
3232
use crate::devices::virtio::ActivateError;
3333
use crate::devices::virtio::device::{DeviceState, IrqTrigger, IrqType, VirtioDevice};
34+
use crate::devices::virtio::generated::virtio_config::{VIRTIO_F_IN_ORDER, VIRTIO_F_VERSION_1};
3435
use crate::devices::virtio::queue::Queue as VirtQueue;
3536
use crate::devices::virtio::vsock::VsockError;
3637
use crate::devices::virtio::vsock::metrics::METRICS;
@@ -49,7 +50,7 @@ pub(crate) const VIRTIO_VSOCK_EVENT_TRANSPORT_RESET: u32 = 0;
4950
/// - VIRTIO_F_IN_ORDER: the device returns used buffers in the same order that the driver makes
5051
/// them available.
5152
pub(crate) const AVAIL_FEATURES: u64 =
52-
(1 << uapi::VIRTIO_F_VERSION_1 as u64) | (1 << uapi::VIRTIO_F_IN_ORDER as u64);
53+
(1 << VIRTIO_F_VERSION_1 as u64) | (1 << VIRTIO_F_IN_ORDER as u64);
5354

5455
/// Structure representing the vsock device.
5556
#[derive(Debug)]

0 commit comments

Comments
 (0)