• Konrad Rzeszutek Wilk's avatar
    PCI: Add x86_msi.msi_mask_irq() and msix_mask_irq() · 0e4ccb15
    Konrad Rzeszutek Wilk authored
    Certain platforms do not allow writes in the MSI-X BARs to setup or tear
    down vector values.  To combat against the generic code trying to write to
    that and either silently being ignored or crashing due to the pagetables
    being marked R/O this patch introduces a platform override.
    
    Note that we keep two separate, non-weak, functions default_mask_msi_irqs()
    and default_mask_msix_irqs() for the behavior of the arch_mask_msi_irqs()
    and arch_mask_msix_irqs(), as the default behavior is needed by x86 PCI
    code.
    
    For Xen, which does not allow the guest to write to MSI-X tables - as the
    hypervisor is solely responsible for setting the vector values - we
    implement two nops.
    
    This fixes a Xen guest crash when passing a PCI device with MSI-X to the
    guest.  See the bugzilla for more details.
    
    [bhelgaas: add bugzilla info]
    Reference: https://bugzilla.kernel.org/show_bug.cgi?id=64581Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    CC: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
    CC: Zhenzhong Duan <zhenzhong.duan@oracle.com>
    0e4ccb15
msi.c 26.8 KB