(&mut self, context: crate::device::ActivationContext)
| 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 | } |
nothing calls this directly
no test coverage detected