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

Method activate

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

Source from the content-addressed store, hash-verified

727 }
728
729 fn activate(&mut self, context: crate::device::ActivationContext) -> ActivateResult {
730 let crate::device::ActivationContext {
731 mem,
732 interrupt_cb,
733 mut queues,
734 device_status,
735 } = context;
736 self.common.activate(&queues, interrupt_cb.clone())?;
737 self.resizer
738 .acked_features
739 .store(self.common.acked_features, Ordering::Relaxed);
740
741 if self.common.feature_acked(VIRTIO_CONSOLE_F_SIZE)
742 && let Err(e) = interrupt_cb.trigger(VirtioInterruptType::Config)
743 {
744 error!("Failed to signal console driver: {e:?}");
745 }
746
747 let (kill_evt, pause_evt) = self.common.dup_eventfds();
748
749 let (_, input_queue, input_queue_evt) = queues.remove(0);
750 let (_, output_queue, output_queue_evt) = queues.remove(0);
751
752 let mut handler = ConsoleEpollHandler::new(
753 mem,
754 input_queue,
755 output_queue,
756 interrupt_cb.clone(),
757 self.in_buffer.clone(),
758 Arc::clone(&self.resizer),
759 self.endpoint.clone(),
760 input_queue_evt,
761 output_queue_evt,
762 self.resizer.config_evt.try_clone().unwrap(),
763 self.resize_pipe.as_ref().map(|p| p.try_clone().unwrap()),
764 kill_evt,
765 pause_evt,
766 self.common.access_platform(),
767 );
768
769 let paused = self.common.paused.clone();
770 let paused_sync = self.common.paused_sync.clone();
771 let mut epoll_threads = Vec::new();
772
773 spawn_virtio_thread(
774 &self.id,
775 &self.seccomp_action,
776 Thread::VirtioConsole,
777 &mut epoll_threads,
778 &self.exit_evt,
779 device_status.clone(),
780 interrupt_cb.clone(),
781 move || handler.run(&paused, paused_sync.as_ref().unwrap()),
782 )?;
783
784 self.common.epoll_threads = Some(epoll_threads);
785
786 event!("virtio-device", "activated", "id", &self.id);

Callers

nothing calls this directly

Calls 11

newFunction · 0.85
spawn_virtio_threadFunction · 0.85
feature_ackedMethod · 0.80
dup_eventfdsMethod · 0.80
cloneMethod · 0.45
triggerMethod · 0.45
removeMethod · 0.45
try_cloneMethod · 0.45
mapMethod · 0.45
access_platformMethod · 0.45
runMethod · 0.45

Tested by

no test coverage detected