fn process()

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
            );
        }
    }