in src/devices/src/virtio/balloon/event_handler.rs [52:97]
fn process(&mut self, event: Events, ops: &mut EventOps) {
let source = event.fd();
let event_set = event.event_set();
let supported_events = EventSet::IN;
if !supported_events.contains(event_set) {
warn!(
"Received unknown event: {:?} from source: {:?}",
event_set, source
);
return;
}
if self.is_activated() {
let virtq_inflate_ev_fd = self.queue_evts[INFLATE_INDEX].as_raw_fd();
let virtq_deflate_ev_fd = self.queue_evts[DEFLATE_INDEX].as_raw_fd();
let virtq_stats_ev_fd = self.queue_evts[STATS_INDEX].as_raw_fd();
let stats_timer_fd = self.stats_timer.as_raw_fd();
let activate_fd = self.activate_evt.as_raw_fd();
// Looks better than C style if/else if/else.
match source {
_ if source == virtq_inflate_ev_fd => self
.process_inflate_queue_event()
.unwrap_or_else(report_balloon_event_fail),
_ if source == virtq_deflate_ev_fd => self
.process_deflate_queue_event()
.unwrap_or_else(report_balloon_event_fail),
_ if source == virtq_stats_ev_fd => self
.process_stats_queue_event()
.unwrap_or_else(report_balloon_event_fail),
_ if source == stats_timer_fd => self
.process_stats_timer_event()
.unwrap_or_else(report_balloon_event_fail),
_ if activate_fd == source => self.process_activate_event(ops),
_ => {
warn!("Balloon: Spurious event received: {:?}", source);
}
};
} else {
warn!(
"Balloon: The device is not yet activated. Spurious event received: {:?}",
source
);
}
}