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

Method handle_event

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

Source from the content-addressed store, hash-verified

419
420impl EpollHelperHandler for BalloonEpollHandler {
421 fn handle_event(
422 &mut self,
423 _helper: &mut EpollHelper,
424 event: &epoll::Event,
425 ) -> result::Result<(), EpollHelperError> {
426 let ev_type = event.data as u16;
427 match ev_type {
428 INFLATE_QUEUE_EVENT => {
429 self.inflate_queue_evt.read().map_err(|e| {
430 EpollHelperError::HandleEvent(anyhow!(
431 "Failed to get inflate queue event: {e:?}"
432 ))
433 })?;
434 self.process_queue(0).map_err(|e| {
435 EpollHelperError::HandleEvent(anyhow!(
436 "Failed to signal used inflate queue: {e:?}"
437 ))
438 })?;
439 }
440 DEFLATE_QUEUE_EVENT => {
441 self.deflate_queue_evt.read().map_err(|e| {
442 EpollHelperError::HandleEvent(anyhow!(
443 "Failed to get deflate queue event: {e:?}"
444 ))
445 })?;
446 self.process_queue(1).map_err(|e| {
447 EpollHelperError::HandleEvent(anyhow!(
448 "Failed to signal used deflate queue: {e:?}"
449 ))
450 })?;
451 }
452 REPORTING_QUEUE_EVENT => {
453 if let Some(reporting_queue_evt) = self.reporting_queue_evt.as_ref() {
454 reporting_queue_evt.read().map_err(|e| {
455 EpollHelperError::HandleEvent(anyhow!(
456 "Failed to get reporting queue event: {e:?}"
457 ))
458 })?;
459 self.process_reporting_queue(2).map_err(|e| {
460 EpollHelperError::HandleEvent(anyhow!(
461 "Failed to signal used inflate queue: {e:?}"
462 ))
463 })?;
464 } else {
465 return Err(EpollHelperError::HandleEvent(anyhow!(
466 "Invalid reporting queue event as no eventfd registered"
467 )));
468 }
469 }
470 _ => {
471 return Err(EpollHelperError::HandleEvent(anyhow!(
472 "Unknown event for virtio-balloon"
473 )));
474 }
475 }
476
477 Ok(())
478 }

Callers

nothing calls this directly

Calls 3

readMethod · 0.45
process_queueMethod · 0.45

Tested by

no test coverage detected