diff options
Diffstat (limited to 'drivers/pci/intr_remapping.c')
-rw-r--r-- | drivers/pci/intr_remapping.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c index 5a57753ea9fc..8e44db040db7 100644 --- a/drivers/pci/intr_remapping.c +++ b/drivers/pci/intr_remapping.c | |||
@@ -208,7 +208,7 @@ int alloc_irte(struct intel_iommu *iommu, int irq, u16 count) | |||
208 | return index; | 208 | return index; |
209 | } | 209 | } |
210 | 210 | ||
211 | static void qi_flush_iec(struct intel_iommu *iommu, int index, int mask) | 211 | static int qi_flush_iec(struct intel_iommu *iommu, int index, int mask) |
212 | { | 212 | { |
213 | struct qi_desc desc; | 213 | struct qi_desc desc; |
214 | 214 | ||
@@ -216,7 +216,7 @@ static void qi_flush_iec(struct intel_iommu *iommu, int index, int mask) | |||
216 | | QI_IEC_SELECTIVE; | 216 | | QI_IEC_SELECTIVE; |
217 | desc.high = 0; | 217 | desc.high = 0; |
218 | 218 | ||
219 | qi_submit_sync(&desc, iommu); | 219 | return qi_submit_sync(&desc, iommu); |
220 | } | 220 | } |
221 | 221 | ||
222 | int map_irq_to_irte_handle(int irq, u16 *sub_handle) | 222 | int map_irq_to_irte_handle(int irq, u16 *sub_handle) |
@@ -284,6 +284,7 @@ int clear_irte_irq(int irq, struct intel_iommu *iommu, u16 index) | |||
284 | 284 | ||
285 | int modify_irte(int irq, struct irte *irte_modified) | 285 | int modify_irte(int irq, struct irte *irte_modified) |
286 | { | 286 | { |
287 | int rc; | ||
287 | int index; | 288 | int index; |
288 | struct irte *irte; | 289 | struct irte *irte; |
289 | struct intel_iommu *iommu; | 290 | struct intel_iommu *iommu; |
@@ -304,14 +305,15 @@ int modify_irte(int irq, struct irte *irte_modified) | |||
304 | set_64bit((unsigned long *)irte, irte_modified->low | (1 << 1)); | 305 | set_64bit((unsigned long *)irte, irte_modified->low | (1 << 1)); |
305 | __iommu_flush_cache(iommu, irte, sizeof(*irte)); | 306 | __iommu_flush_cache(iommu, irte, sizeof(*irte)); |
306 | 307 | ||
307 | qi_flush_iec(iommu, index, 0); | 308 | rc = qi_flush_iec(iommu, index, 0); |
308 | |||
309 | spin_unlock(&irq_2_ir_lock); | 309 | spin_unlock(&irq_2_ir_lock); |
310 | return 0; | 310 | |
311 | return rc; | ||
311 | } | 312 | } |
312 | 313 | ||
313 | int flush_irte(int irq) | 314 | int flush_irte(int irq) |
314 | { | 315 | { |
316 | int rc; | ||
315 | int index; | 317 | int index; |
316 | struct intel_iommu *iommu; | 318 | struct intel_iommu *iommu; |
317 | struct irq_2_iommu *irq_iommu; | 319 | struct irq_2_iommu *irq_iommu; |
@@ -327,10 +329,10 @@ int flush_irte(int irq) | |||
327 | 329 | ||
328 | index = irq_iommu->irte_index + irq_iommu->sub_handle; | 330 | index = irq_iommu->irte_index + irq_iommu->sub_handle; |
329 | 331 | ||
330 | qi_flush_iec(iommu, index, irq_iommu->irte_mask); | 332 | rc = qi_flush_iec(iommu, index, irq_iommu->irte_mask); |
331 | spin_unlock(&irq_2_ir_lock); | 333 | spin_unlock(&irq_2_ir_lock); |
332 | 334 | ||
333 | return 0; | 335 | return rc; |
334 | } | 336 | } |
335 | 337 | ||
336 | struct intel_iommu *map_ioapic_to_ir(int apic) | 338 | struct intel_iommu *map_ioapic_to_ir(int apic) |
@@ -356,6 +358,7 @@ struct intel_iommu *map_dev_to_ir(struct pci_dev *dev) | |||
356 | 358 | ||
357 | int free_irte(int irq) | 359 | int free_irte(int irq) |
358 | { | 360 | { |
361 | int rc = 0; | ||
359 | int index, i; | 362 | int index, i; |
360 | struct irte *irte; | 363 | struct irte *irte; |
361 | struct intel_iommu *iommu; | 364 | struct intel_iommu *iommu; |
@@ -376,7 +379,7 @@ int free_irte(int irq) | |||
376 | if (!irq_iommu->sub_handle) { | 379 | if (!irq_iommu->sub_handle) { |
377 | for (i = 0; i < (1 << irq_iommu->irte_mask); i++) | 380 | for (i = 0; i < (1 << irq_iommu->irte_mask); i++) |
378 | set_64bit((unsigned long *)irte, 0); | 381 | set_64bit((unsigned long *)irte, 0); |
379 | qi_flush_iec(iommu, index, irq_iommu->irte_mask); | 382 | rc = qi_flush_iec(iommu, index, irq_iommu->irte_mask); |
380 | } | 383 | } |
381 | 384 | ||
382 | irq_iommu->iommu = NULL; | 385 | irq_iommu->iommu = NULL; |
@@ -386,7 +389,7 @@ int free_irte(int irq) | |||
386 | 389 | ||
387 | spin_unlock(&irq_2_ir_lock); | 390 | spin_unlock(&irq_2_ir_lock); |
388 | 391 | ||
389 | return 0; | 392 | return rc; |
390 | } | 393 | } |
391 | 394 | ||
392 | static void iommu_set_intr_remapping(struct intel_iommu *iommu, int mode) | 395 | static void iommu_set_intr_remapping(struct intel_iommu *iommu, int mode) |