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/kernel/iosapic.c | |
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/kernel/iosapic.c')
-rw-r--r-- | arch/ia64/kernel/iosapic.c | 12 |
1 files changed, 8 insertions, 4 deletions
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 | ||