(&mut self)
| 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 | } |
no test coverage detected