Skip to content

Commit 485445d

Browse files
Packed vq tests + cargo fmt fixes
Signed-off-by: Prakash Shekhar <[email protected]>
1 parent 0f3b516 commit 485445d

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

vhost/src/backend.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use super::{Error, Result};
2525
pub const VHOST_MAX_MEMORY_REGIONS: usize = 255;
2626

2727
/// Vring configuration data.
28-
///
28+
///
2929
/// For split virtqueues (traditional layout):
3030
/// - `desc_table_addr`: Descriptor table address
3131
/// - `used_ring_addr`: Used ring buffer address

vhost/src/vhost_kern/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ pub trait VhostKernBackend: AsRawFd {
7979

8080
// Check if packed ring format is being used
8181
#[cfg(feature = "vhost-user")]
82-
let is_packed = config_data.flags & VhostUserVringAddrFlags::VHOST_VRING_F_PACKED.bits() != 0;
82+
let is_packed =
83+
config_data.flags & VhostUserVringAddrFlags::VHOST_VRING_F_PACKED.bits() != 0;
8384
#[cfg(not(feature = "vhost-user"))]
8485
let is_packed = false;
8586

vhost/src/vhost_user/message.rs

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,7 @@ impl VhostUserMsgValidator for VhostUserVringAddr {
783783
if (self.flags & !VhostUserVringAddrFlags::all().bits()) != 0 {
784784
return false;
785785
}
786-
786+
787787
// Check if packed ring format
788788
if self.flags & VhostUserVringAddrFlags::VHOST_VRING_F_PACKED.bits() != 0 {
789789
// Packed ring validation:
@@ -1438,4 +1438,57 @@ mod tests {
14381438
msg.flags |= 0x4;
14391439
assert!(!msg.is_valid());
14401440
}
1441+
1442+
#[test]
1443+
fn test_packed_virtqueue_features() {
1444+
let a = VhostUserVirtioFeatures::RING_PACKED.bits();
1445+
assert_eq!(a, 0x4_0000_0000);
1446+
1447+
let a = VhostUserVringAddrFlags::VHOST_VRING_F_PACKED.bits();
1448+
assert_eq!(a, 0x2);
1449+
1450+
let combined = VhostUserVringAddrFlags::VHOST_VRING_F_LOG
1451+
| VhostUserVringAddrFlags::VHOST_VRING_F_PACKED;
1452+
let a = combined.bits();
1453+
assert_eq!(a, 0x3);
1454+
}
1455+
1456+
#[test]
1457+
fn test_packed_vring_addr_validation() {
1458+
let mut addr = VhostUserVringAddr::new(
1459+
0,
1460+
VhostUserVringAddrFlags::VHOST_VRING_F_PACKED,
1461+
0x1000,
1462+
0x2000,
1463+
0x3000,
1464+
0x4000,
1465+
);
1466+
1467+
let a = addr.index;
1468+
assert_eq!(a, 0);
1469+
let a = addr.flags;
1470+
assert_eq!(a, VhostUserVringAddrFlags::VHOST_VRING_F_PACKED.bits());
1471+
let a = addr.descriptor;
1472+
assert_eq!(a, 0x1000);
1473+
let a = addr.used;
1474+
assert_eq!(a, 0x2000);
1475+
let a = addr.available;
1476+
assert_eq!(a, 0x3000);
1477+
let a = addr.log;
1478+
assert_eq!(a, 0x4000);
1479+
assert!(addr.is_valid());
1480+
1481+
addr.descriptor = 0x1001;
1482+
assert!(!addr.is_valid());
1483+
addr.descriptor = 0x1000;
1484+
1485+
addr.available = 0x3001;
1486+
assert!(!addr.is_valid());
1487+
addr.available = 0x3000;
1488+
1489+
addr.used = 0x2001;
1490+
assert!(!addr.is_valid());
1491+
addr.used = 0x2000;
1492+
assert!(addr.is_valid());
1493+
}
14411494
}

0 commit comments

Comments
 (0)