diff options
Diffstat (limited to 'arch/powerpc/kernel/machine_kexec.c')
-rw-r--r-- | arch/powerpc/kernel/machine_kexec.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c index a5f8672eeff..bd1e1ff17b2 100644 --- a/arch/powerpc/kernel/machine_kexec.c +++ b/arch/powerpc/kernel/machine_kexec.c | |||
@@ -26,20 +26,23 @@ void machine_kexec_mask_interrupts(void) { | |||
26 | 26 | ||
27 | for_each_irq(i) { | 27 | for_each_irq(i) { |
28 | struct irq_desc *desc = irq_to_desc(i); | 28 | struct irq_desc *desc = irq_to_desc(i); |
29 | struct irq_chip *chip; | ||
29 | 30 | ||
30 | if (!desc || !desc->chip) | 31 | if (!desc) |
31 | continue; | 32 | continue; |
32 | 33 | ||
33 | if (desc->chip->eoi && | 34 | chip = get_irq_desc_chip(desc); |
34 | desc->status & IRQ_INPROGRESS) | 35 | if (!chip) |
35 | desc->chip->eoi(i); | 36 | continue; |
37 | |||
38 | if (chip->irq_eoi && desc->status & IRQ_INPROGRESS) | ||
39 | chip->irq_eoi(&desc->irq_data); | ||
36 | 40 | ||
37 | if (desc->chip->mask) | 41 | if (chip->irq_mask) |
38 | desc->chip->mask(i); | 42 | chip->irq_mask(&desc->irq_data); |
39 | 43 | ||
40 | if (desc->chip->disable && | 44 | if (chip->irq_disable && !(desc->status & IRQ_DISABLED)) |
41 | !(desc->status & IRQ_DISABLED)) | 45 | chip->irq_disable(&desc->irq_data); |
42 | desc->chip->disable(i); | ||
43 | } | 46 | } |
44 | } | 47 | } |
45 | 48 | ||