diff options
Diffstat (limited to 'arch/x86/pci')
-rw-r--r-- | arch/x86/pci/xen.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index 9098d880c476..d22f4b5bbc04 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c | |||
@@ -298,12 +298,16 @@ static int xen_initdom_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) | |||
298 | map_irq.entry_nr = nvec; | 298 | map_irq.entry_nr = nvec; |
299 | } else if (type == PCI_CAP_ID_MSIX) { | 299 | } else if (type == PCI_CAP_ID_MSIX) { |
300 | int pos; | 300 | int pos; |
301 | unsigned long flags; | ||
301 | u32 table_offset, bir; | 302 | u32 table_offset, bir; |
302 | 303 | ||
303 | pos = dev->msix_cap; | 304 | pos = dev->msix_cap; |
304 | pci_read_config_dword(dev, pos + PCI_MSIX_TABLE, | 305 | pci_read_config_dword(dev, pos + PCI_MSIX_TABLE, |
305 | &table_offset); | 306 | &table_offset); |
306 | bir = (u8)(table_offset & PCI_MSIX_TABLE_BIR); | 307 | bir = (u8)(table_offset & PCI_MSIX_TABLE_BIR); |
308 | flags = pci_resource_flags(dev, bir); | ||
309 | if (!flags || (flags & IORESOURCE_UNSET)) | ||
310 | return -EINVAL; | ||
307 | 311 | ||
308 | map_irq.table_base = pci_resource_start(dev, bir); | 312 | map_irq.table_base = pci_resource_start(dev, bir); |
309 | map_irq.entry_nr = msidesc->msi_attrib.entry_nr; | 313 | map_irq.entry_nr = msidesc->msi_attrib.entry_nr; |