(
&mut self,
console_info: Option<ConsoleInfo>,
console_resize_pipe: Option<Arc<File>>,
original_termios_opt: Arc<Mutex<Option<termios>>>,
interrupt_controller:
| 1469 | |
| 1470 | #[allow(clippy::needless_pass_by_value)] |
| 1471 | pub fn create_devices( |
| 1472 | &mut self, |
| 1473 | console_info: Option<ConsoleInfo>, |
| 1474 | console_resize_pipe: Option<Arc<File>>, |
| 1475 | original_termios_opt: Arc<Mutex<Option<termios>>>, |
| 1476 | interrupt_controller: Arc<Mutex<dyn InterruptController>>, |
| 1477 | ) -> DeviceManagerResult<()> { |
| 1478 | trace_scoped!("create_devices"); |
| 1479 | |
| 1480 | self.cpu_manager |
| 1481 | .lock() |
| 1482 | .unwrap() |
| 1483 | .set_interrupt_controller(interrupt_controller.clone()); |
| 1484 | |
| 1485 | // Now we can create the legacy interrupt manager, which needs the freshly |
| 1486 | // formed IOAPIC device. |
| 1487 | let legacy_interrupt_manager: Arc< |
| 1488 | dyn InterruptManager<GroupConfig = LegacyIrqGroupConfig>, |
| 1489 | > = Arc::new(LegacyUserspaceInterruptManager::new(Arc::clone( |
| 1490 | &interrupt_controller, |
| 1491 | ))); |
| 1492 | |
| 1493 | { |
| 1494 | if let Some(acpi_address) = self.memory_manager.lock().unwrap().acpi_address() { |
| 1495 | self.address_manager |
| 1496 | .mmio_bus |
| 1497 | .insert( |
| 1498 | Arc::clone(&self.memory_manager) as Arc<dyn BusDeviceSync>, |
| 1499 | acpi_address.0, |
| 1500 | MEMORY_MANAGER_ACPI_SIZE as u64, |
| 1501 | ) |
| 1502 | .map_err(DeviceManagerError::BusError)?; |
| 1503 | } |
| 1504 | } |
| 1505 | |
| 1506 | #[cfg(target_arch = "x86_64")] |
| 1507 | self.add_legacy_devices( |
| 1508 | self.reset_evt |
| 1509 | .try_clone() |
| 1510 | .map_err(DeviceManagerError::EventFd)?, |
| 1511 | )?; |
| 1512 | |
| 1513 | #[cfg(target_arch = "aarch64")] |
| 1514 | self.add_legacy_devices(legacy_interrupt_manager.as_ref())?; |
| 1515 | |
| 1516 | { |
| 1517 | self.ged_notification_device = self.add_acpi_devices( |
| 1518 | legacy_interrupt_manager.as_ref(), |
| 1519 | self.reset_evt |
| 1520 | .try_clone() |
| 1521 | .map_err(DeviceManagerError::EventFd)?, |
| 1522 | self.guest_exit_evt |
| 1523 | .try_clone() |
| 1524 | .map_err(DeviceManagerError::EventFd)?, |
| 1525 | )?; |
| 1526 | } |
| 1527 | |
| 1528 | self.original_termios_opt = original_termios_opt; |
no test coverage detected