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

Method handle_event

vhost_user_net/src/lib.rs:202–251  ·  view source on GitHub ↗
(
        &mut self,
        device_event: u16,
        _evset: EventSet,
        vrings: &[VringRwLock<GuestMemoryAtomic<GuestMemoryMmap>>],
        thread_id: usize,
    )

Source from the content-addressed store, hash-verified

200 fn set_event_idx(&mut self, _enabled: bool) {}
201
202 fn handle_event(
203 &mut self,
204 device_event: u16,
205 _evset: EventSet,
206 vrings: &[VringRwLock<GuestMemoryAtomic<GuestMemoryMmap>>],
207 thread_id: usize,
208 ) -> VhostUserBackendResult<()> {
209 let thread = self.threads[thread_id].get_mut().unwrap();
210 match device_event {
211 0 => {
212 if !thread.net.rx_tap_listening {
213 net_util::register_listener(
214 thread.net.epoll_fd.unwrap(),
215 thread.net.tap.as_raw_fd(),
216 epoll::Events::EPOLLIN,
217 u64::from(thread.net.tap_rx_event_id),
218 )
219 .map_err(Error::RegisterTapListener)?;
220 thread.net.rx_tap_listening = true;
221 }
222 }
223 1 | 4 => {
224 let mut vring = vrings[1].get_mut();
225 if thread
226 .net
227 .process_tx(self.mem.memory().deref(), vring.get_queue_mut())
228 .map_err(Error::NetQueuePair)?
229 {
230 vring
231 .signal_used_queue()
232 .map_err(Error::FailedSignalingUsedQueue)?;
233 }
234 }
235 3 => {
236 let mut vring = vrings[0].get_mut();
237 if thread
238 .net
239 .process_rx(self.mem.memory().deref(), vring.get_queue_mut())
240 .map_err(Error::NetQueuePair)?
241 {
242 vring
243 .signal_used_queue()
244 .map_err(Error::FailedSignalingUsedQueue)?;
245 }
246 }
247 _ => return Err(Error::HandleEventUnknownEvent.into()),
248 }
249
250 Ok(())
251 }
252
253 fn exit_event(&self, thread_index: usize) -> Option<(EventConsumer, EventNotifier)> {
254 let kill_evt = &self.threads[thread_index].lock().unwrap().kill_evt;

Callers

nothing calls this directly

Calls 8

register_listenerFunction · 0.85
memoryMethod · 0.80
get_mutMethod · 0.45
as_raw_fdMethod · 0.45
process_txMethod · 0.45
derefMethod · 0.45
signal_used_queueMethod · 0.45
process_rxMethod · 0.45

Tested by

no test coverage detected