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

Method activate

virtio-devices/src/balloon.rs:652–709  ·  view source on GitHub ↗
(&mut self, context: crate::device::ActivationContext)

Source from the content-addressed store, hash-verified

650 }
651
652 fn activate(&mut self, context: crate::device::ActivationContext) -> ActivateResult {
653 let crate::device::ActivationContext {
654 mem,
655 interrupt_cb,
656 mut queues,
657 device_status,
658 } = context;
659 self.common.activate(&queues, interrupt_cb.clone())?;
660 let (kill_evt, pause_evt) = self.common.dup_eventfds();
661
662 let mut virtqueues = Vec::new();
663 let (_, queue, queue_evt) = queues.remove(0);
664 virtqueues.push(queue);
665 let inflate_queue_evt = queue_evt;
666 let (_, queue, queue_evt) = queues.remove(0);
667 virtqueues.push(queue);
668 let deflate_queue_evt = queue_evt;
669 let reporting_queue_evt =
670 if self.common.feature_acked(VIRTIO_BALLOON_F_REPORTING) && !queues.is_empty() {
671 let (_, queue, queue_evt) = queues.remove(0);
672 virtqueues.push(queue);
673 Some(queue_evt)
674 } else {
675 None
676 };
677
678 let mut handler = BalloonEpollHandler {
679 mem,
680 queues: virtqueues,
681 interrupt_cb: interrupt_cb.clone(),
682 inflate_queue_evt,
683 deflate_queue_evt,
684 reporting_queue_evt,
685 kill_evt,
686 pause_evt,
687 pbp: None,
688 access_platform: self.common.access_platform(),
689 };
690
691 let paused = self.common.paused.clone();
692 let paused_sync = self.common.paused_sync.clone();
693 let mut epoll_threads = Vec::new();
694
695 spawn_virtio_thread(
696 &self.id,
697 &self.seccomp_action,
698 Thread::VirtioBalloon,
699 &mut epoll_threads,
700 &self.exit_evt,
701 device_status.clone(),
702 interrupt_cb.clone(),
703 move || handler.run(&paused, paused_sync.as_ref().unwrap()),
704 )?;
705 self.common.epoll_threads = Some(epoll_threads);
706
707 event!("virtio-device", "activated", "id", &self.id);
708 Ok(())
709 }

Callers

nothing calls this directly

Calls 10

newFunction · 0.85
spawn_virtio_threadFunction · 0.85
dup_eventfdsMethod · 0.80
feature_ackedMethod · 0.80
cloneMethod · 0.45
removeMethod · 0.45
pushMethod · 0.45
is_emptyMethod · 0.45
access_platformMethod · 0.45
runMethod · 0.45

Tested by

no test coverage detected