This patchset removes a duplicate definition of VP set (hv_vp_set) and uses the common definition (hv_vpset) that is used in other places. It changes the order of the members in struct hv_pcibus_device due to flexible array in hv_vpset. It also removes the duplicate implementation of cpumask_to_vpset(), uses the shared implementation, and exports hv_max_vp_index, which is required by cpumask_to_vpset(). Based on Vitaly's findings, two changes were applied: replace GFP_KERNEL with GFP_ATOMIC for alloc_cpumask_var() because hv_irq_unmask() runs while a spinlock is held, and add __aligned(8) to struct retarget_msi_interrupt because Hyper-V requires that hypercall arguments be aligned on an 8 byte boundary. Vitaly, thank you for finding the issues, and Lorenzo and Michael, thank you for your guidance and support! Maya Nakamura (2): PCI: hv: Replace hv_vp_set with hv_vpset PCI: hv: Refactor hv_irq_unmask() to use cpumask_to_vpset() arch/x86/hyperv/hv_init.c | 1 + drivers/pci/controller/pci-hyperv.c | 61 +++++++++++++---------------- 2 files changed, 29 insertions(+), 33 deletions(-) -- 2.17.1