Skip to content

Commit 6b5f4b1

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 0f3e8b3 commit 6b5f4b1

File tree

12 files changed

+15
-52
lines changed

12 files changed

+15
-52
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 & 13 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;
File renamed without changes.

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

Lines changed: 0 additions & 13 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;

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)