virtio-devices: Calculate number of msix interrupts in VirtioPciDevice

Rather than calculate in the DeviceManager and pass it through do it in
the device where it already has all the required information.

Signed-off-by: Rob Bradford <rbradford@meta.com>
This commit is contained in:
Rob Bradford
2026-04-26 11:39:06 +01:00
parent e11ff541da
commit 85012fbe5c
2 changed files with 5 additions and 7 deletions

View File

@@ -403,7 +403,6 @@ impl VirtioPciDevice {
id: String,
memory: GuestMemoryAtomic<GuestMemoryMmap>,
device: Arc<Mutex<dyn VirtioDevice>>,
msix_num: u16,
access_platform: Option<&Arc<dyn AccessPlatform>>,
interrupt_manager: &dyn InterruptManager<GroupConfig = MsiIrqGroupConfig>,
pci_device_bdf: u32,
@@ -434,6 +433,11 @@ impl VirtioPciDevice {
let pci_device_id = VIRTIO_PCI_DEVICE_ID_BASE + locked_device.device_type() as u16;
// Allows support for one MSI-X vector per interrupt needed by the device.
// It also adds 1 as we need to take into account the dedicated vector to notify
// about a virtio config change.
let msix_num = (locked_device.queue_max_sizes().len() + 1) as u16;
let interrupt_source_group: MaybeMutInterruptSourceGroup = {
let config = MsiIrqGroupConfig {
base: 0,

View File

@@ -4172,11 +4172,6 @@ impl DeviceManager {
return Err(DeviceManagerError::MissingNode);
}
// Allows support for one MSI-X vector per interrupt needed by the device.
// It also adds 1 as we need to take into account the dedicated vector to notify
// about a virtio config change.
let msix_num = (virtio_device.lock().unwrap().queue_max_sizes().len() + 1) as u16;
// Create the AccessPlatform trait from the implementation IommuMapping.
// This will provide address translation for any virtio device sitting
// behind a vIOMMU.
@@ -4245,7 +4240,6 @@ impl DeviceManager {
id.clone(),
memory,
virtio_device,
msix_num,
access_platform.as_ref(),
self.msi_interrupt_manager.as_ref(),
pci_device_bdf.into(),