in src/devices/src/virtio/vsock/event_handler.rs [154:186]
fn process(&mut self, event: Events, ops: &mut EventOps) {
let source = event.fd();
let evset = event.event_set();
let rxq = self.queue_events[RXQ_INDEX].as_raw_fd();
let txq = self.queue_events[TXQ_INDEX].as_raw_fd();
let evq = self.queue_events[EVQ_INDEX].as_raw_fd();
let backend = self.backend.as_raw_fd();
let activate_evt = self.activate_evt.as_raw_fd();
if self.is_activated() {
let mut raise_irq = false;
match source {
_ if source == rxq => raise_irq = self.handle_rxq_event(evset),
_ if source == txq => raise_irq = self.handle_txq_event(evset),
_ if source == evq => raise_irq = self.handle_evq_event(evset),
_ if source == backend => {
raise_irq = self.notify_backend(evset);
}
_ if source == activate_evt => {
self.handle_activate_event(ops);
}
_ => warn!("Unexpected vsock event received: {:?}", source),
}
if raise_irq {
self.signal_used_queue().unwrap_or_default();
}
} else {
warn!(
"Vsock: The device is not yet activated. Spurious event received: {:?}",
source
);
}
}