diff options
author | Tony Luck <tony.luck@intel.com> | 2010-09-27 16:58:14 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2010-09-27 16:58:14 -0400 |
commit | 5d4bff94f9e0877a85b4dc573eb7a3f1d97c13ae (patch) | |
tree | 195ed252ba4da43791a637437efd0258b1e5cfc0 /arch/ia64 | |
parent | 32163f4b2cef28a5aab8b226ffecfc6379a53786 (diff) |
[IA64] Stop using the deprecated __do_IRQ() code path
Thomas Gleixner <tglx@linutronix.de> wrote:
>__do_IRQ() has been deprecated after a two years migration phase in
>commit 0e57aa1. Since then another 18 months have gone by ...
Mostly trivial stuff for this. The only tricky part was realizing
that the new handler_*_irq() paths do not use desc->chip->end(irq).
Not a problem for the edge case as the ia64 iosapic routine for
that was nop(). But the "level" case handled interrupt migration
there. Just use a slightly modified version of the "end" routine
as "unmask" for the level triggered case.
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/Kconfig | 6 | ||||
-rw-r--r-- | arch/ia64/kernel/iosapic.c | 12 | ||||
-rw-r--r-- | arch/ia64/kernel/irq_ia64.c | 1 |
3 files changed, 13 insertions, 6 deletions
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index ba22849ee3ec..b0f4ae9b7c84 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -683,8 +683,10 @@ source "lib/Kconfig" | |||
683 | # Use the generic interrupt handling code in kernel/irq/: | 683 | # Use the generic interrupt handling code in kernel/irq/: |
684 | # | 684 | # |
685 | config GENERIC_HARDIRQS | 685 | config GENERIC_HARDIRQS |
686 | bool | 686 | def_bool y |
687 | default y | 687 | |
688 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
689 | def_bool y | ||
688 | 690 | ||
689 | config GENERIC_IRQ_PROBE | 691 | config GENERIC_IRQ_PROBE |
690 | bool | 692 | bool |
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index 7ded76658d2d..dc6913dce3ff 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
@@ -394,7 +394,7 @@ iosapic_startup_level_irq (unsigned int irq) | |||
394 | } | 394 | } |
395 | 395 | ||
396 | static void | 396 | static void |
397 | iosapic_end_level_irq (unsigned int irq) | 397 | iosapic_unmask_level_irq (unsigned int irq) |
398 | { | 398 | { |
399 | ia64_vector vec = irq_to_vector(irq); | 399 | ia64_vector vec = irq_to_vector(irq); |
400 | struct iosapic_rte_info *rte; | 400 | struct iosapic_rte_info *rte; |
@@ -404,7 +404,8 @@ iosapic_end_level_irq (unsigned int irq) | |||
404 | if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) { | 404 | if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) { |
405 | do_unmask_irq = 1; | 405 | do_unmask_irq = 1; |
406 | mask_irq(irq); | 406 | mask_irq(irq); |
407 | } | 407 | } else |
408 | unmask_irq(irq); | ||
408 | 409 | ||
409 | list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) | 410 | list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) |
410 | iosapic_eoi(rte->iosapic->addr, vec); | 411 | iosapic_eoi(rte->iosapic->addr, vec); |
@@ -427,9 +428,8 @@ static struct irq_chip irq_type_iosapic_level = { | |||
427 | .enable = iosapic_enable_level_irq, | 428 | .enable = iosapic_enable_level_irq, |
428 | .disable = iosapic_disable_level_irq, | 429 | .disable = iosapic_disable_level_irq, |
429 | .ack = iosapic_ack_level_irq, | 430 | .ack = iosapic_ack_level_irq, |
430 | .end = iosapic_end_level_irq, | ||
431 | .mask = mask_irq, | 431 | .mask = mask_irq, |
432 | .unmask = unmask_irq, | 432 | .unmask = iosapic_unmask_level_irq, |
433 | .set_affinity = iosapic_set_affinity | 433 | .set_affinity = iosapic_set_affinity |
434 | }; | 434 | }; |
435 | 435 | ||
@@ -658,6 +658,10 @@ register_intr (unsigned int gsi, int irq, unsigned char delivery, | |||
658 | idesc->chip->name, irq_type->name); | 658 | idesc->chip->name, irq_type->name); |
659 | idesc->chip = irq_type; | 659 | idesc->chip = irq_type; |
660 | } | 660 | } |
661 | if (trigger == IOSAPIC_EDGE) | ||
662 | __set_irq_handler_unlocked(irq, handle_edge_irq); | ||
663 | else | ||
664 | __set_irq_handler_unlocked(irq, handle_level_irq); | ||
661 | return 0; | 665 | return 0; |
662 | } | 666 | } |
663 | 667 | ||
diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c index f14c35f9b03a..5739786aeee6 100644 --- a/arch/ia64/kernel/irq_ia64.c +++ b/arch/ia64/kernel/irq_ia64.c | |||
@@ -635,6 +635,7 @@ ia64_native_register_percpu_irq (ia64_vector vec, struct irqaction *action) | |||
635 | desc->chip = &irq_type_ia64_lsapic; | 635 | desc->chip = &irq_type_ia64_lsapic; |
636 | if (action) | 636 | if (action) |
637 | setup_irq(irq, action); | 637 | setup_irq(irq, action); |
638 | set_irq_handler(irq, handle_percpu_irq); | ||
638 | } | 639 | } |
639 | 640 | ||
640 | void __init | 641 | void __init |