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

Method handle_event

virtio-devices/src/mem.rs:673–701  ·  view source on GitHub ↗
(
        &mut self,
        _helper: &mut EpollHelper,
        event: &epoll::Event,
    )

Source from the content-addressed store, hash-verified

671
672impl EpollHelperHandler for MemEpollHandler {
673 fn handle_event(
674 &mut self,
675 _helper: &mut EpollHelper,
676 event: &epoll::Event,
677 ) -> result::Result<(), EpollHelperError> {
678 let ev_type = event.data as u16;
679 match ev_type {
680 QUEUE_AVAIL_EVENT => {
681 self.queue_evt.read().map_err(|e| {
682 EpollHelperError::HandleEvent(anyhow!("Failed to get queue event: {e:?}"))
683 })?;
684
685 let needs_notification = self.process_queue().map_err(|e| {
686 EpollHelperError::HandleEvent(anyhow!("Failed to process queue : {e:?}"))
687 })?;
688 if needs_notification {
689 self.signal(VirtioInterruptType::Queue(0)).map_err(|e| {
690 EpollHelperError::HandleEvent(anyhow!("Failed to signal used queue: {e:?}"))
691 })?;
692 }
693 }
694 _ => {
695 return Err(EpollHelperError::HandleEvent(anyhow!(
696 "Unexpected event: {ev_type}"
697 )));
698 }
699 }
700 Ok(())
701 }
702}
703
704#[derive(PartialEq, Eq, PartialOrd, Ord)]

Callers

nothing calls this directly

Calls 3

readMethod · 0.45
process_queueMethod · 0.45
signalMethod · 0.45

Tested by

no test coverage detected