diff options
author | Jakub Staron <jstaron@google.com> | 2019-05-13 14:59:10 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-05-23 07:35:16 -0700 |
commit | 6b7373af988c457d44d7d82bd7ef3e70968f058c (patch) | |
tree | c01c17661b3ac1e2c830df3612927bc36dbe0bb8 /devices/src/virtio | |
parent | b42b645cfad3d405a1073ae549fad1effc5aa0df (diff) | |
download | crosvm-6b7373af988c457d44d7d82bd7ef3e70968f058c.tar crosvm-6b7373af988c457d44d7d82bd7ef3e70968f058c.tar.gz crosvm-6b7373af988c457d44d7d82bd7ef3e70968f058c.tar.bz2 crosvm-6b7373af988c457d44d7d82bd7ef3e70968f058c.tar.lz crosvm-6b7373af988c457d44d7d82bd7ef3e70968f058c.tar.xz crosvm-6b7373af988c457d44d7d82bd7ef3e70968f058c.tar.zst crosvm-6b7373af988c457d44d7d82bd7ef3e70968f058c.zip |
crosvm: Removes used_desc_heads arrays from various virtio devices.
BUG=None TEST=tast run ${IP} vm.CrostiniStartEverything Change-Id: I14bdc330bff23ef3397251a81bdf63e37c1e1dfd Reviewed-on: https://chromium-review.googlesource.com/1611014 Commit-Ready: Jakub StaroĊ <jstaron@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'devices/src/virtio')
-rw-r--r-- | devices/src/virtio/balloon.rs | 14 | ||||
-rw-r--r-- | devices/src/virtio/block.rs | 15 | ||||
-rw-r--r-- | devices/src/virtio/input/mod.rs | 14 | ||||
-rw-r--r-- | devices/src/virtio/net.rs | 11 | ||||
-rw-r--r-- | devices/src/virtio/p9.rs | 13 | ||||
-rw-r--r-- | devices/src/virtio/rng.rs | 14 | ||||
-rw-r--r-- | devices/src/virtio/wl.rs | 17 |
7 files changed, 31 insertions, 67 deletions
diff --git a/devices/src/virtio/balloon.rs b/devices/src/virtio/balloon.rs index 2187381..451421b 100644 --- a/devices/src/virtio/balloon.rs +++ b/devices/src/virtio/balloon.rs @@ -84,9 +84,8 @@ impl Worker { &mut self.deflate_queue }; - let mut used_desc_heads = [0; QUEUE_SIZE as usize]; - let mut used_count = 0; - for avail_desc in queue.iter(&self.mem) { + let mut needs_interrupt = false; + while let Some(avail_desc) = queue.pop(&self.mem) { if inflate && valid_inflate_desc(&avail_desc) { let num_addrs = avail_desc.len / 4; for i in 0..num_addrs as usize { @@ -112,14 +111,11 @@ impl Worker { } } - used_desc_heads[used_count] = avail_desc.index; - used_count += 1; + queue.add_used(&self.mem, avail_desc.index, 0); + needs_interrupt = true; } - for &desc_index in &used_desc_heads[..used_count] { - queue.add_used(&self.mem, desc_index, 0); - } - used_count > 0 + needs_interrupt } fn signal_used_queue(&self) { diff --git a/devices/src/virtio/block.rs b/devices/src/virtio/block.rs index ef9b145..b0b5c2f 100644 --- a/devices/src/virtio/block.rs +++ b/devices/src/virtio/block.rs @@ -618,9 +618,8 @@ impl<T: DiskFile> Worker<T> { let disk_size = self.disk_size.lock(); - let mut used_desc_heads = [(0, 0); QUEUE_SIZE as usize]; - let mut used_count = 0; - for avail_desc in queue.iter(&self.mem) { + let mut needs_interrupt = false; + while let Some(avail_desc) = queue.pop(&self.mem) { let len; match Request::parse(&avail_desc, &self.mem) { Ok(request) => { @@ -653,14 +652,12 @@ impl<T: DiskFile> Worker<T> { len = 0; } } - used_desc_heads[used_count] = (avail_desc.index, len); - used_count += 1; - } - for &(desc_index, len) in &used_desc_heads[..used_count] { - queue.add_used(&self.mem, desc_index, len); + queue.add_used(&self.mem, avail_desc.index, len); + needs_interrupt = true; } - used_count > 0 + + needs_interrupt } fn resize(&mut self, new_size: u64) -> DiskControlResult { diff --git a/devices/src/virtio/input/mod.rs b/devices/src/virtio/input/mod.rs index a57776f..4d9c904 100644 --- a/devices/src/virtio/input/mod.rs +++ b/devices/src/virtio/input/mod.rs @@ -444,9 +444,8 @@ impl<T: EventSource> Worker<T> { fn process_status_queue(&mut self) -> Result<bool> { let queue = &mut self.status_queue; - let mut used_desc_heads = [(0, 0); EVENT_QUEUE_SIZE as usize]; - let mut used_count = 0; - for avail_desc in queue.iter(&self.guest_memory) { + let mut needs_interrupt = false; + while let Some(avail_desc) = queue.pop(&self.guest_memory) { if !avail_desc.is_read_only() { panic!("Received a writable descriptor on status queue"); } @@ -462,14 +461,11 @@ impl<T: EventSource> Worker<T> { .map_err(InputError::EventsWriteError)?; } - used_desc_heads[used_count] = (avail_desc.index, len); - used_count += 1; + queue.add_used(&self.guest_memory, avail_desc.index, len as u32); + needs_interrupt = true; } - for &(desc_index, len) in &used_desc_heads[..used_count] { - queue.add_used(&self.guest_memory, desc_index, len as u32); - } - Ok(used_count > 0) + Ok(needs_interrupt) } fn run( diff --git a/devices/src/virtio/net.rs b/devices/src/virtio/net.rs index 332dfff..61a82cc 100644 --- a/devices/src/virtio/net.rs +++ b/devices/src/virtio/net.rs @@ -190,10 +190,8 @@ where fn process_tx(&mut self) { let mut frame = [0u8; MAX_BUFFER_SIZE]; - let mut used_desc_heads = [0u16; QUEUE_SIZE as usize]; - let mut used_count = 0; - for avail_desc in self.tx_queue.iter(&self.mem) { + while let Some(avail_desc) = self.tx_queue.pop(&self.mem) { let head_index = avail_desc.index; let mut next_desc = Some(avail_desc); let mut read_count = 0; @@ -227,12 +225,7 @@ where } }; - used_desc_heads[used_count] = head_index; - used_count += 1; - } - - for &desc_index in &used_desc_heads[..used_count] { - self.tx_queue.add_used(&self.mem, desc_index, 0); + self.tx_queue.add_used(&self.mem, head_index, 0); } self.signal_used_queue(); diff --git a/devices/src/virtio/p9.rs b/devices/src/virtio/p9.rs index 6bfa41c..b5d0842 100644 --- a/devices/src/virtio/p9.rs +++ b/devices/src/virtio/p9.rs @@ -222,10 +222,7 @@ impl Worker { } fn process_queue(&mut self) -> P9Result<()> { - let mut used_desc_heads = [(0, 0); QUEUE_SIZE as usize]; - let mut used_count = 0; - - for avail_desc in self.queue.iter(&self.mem) { + while let Some(avail_desc) = self.queue.pop(&self.mem) { let mut reader = Reader { mem: &self.mem, offset: 0, @@ -242,12 +239,8 @@ impl Worker { .handle_message(&mut reader, &mut writer) .map_err(P9Error::Internal)?; - used_desc_heads[used_count] = (avail_desc.index, writer.bytes_written); - used_count += 1; - } - - for &(idx, count) in &used_desc_heads[..used_count] { - self.queue.add_used(&self.mem, idx, count); + self.queue + .add_used(&self.mem, avail_desc.index, writer.bytes_written); } self.signal_used_queue()?; diff --git a/devices/src/virtio/rng.rs b/devices/src/virtio/rng.rs index 8dda4c7..8338119 100644 --- a/devices/src/virtio/rng.rs +++ b/devices/src/virtio/rng.rs @@ -48,9 +48,8 @@ impl Worker { fn process_queue(&mut self) -> bool { let queue = &mut self.queue; - let mut used_desc_heads = [(0, 0); QUEUE_SIZE as usize]; - let mut used_count = 0; - for avail_desc in queue.iter(&self.mem) { + let mut needs_interrupt = false; + while let Some(avail_desc) = queue.pop(&self.mem) { let mut len = 0; // Drivers can only read from the random device. @@ -69,14 +68,11 @@ impl Worker { } } - used_desc_heads[used_count] = (avail_desc.index, len); - used_count += 1; + queue.add_used(&self.mem, avail_desc.index, len); + needs_interrupt = true; } - for &(desc_index, len) in &used_desc_heads[..used_count] { - queue.add_used(&self.mem, desc_index, len); - } - used_count > 0 + needs_interrupt } fn signal_used_queue(&self) { diff --git a/devices/src/virtio/wl.rs b/devices/src/virtio/wl.rs index 83fcdca..4f43266 100644 --- a/devices/src/virtio/wl.rs +++ b/devices/src/virtio/wl.rs @@ -1584,12 +1584,8 @@ impl Worker { } Token::OutQueue => { let _ = out_queue_evt.read(); - // Used to buffer filled in descriptors that will be added to the used queue - // after iterating the available queue. - let mut used_descs = [(0u16, 0u32); QUEUE_SIZE as usize]; - let mut used_descs_len = 0; let min_resp_desc_len = size_of::<CtrlHeader>() as u32; - for desc in self.out_queue.iter(&self.mem) { + while let Some(desc) = self.out_queue.pop(&self.mem) { // Expects that each descriptor chain is made of one "in" followed by // one "out" descriptor. if !desc.is_write_only() { @@ -1612,19 +1608,16 @@ impl Worker { let used_len = encode_resp(resp_mem, resp).unwrap_or_default(); - used_descs[used_descs_len] = (desc.index, used_len); + self.out_queue.add_used(&self.mem, desc.index, used_len); + signal_used = true; } } } else { // Chains that are unusable get sent straight back to the used // queue. - used_descs[used_descs_len] = (desc.index, 0); + self.out_queue.add_used(&self.mem, desc.index, 0); + signal_used = true; } - used_descs_len += 1; - } - for &(index, len) in &used_descs[..used_descs_len] { - signal_used = true; - self.out_queue.add_used(&self.mem, index, len); } } Token::Kill => break 'poll, |