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

Method activate

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

Source from the content-addressed store, hash-verified

476 }
477
478 fn activate(&mut self, context: crate::device::ActivationContext) -> ActivateResult {
479 let crate::device::ActivationContext {
480 mem,
481 interrupt_cb,
482 queues,
483 device_status,
484 } = context;
485 self.common.activate(&queues, interrupt_cb.clone())?;
486 let (kill_evt, pause_evt) = self.common.dup_eventfds();
487
488 let mut virtqueues = Vec::new();
489 let mut queue_evts = Vec::new();
490 for (_, queue, queue_evt) in queues {
491 virtqueues.push(queue);
492 queue_evts.push(queue_evt);
493 }
494
495 let mut handler = VsockEpollHandler {
496 mem,
497 queues: virtqueues,
498 queue_evts,
499 kill_evt,
500 pause_evt,
501 interrupt_cb: interrupt_cb.clone(),
502 backend: self.backend.clone(),
503 access_platform: self.common.access_platform(),
504 };
505
506 let paused = self.common.paused.clone();
507 let paused_sync = self.common.paused_sync.clone();
508 let mut epoll_threads = Vec::new();
509
510 spawn_virtio_thread(
511 &self.id,
512 &self.seccomp_action,
513 Thread::VirtioVsock,
514 &mut epoll_threads,
515 &self.exit_evt,
516 device_status.clone(),
517 interrupt_cb.clone(),
518 move || handler.run(&paused, paused_sync.as_ref().unwrap()),
519 )?;
520
521 self.common.epoll_threads = Some(epoll_threads);
522
523 event!("virtio-device", "activated", "id", &self.id);
524 Ok(())
525 }
526
527 fn reset(&mut self) {
528 self.common.reset();

Callers 1

test_virtio_deviceFunction · 0.45

Calls 7

newFunction · 0.85
spawn_virtio_threadFunction · 0.85
dup_eventfdsMethod · 0.80
cloneMethod · 0.45
pushMethod · 0.45
access_platformMethod · 0.45
runMethod · 0.45

Tested by 1

test_virtio_deviceFunction · 0.36