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

Method vm_boot

vmm/src/lib.rs:1819–1890  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

1817 }
1818
1819 fn vm_boot(&mut self) -> result::Result<(), VmError> {
1820 tracer::start();
1821 info!("Booting VM");
1822 event!("vm", "booting");
1823 let r = {
1824 trace_scoped!("vm_boot");
1825 // If we don't have a config, we cannot boot a VM.
1826 if self.vm_config.is_none() {
1827 return Err(VmError::VmMissingConfig);
1828 }
1829
1830 // console_info is set to None in vm_shutdown. re-populate here if empty
1831 if self.console_info.is_none() {
1832 self.console_info =
1833 Some(pre_create_console_devices(self).map_err(VmError::CreateConsoleDevices)?);
1834 }
1835
1836 // Create a new VM if we don't have one yet.
1837 if self.vm.is_none() {
1838 let exit_evt = self.exit_evt.try_clone().map_err(VmError::EventFdClone)?;
1839 let reset_evt = self.reset_evt.try_clone().map_err(VmError::EventFdClone)?;
1840 let guest_exit_evt = self
1841 .guest_exit_evt
1842 .try_clone()
1843 .map_err(VmError::EventFdClone)?;
1844 #[cfg(feature = "guest_debug")]
1845 let vm_debug_evt = self
1846 .vm_debug_evt
1847 .try_clone()
1848 .map_err(VmError::EventFdClone)?;
1849 let activate_evt = self
1850 .activate_evt
1851 .try_clone()
1852 .map_err(VmError::EventFdClone)?;
1853
1854 if let Some(ref vm_config) = self.vm_config {
1855 let vm = Vm::new(
1856 Arc::clone(vm_config),
1857 exit_evt,
1858 reset_evt,
1859 guest_exit_evt,
1860 #[cfg(feature = "guest_debug")]
1861 vm_debug_evt,
1862 &self.seccomp_action,
1863 self.hypervisor.clone(),
1864 activate_evt,
1865 self.console_info.clone(),
1866 self.console_resize_pipe.clone(),
1867 Arc::clone(&self.original_termios_opt),
1868 None,
1869 None,
1870 None,
1871 None,
1872 )?;
1873
1874 self.vm = Some(vm);
1875 }
1876 }

Callers 1

api_vm_bootMethod · 0.45

Calls 7

newFunction · 0.85
bootMethod · 0.80
startFunction · 0.50
endFunction · 0.50
try_cloneMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected