virtio-devices: Use u16 for the queue index

The number of queues is limited to a u16 so this most consistent. The
vm-virtio crate API unfortunately uses usize but its safe to convert up
from u16 to usize.

Signed-off-by: Rob Bradford <rbradford@meta.com>
This commit is contained in:
Rob Bradford
2026-07-22 18:30:45 +01:00
parent ab6afc21ec
commit 5f86e58775
5 changed files with 29 additions and 29 deletions

View File

@@ -68,7 +68,7 @@ pub struct VirtioSharedMemoryList {
pub struct ActivationContext {
pub mem: GuestMemoryAtomic<GuestMemoryMmap>,
pub interrupt_cb: Arc<dyn VirtioInterrupt>,
pub queues: Vec<(usize, Queue, EventFd)>,
pub queues: Vec<(u16, Queue, EventFd)>,
pub device_status: Arc<AtomicU8>,
}
@@ -307,7 +307,7 @@ impl VirtioCommon {
pub fn activate(
&mut self,
queues: &[(usize, Queue, EventFd)],
queues: &[(u16, Queue, EventFd)],
interrupt_cb: Arc<dyn VirtioInterrupt>,
) -> ActivateResult {
if queues.len() < self.min_queues.into() {

View File

@@ -316,7 +316,7 @@ pub struct VirtioPciDeviceActivator {
memory: Option<GuestMemoryAtomic<GuestMemoryMmap>>,
device: Arc<Mutex<dyn VirtioDevice>>,
device_activated: Arc<AtomicBool>,
queues: Option<Vec<(usize, Queue, EventFd)>>,
queues: Option<Vec<(u16, Queue, EventFd)>>,
barrier: Option<Arc<Barrier>>,
id: String,
status: Arc<AtomicU8>,
@@ -834,7 +834,7 @@ impl VirtioPciDevice {
}
queues.push((
queue_index,
queue_index as u16,
vm_virtio::clone_queue(queue),
self.queue_evts[queue_index].try_clone().unwrap(),
));

View File

@@ -112,7 +112,7 @@ pub struct Vdpa {
id: String,
vhost: Option<VhostKernVdpa<GuestMemoryAtomic<GuestMemoryMmap>>>,
iova_range: VhostVdpaIovaRange,
enabled_queues: BTreeMap<usize, bool>,
enabled_queues: BTreeMap<u16, bool>,
backend_features: u64,
migrating: bool,
}
@@ -209,7 +209,7 @@ impl Vdpa {
self.vhost
.as_ref()
.unwrap()
.set_vring_enable(*queue_index, enable)
.set_vring_enable(*queue_index as usize, enable)
.map_err(Error::SetVringEnable)?;
*enabled = enable;
}
@@ -222,7 +222,7 @@ impl Vdpa {
&mut self,
_mem: &GuestMemoryMmap,
virtio_interrupt: &dyn VirtioInterrupt,
queues: &[(usize, Queue, EventFd)],
queues: &[(u16, Queue, EventFd)],
) -> Result<()> {
assert!(self.vhost.is_some());
self.vhost
@@ -242,7 +242,7 @@ impl Vdpa {
self.vhost
.as_ref()
.unwrap()
.set_vring_num(*queue_index, queue_size)
.set_vring_num(*queue_index as usize, queue_size)
.map_err(Error::SetVringNum)?;
let config_data = VringConfigData {
@@ -276,28 +276,28 @@ impl Vdpa {
self.vhost
.as_ref()
.unwrap()
.set_vring_addr(*queue_index, &config_data)
.set_vring_addr(*queue_index as usize, &config_data)
.map_err(Error::SetVringAddr)?;
self.vhost
.as_ref()
.unwrap()
.set_vring_base(*queue_index, 0)
.set_vring_base(*queue_index as usize, 0)
.map_err(Error::SetVringBase)?;
if let Some(eventfd) =
virtio_interrupt.notifier(VirtioInterruptType::Queue(*queue_index as u16))
virtio_interrupt.notifier(VirtioInterruptType::Queue(*queue_index))
{
self.vhost
.as_ref()
.unwrap()
.set_vring_call(*queue_index, &eventfd)
.set_vring_call(*queue_index as usize, &eventfd)
.map_err(Error::SetVringCall)?;
}
self.vhost
.as_ref()
.unwrap()
.set_vring_kick(*queue_index, queue_evt)
.set_vring_kick(*queue_index as usize, queue_evt)
.map_err(Error::SetVringKick)?;
self.enabled_queues.insert(*queue_index, false);

View File

@@ -277,7 +277,7 @@ pub struct VhostUserEpollHandler<S: VhostUserFrontendReqHandler> {
pub mem: GuestMemoryAtomic<GuestMemoryMmap>,
pub kill_evt: EventFd,
pub pause_evt: EventFd,
pub queues: Vec<(usize, Queue, EventFd)>,
pub queues: Vec<(u16, Queue, EventFd)>,
pub virtio_interrupt: Arc<dyn VirtioInterrupt>,
pub acked_features: u64,
pub acked_protocol_features: u64,
@@ -484,7 +484,7 @@ impl VhostUserCommon {
pub fn activate<T: VhostUserFrontendReqHandler>(
&mut self,
mem: GuestMemoryAtomic<GuestMemoryMmap>,
queues: &[(usize, Queue, EventFd)],
queues: &[(u16, Queue, EventFd)],
interrupt_cb: Arc<dyn VirtioInterrupt>,
acked_features: u64,
backend_req_handler: Option<FrontendReqHandler<T>>,

View File

@@ -65,7 +65,7 @@ pub struct VhostUserHandle {
shm_log: Option<Arc<MmapRegion>>,
acked_features: u64,
vrings_info: Option<Vec<VringInfo>>,
queue_indexes: Vec<usize>,
queue_indexes: Vec<u16>,
}
impl VhostUserHandle {
@@ -167,7 +167,7 @@ impl VhostUserHandle {
pub fn setup_vhost_user<S: VhostUserFrontendReqHandler>(
&mut self,
mem: &GuestMemoryMmap,
queues: &[(usize, Queue, EventFd)],
queues: &[(u16, Queue, EventFd)],
virtio_interrupt: &dyn VirtioInterrupt,
acked_features: u64,
backend_req_handler: &Option<FrontendReqHandler<S>>,
@@ -195,7 +195,7 @@ impl VhostUserHandle {
// at early stage.
for (queue_index, queue, _) in queues.iter() {
self.vu
.set_vring_num(*queue_index, queue.size())
.set_vring_num(*queue_index as usize, queue.size())
.map_err(Error::VhostUserSetVringNum)?;
}
@@ -260,7 +260,7 @@ impl VhostUserHandle {
});
self.vu
.set_vring_addr(*queue_index, &config_data)
.set_vring_addr(*queue_index as usize, &config_data)
.map_err(Error::VhostUserSetVringAddr)?;
let base = if let Some(bases) = vring_bases {
bases[i] as u16
@@ -271,19 +271,19 @@ impl VhostUserHandle {
.0
};
self.vu
.set_vring_base(*queue_index, base)
.set_vring_base(*queue_index as usize, base)
.map_err(Error::VhostUserSetVringBase)?;
if let Some(eventfd) =
virtio_interrupt.notifier(VirtioInterruptType::Queue(*queue_index as u16))
virtio_interrupt.notifier(VirtioInterruptType::Queue(*queue_index))
{
self.vu
.set_vring_call(*queue_index, &eventfd)
.set_vring_call(*queue_index as usize, &eventfd)
.map_err(Error::VhostUserSetVringCall)?;
}
self.vu
.set_vring_kick(*queue_index, queue_evt)
.set_vring_kick(*queue_index as usize, queue_evt)
.map_err(Error::VhostUserSetVringKick)?;
self.queue_indexes.push(*queue_index);
@@ -303,10 +303,10 @@ impl VhostUserHandle {
Ok(())
}
fn enable_vhost_user_vrings(&mut self, queue_indexes: Vec<usize>, enable: bool) -> Result<()> {
fn enable_vhost_user_vrings(&mut self, queue_indexes: Vec<u16>, enable: bool) -> Result<()> {
for queue_index in queue_indexes {
self.vu
.set_vring_enable(queue_index, enable)
.set_vring_enable(queue_index as usize, enable)
.map_err(Error::VhostUserSetVringEnable)?;
}
@@ -316,12 +316,12 @@ impl VhostUserHandle {
pub fn reset_vhost_user(&mut self) -> Result<()> {
for queue_index in self.queue_indexes.drain(..) {
self.vu
.set_vring_enable(queue_index, false)
.set_vring_enable(queue_index as usize, false)
.map_err(Error::VhostUserSetVringEnable)?;
let _ = self
.vu
.get_vring_base(queue_index)
.get_vring_base(queue_index as usize)
.map_err(Error::VhostUserGetVringBase)?;
}
@@ -360,7 +360,7 @@ impl VhostUserHandle {
pub fn reinitialize_vhost_user<S: VhostUserFrontendReqHandler>(
&mut self,
mem: &GuestMemoryMmap,
queues: &[(usize, Queue, EventFd)],
queues: &[(u16, Queue, EventFd)],
virtio_interrupt: &dyn VirtioInterrupt,
acked_features: u64,
acked_protocol_features: u64,
@@ -581,7 +581,7 @@ impl VhostUserHandle {
for queue_index in &self.queue_indexes {
let base = self
.vu
.get_vring_base(*queue_index)
.get_vring_base(*queue_index as usize)
.map_err(Error::VhostUserGetVringBase)?;
vring_bases.push(base as u64);
}