MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / process_tx

Method process_tx

virtio-devices/src/vsock/device.rs:175–208  ·  view source on GitHub ↗

Walk the driver-provided TX queue buffers, package them up as vsock packets, and send them to the backend for processing.

(&mut self)

Source from the content-addressed store, hash-verified

173 /// the backend for processing.
174 ///
175 fn process_tx(&mut self) -> result::Result<bool, Error> {
176 debug!("vsock: epoll_handler::process_tx()");
177
178 let mut used_descs = false;
179
180 while let Some(mut desc_chain) = self.queues[1].pop_descriptor_chain(self.mem.memory()) {
181 let pkt = match VsockPacket::from_tx_virtq_head(
182 &mut desc_chain,
183 self.access_platform.as_deref(),
184 ) {
185 Ok(pkt) => pkt,
186 Err(e) => {
187 error!("vsock: error reading TX packet: {e:?}");
188 self.queues[1]
189 .add_used(desc_chain.memory(), desc_chain.head_index(), 0)
190 .map_err(Error::QueueAddUsed)?;
191 used_descs = true;
192 continue;
193 }
194 };
195
196 if self.backend.write().unwrap().send_pkt(&pkt).is_err() {
197 self.queues[1].go_to_previous_position();
198 break;
199 }
200
201 self.queues[1]
202 .add_used(desc_chain.memory(), desc_chain.head_index(), 0)
203 .map_err(Error::QueueAddUsed)?;
204 used_descs = true;
205 }
206
207 Ok(used_descs)
208 }
209
210 fn run(
211 &mut self,

Callers 1

handle_eventMethod · 0.45

Calls 3

memoryMethod · 0.80
send_pktMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected