diff options
Diffstat (limited to 'arch/powerpc/kernel/irq.c')
-rw-r--r-- | arch/powerpc/kernel/irq.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 5e37bf14ef2d..67b21a008f6e 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
@@ -64,8 +64,9 @@ | |||
64 | #include <asm/ptrace.h> | 64 | #include <asm/ptrace.h> |
65 | #include <asm/machdep.h> | 65 | #include <asm/machdep.h> |
66 | #include <asm/udbg.h> | 66 | #include <asm/udbg.h> |
67 | #ifdef CONFIG_PPC_ISERIES | 67 | #ifdef CONFIG_PPC64 |
68 | #include <asm/paca.h> | 68 | #include <asm/paca.h> |
69 | #include <asm/firmware.h> | ||
69 | #endif | 70 | #endif |
70 | 71 | ||
71 | int __irq_offset_value; | 72 | int __irq_offset_value; |
@@ -95,6 +96,27 @@ extern atomic_t ipi_sent; | |||
95 | EXPORT_SYMBOL(irq_desc); | 96 | EXPORT_SYMBOL(irq_desc); |
96 | 97 | ||
97 | int distribute_irqs = 1; | 98 | int distribute_irqs = 1; |
99 | |||
100 | void local_irq_restore(unsigned long en) | ||
101 | { | ||
102 | get_paca()->soft_enabled = en; | ||
103 | if (!en) | ||
104 | return; | ||
105 | |||
106 | if (firmware_has_feature(FW_FEATURE_ISERIES)) { | ||
107 | if (get_paca()->lppaca_ptr->int_dword.any_int) | ||
108 | iseries_handle_interrupts(); | ||
109 | return; | ||
110 | } | ||
111 | |||
112 | if (get_paca()->hard_enabled) | ||
113 | return; | ||
114 | /* need to hard-enable interrupts here */ | ||
115 | get_paca()->hard_enabled = en; | ||
116 | if ((int)mfspr(SPRN_DEC) < 0) | ||
117 | mtspr(SPRN_DEC, 1); | ||
118 | hard_irq_enable(); | ||
119 | } | ||
98 | #endif /* CONFIG_PPC64 */ | 120 | #endif /* CONFIG_PPC64 */ |
99 | 121 | ||
100 | int show_interrupts(struct seq_file *p, void *v) | 122 | int show_interrupts(struct seq_file *p, void *v) |