diff options
Diffstat (limited to 'arch/ia64/kernel/msi_ia64.c')
-rw-r--r-- | arch/ia64/kernel/msi_ia64.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/arch/ia64/kernel/msi_ia64.c b/arch/ia64/kernel/msi_ia64.c index 822e59a1b822..0d05450c91c4 100644 --- a/arch/ia64/kernel/msi_ia64.c +++ b/arch/ia64/kernel/msi_ia64.c | |||
@@ -64,12 +64,17 @@ static void ia64_set_msi_irq_affinity(unsigned int irq, cpumask_t cpu_mask) | |||
64 | } | 64 | } |
65 | #endif /* CONFIG_SMP */ | 65 | #endif /* CONFIG_SMP */ |
66 | 66 | ||
67 | int ia64_setup_msi_irq(unsigned int irq, struct pci_dev *pdev) | 67 | int ia64_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc) |
68 | { | 68 | { |
69 | struct msi_msg msg; | 69 | struct msi_msg msg; |
70 | unsigned long dest_phys_id; | 70 | unsigned long dest_phys_id; |
71 | unsigned int vector; | 71 | unsigned int irq, vector; |
72 | 72 | ||
73 | irq = create_irq(); | ||
74 | if (irq < 0) | ||
75 | return irq; | ||
76 | |||
77 | set_irq_msi(irq, desc); | ||
73 | dest_phys_id = cpu_physical_id(first_cpu(cpu_online_map)); | 78 | dest_phys_id = cpu_physical_id(first_cpu(cpu_online_map)); |
74 | vector = irq; | 79 | vector = irq; |
75 | 80 | ||
@@ -89,12 +94,12 @@ int ia64_setup_msi_irq(unsigned int irq, struct pci_dev *pdev) | |||
89 | write_msi_msg(irq, &msg); | 94 | write_msi_msg(irq, &msg); |
90 | set_irq_chip_and_handler(irq, &ia64_msi_chip, handle_edge_irq); | 95 | set_irq_chip_and_handler(irq, &ia64_msi_chip, handle_edge_irq); |
91 | 96 | ||
92 | return 0; | 97 | return irq; |
93 | } | 98 | } |
94 | 99 | ||
95 | void ia64_teardown_msi_irq(unsigned int irq) | 100 | void ia64_teardown_msi_irq(unsigned int irq) |
96 | { | 101 | { |
97 | return; /* no-op */ | 102 | destroy_irq(irq); |
98 | } | 103 | } |
99 | 104 | ||
100 | static void ia64_ack_msi_irq(unsigned int irq) | 105 | static void ia64_ack_msi_irq(unsigned int irq) |
@@ -126,12 +131,12 @@ static struct irq_chip ia64_msi_chip = { | |||
126 | }; | 131 | }; |
127 | 132 | ||
128 | 133 | ||
129 | int arch_setup_msi_irq(unsigned int irq, struct pci_dev *pdev) | 134 | int arch_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc) |
130 | { | 135 | { |
131 | if (platform_setup_msi_irq) | 136 | if (platform_setup_msi_irq) |
132 | return platform_setup_msi_irq(irq, pdev); | 137 | return platform_setup_msi_irq(pdev, desc); |
133 | 138 | ||
134 | return ia64_setup_msi_irq(irq, pdev); | 139 | return ia64_setup_msi_irq(pdev, desc); |
135 | } | 140 | } |
136 | 141 | ||
137 | void arch_teardown_msi_irq(unsigned int irq) | 142 | void arch_teardown_msi_irq(unsigned int irq) |