PCI: hv: Fix interrupt mapping for multi-MSI
authorJeffrey Hugo <quic_jhugo@quicinc.com>
Wed, 11 May 2022 15:23:19 +0000 (09:23 -0600)
committerWei Liu <wei.liu@kernel.org>
Wed, 11 May 2022 17:51:02 +0000 (17:51 +0000)
commita2bad844a67b1c7740bda63e87453baf63c3a7f7
treec9e7f2de5f20aa27238d60c7829f06f40384e28b
parentb4b77778ecc5bfbd4e77de1b2fd5c1dd3c655f1f
PCI: hv: Fix interrupt mapping for multi-MSI

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@microsoft.com>
Signed-off-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
Reviewed-by: Dexuan Cui <decui@microsoft.com>
Tested-by: Michael Kelley <mikelley@microsoft.com>
Link: https://lore.kernel.org/r/1652282599-21643-1-git-send-email-quic_jhugo@quicinc.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
drivers/pci/controller/pci-hyperv.c