diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/iommu/irq_remapping.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c index 339260c98cf9..158091b345cb 100644 --- a/drivers/iommu/irq_remapping.c +++ b/drivers/iommu/irq_remapping.c | |||
| @@ -150,6 +150,7 @@ static void __init irq_remapping_modify_x86_ops(void) | |||
| 150 | x86_io_apic_ops.setup_entry = setup_ioapic_remapped_entry; | 150 | x86_io_apic_ops.setup_entry = setup_ioapic_remapped_entry; |
| 151 | x86_msi.setup_msi_irqs = irq_remapping_setup_msi_irqs; | 151 | x86_msi.setup_msi_irqs = irq_remapping_setup_msi_irqs; |
| 152 | x86_msi.setup_hpet_msi = setup_hpet_msi_remapped; | 152 | x86_msi.setup_hpet_msi = setup_hpet_msi_remapped; |
| 153 | x86_msi.compose_msi_msg = compose_remapped_msi_msg; | ||
| 153 | } | 154 | } |
| 154 | 155 | ||
| 155 | static __init int setup_nointremap(char *str) | 156 | static __init int setup_nointremap(char *str) |
| @@ -295,10 +296,12 @@ void compose_remapped_msi_msg(struct pci_dev *pdev, | |||
| 295 | unsigned int irq, unsigned int dest, | 296 | unsigned int irq, unsigned int dest, |
| 296 | struct msi_msg *msg, u8 hpet_id) | 297 | struct msi_msg *msg, u8 hpet_id) |
| 297 | { | 298 | { |
| 298 | if (!remap_ops || !remap_ops->compose_msi_msg) | 299 | struct irq_cfg *cfg = irq_get_chip_data(irq); |
| 299 | return; | ||
| 300 | 300 | ||
| 301 | remap_ops->compose_msi_msg(pdev, irq, dest, msg, hpet_id); | 301 | if (!irq_remapped(cfg)) |
| 302 | native_compose_msi_msg(pdev, irq, dest, msg, hpet_id); | ||
| 303 | else if (remap_ops && remap_ops->compose_msi_msg) | ||
| 304 | remap_ops->compose_msi_msg(pdev, irq, dest, msg, hpet_id); | ||
| 302 | } | 305 | } |
| 303 | 306 | ||
| 304 | static int msi_alloc_remapped_irq(struct pci_dev *pdev, int irq, int nvec) | 307 | static int msi_alloc_remapped_irq(struct pci_dev *pdev, int irq, int nvec) |
