PCI: hv: Use effective affinity mask
authorDexuan Cui <decui@microsoft.com>
Wed, 1 Nov 2017 20:30:53 +0000 (20:30 +0000)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 8 Nov 2017 00:06:39 +0000 (18:06 -0600)
commit79aa801e899417a56863d6713f76c4e108856000
tree81d0d0c303ed08d1c7976e943e94f3de55c35824
parent9e66317d3c92ddaab330c125dfe9d06eee268aff
PCI: hv: Use effective affinity mask

The effective_affinity_mask is always set when an interrupt is assigned in
__assign_irq_vector() -> apic->cpu_mask_to_apicid(), e.g. for struct apic
apic_physflat: -> default_cpu_mask_to_apicid() ->
irq_data_update_effective_affinity(), but it looks d->common->affinity
remains all-1's before the user space or the kernel changes it later.

In the early allocation/initialization phase of an IRQ, we should use the
effective_affinity_mask, otherwise Hyper-V may not deliver the interrupt to
the expected CPU.  Without the patch, if we assign 7 Mellanox ConnectX-3
VFs to a 32-vCPU VM, one of the VFs may fail to receive interrupts.

Tested-by: Adrian Suhov <v-adsuho@microsoft.com>
Signed-off-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Jake Oshins <jakeo@microsoft.com>
Cc: stable@vger.kernel.org
Cc: Jork Loeser <jloeser@microsoft.com>
Cc: Stephen Hemminger <sthemmin@microsoft.com>
Cc: K. Y. Srinivasan <kys@microsoft.com>
drivers/pci/host/pci-hyperv.c