diff options
Diffstat (limited to 'arch/ia64/kernel/iosapic.c')
-rw-r--r-- | arch/ia64/kernel/iosapic.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index 60d64950e3c2..0fc5fb7865cf 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
@@ -288,6 +288,27 @@ nop (unsigned int irq) | |||
288 | /* do nothing... */ | 288 | /* do nothing... */ |
289 | } | 289 | } |
290 | 290 | ||
291 | |||
292 | #ifdef CONFIG_KEXEC | ||
293 | void | ||
294 | kexec_disable_iosapic(void) | ||
295 | { | ||
296 | struct iosapic_intr_info *info; | ||
297 | struct iosapic_rte_info *rte; | ||
298 | u8 vec = 0; | ||
299 | for (info = iosapic_intr_info; info < | ||
300 | iosapic_intr_info + IA64_NUM_VECTORS; ++info, ++vec) { | ||
301 | list_for_each_entry(rte, &info->rtes, | ||
302 | rte_list) { | ||
303 | iosapic_write(rte->addr, | ||
304 | IOSAPIC_RTE_LOW(rte->rte_index), | ||
305 | IOSAPIC_MASK|vec); | ||
306 | iosapic_eoi(rte->addr, vec); | ||
307 | } | ||
308 | } | ||
309 | } | ||
310 | #endif | ||
311 | |||
291 | static void | 312 | static void |
292 | mask_irq (unsigned int irq) | 313 | mask_irq (unsigned int irq) |
293 | { | 314 | { |