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

Method add_interrupt_controller

vmm/src/device_manager.rs:1775–1820  ·  view source on GitHub ↗
(
        &mut self,
    )

Source from the content-addressed store, hash-verified

1773
1774 #[cfg(target_arch = "aarch64")]
1775 fn add_interrupt_controller(
1776 &mut self,
1777 ) -> DeviceManagerResult<Arc<Mutex<dyn InterruptController>>> {
1778 let interrupt_controller: Arc<Mutex<gic::Gic>> = Arc::new(Mutex::new(
1779 gic::Gic::new(
1780 self.config.lock().unwrap().cpus.boot_vcpus,
1781 Arc::clone(&self.msi_interrupt_manager),
1782 self.address_manager.vm.clone(),
1783 )
1784 .map_err(DeviceManagerError::CreateInterruptController)?,
1785 ));
1786
1787 self.interrupt_controller = Some(interrupt_controller.clone());
1788
1789 // Restore the vGic if this is in the process of restoration
1790 let id = String::from(gic::GIC_SNAPSHOT_ID);
1791 if let Some(vgic_snapshot) = snapshot_from_id(self.snapshot.as_ref(), &id) {
1792 // PMU support is optional. Nothing should be impacted if the PMU initialization failed.
1793 if self
1794 .cpu_manager
1795 .lock()
1796 .unwrap()
1797 .init_pmu(AARCH64_PMU_IRQ + 16)
1798 .is_err()
1799 {
1800 info!("Failed to initialize PMU");
1801 }
1802
1803 let vgic_state = vgic_snapshot
1804 .to_state()
1805 .map_err(DeviceManagerError::RestoreGetState)?;
1806 let saved_vcpu_states = self.cpu_manager.lock().unwrap().get_saved_states();
1807 interrupt_controller
1808 .lock()
1809 .unwrap()
1810 .restore_vgic(vgic_state, &saved_vcpu_states)
1811 .unwrap();
1812 }
1813
1814 self.device_tree
1815 .lock()
1816 .unwrap()
1817 .insert(id.clone(), device_node!(id, interrupt_controller));
1818
1819 Ok(interrupt_controller)
1820 }
1821
1822 #[cfg(target_arch = "aarch64")]
1823 pub fn get_interrupt_controller(&self) -> Option<&Arc<Mutex<gic::Gic>>> {

Callers 1

Calls 10

newFunction · 0.85
snapshot_from_idFunction · 0.85
state_from_idFunction · 0.85
to_stateMethod · 0.80
get_saved_statesMethod · 0.80
restore_vgicMethod · 0.80
cloneMethod · 0.45
init_pmuMethod · 0.45
insertMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected