> From: Jeffrey Hugo <quic_jhugo@xxxxxxxxxxx> > Sent: Monday, May 9, 2022 2:48 PM > ... > According to Dexuan, the hypervisor folks beleive that multi-msi > allocations are not correct. compose_msi_msg() will allocate multi-msi > one by one. However, multi-msi is a block of related MSIs, with alignment > requirements. In order for the hypervisor to allocate properly aligned > and consecutive entries in the IOMMU Interrupt Remapping Table, there > should be a single mapping request that requests all of the multi-msi > vectors in one shot. > > Dexuan suggests detecting the multi-msi case and composing a single > request related to the first MSI. Then for the other MSIs in the same > block, use the cached information. This appears to be viable, so do it. > > Suggested-by: Dexuan Cui <decui@xxxxxxxxxxxxx> > Signed-off-by: Jeffrey Hugo <quic_jhugo@xxxxxxxxxxx> Reviewed-by: Dexuan Cui <decui@xxxxxxxxxxxxx> > + if (!msi_desc->pci.msi_attrib.is_msix && msi_desc->nvec_used > 1) { > + /* > + * if this is not the first MSI of Multi MSI, we already have s/if/If