diff --git a/crates/virtio-queue/src/lib.rs b/crates/virtio-queue/src/lib.rs index e331b012..40184d92 100644 --- a/crates/virtio-queue/src/lib.rs +++ b/crates/virtio-queue/src/lib.rs @@ -19,7 +19,6 @@ pub mod defs; #[cfg(any(test, feature = "test-utils"))] pub mod mock; -use std::cmp::min; use std::convert::TryFrom; use std::fmt::{self, Debug, Display}; use std::marker::PhantomData; @@ -458,11 +457,6 @@ pub trait QueueStateT<M: GuestAddressSpace> { /// Get the maximum size of the virtio queue. fn max_size(&self) -> u16; - /// Return the actual size of the queue. - /// - /// The virtio driver may configure queue size smaller than the value reported by `max_size()`. - fn actual_size(&self) -> u16; - /// Configure the queue size for the virtio queue. /// /// The `size` should power of two and less than or equal to value reported by `max_size()`, @@ -576,7 +570,7 @@ impl<M: GuestAddressSpace> QueueState<M> { desc_table: self.desc_table, avail_ring: self.avail_ring, last_index: idx, - queue_size: self.actual_size(), + queue_size: self.size, next_avail: &mut self.next_avail, }) } @@ -584,7 +578,7 @@ impl<M: GuestAddressSpace> QueueState<M> { // Helper method that writes `val` to the `avail_event` field of the used ring, using // the provided ordering. fn set_avail_event(&self, mem: &M::T, val: u16, order: Ordering) -> Result<(), Error> { - let elem_sz = VIRTQ_USED_ELEMENT_SIZE * u64::from(self.actual_size()); + let elem_sz = VIRTQ_USED_ELEMENT_SIZE * u64::from(self.size); let offset = VIRTQ_USED_RING_HEADER_SIZE + elem_sz; let addr = self.used_ring.unchecked_add(offset); @@ -633,7 +627,7 @@ impl<M: GuestAddressSpace> QueueState<M> { fn used_event(&self, mem: &M::T, order: Ordering) -> Result<Wrapping<u16>, Error> { // Safe because we have validated the queue and access guest // memory through GuestMemory interfaces. - let elem_sz = u64::from(self.actual_size()) * VIRTQ_AVAIL_ELEMENT_SIZE; + let elem_sz = u64::from(self.size) * VIRTQ_AVAIL_ELEMENT_SIZE; let offset = VIRTQ_AVAIL_RING_HEADER_SIZE + elem_sz; let used_event_addr = self.avail_ring.unchecked_add(offset); @@ -661,7 +655,7 @@ impl<M: GuestAddressSpace> QueueStateT<M> for QueueState<M> { } fn is_valid(&self, mem: &M::T) -> bool { - let queue_size = self.actual_size() as u64; + let queue_size = self.size as u64; let desc_table = self.desc_table; let desc_table_size = size_of::<Descriptor>() as u64 * queue_size; let avail_ring = self.avail_ring; @@ -726,10 +720,6 @@ impl<M: GuestAddressSpace> QueueStateT<M> for QueueState<M> { self.max_size } - fn actual_size(&self) -> u16 { - min(self.size, self.max_size) - } - fn set_size(&mut self, size: u16) { if size > self.max_size() || size == 0 || (size & (size - 1)) != 0 { error!("virtio queue with invalid size: {}", size); @@ -796,7 +786,7 @@ impl<M: GuestAddressSpace> QueueStateT<M> for QueueState<M> { } fn add_used(&mut self, mem: &M::T, head_index: u16, len: u32) -> Result<(), Error> { - if head_index >= self.actual_size() { + if head_index >= self.size { error!( "attempted to add out of bounds descriptor to used ring: {}", head_index @@ -804,7 +794,7 @@ impl<M: GuestAddressSpace> QueueStateT<M> for QueueState<M> { return Err(Error::InvalidDescriptorIndex); } - let next_used_index = u64::from(self.next_used.0 % self.actual_size()); + let next_used_index = u64::from(self.next_used.0 % self.size); let elem_sz = next_used_index * VIRTQ_USED_ELEMENT_SIZE; let offset = VIRTQ_USED_RING_HEADER_SIZE + elem_sz; let addr = self.used_ring.unchecked_add(offset); @@ -923,10 +913,6 @@ impl<M: GuestAddressSpace> QueueStateT<M> for QueueStateSync<M> { self.state.lock().unwrap().max_size() } - fn actual_size(&self) -> u16 { - self.state.lock().unwrap().actual_size() - } - fn set_size(&mut self, size: u16) { self.state.lock().unwrap().set_size(size); } @@ -1025,13 +1011,6 @@ impl<M: GuestAddressSpace, S: QueueStateT<M>> Queue<M, S> { self.state.max_size() } - /// Return the actual size of the queue. - /// - /// The virtio driver may configure queue size smaller than the value reported by `max_size()`. - pub fn actual_size(&self) -> u16 { - self.state.actual_size() - } - /// Configure the queue size for the virtio queue. /// /// The `size` should power of two and less than or equal to value reported by `max_size()`,