[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>

Tony Luck 5d4bff94 32163f4b

+13 -6
+4 -2
arch/ia64/Kconfig
··· 683 # Use the generic interrupt handling code in kernel/irq/: 684 # 685 config GENERIC_HARDIRQS 686 - bool 687 - default y 688 689 config GENERIC_IRQ_PROBE 690 bool
··· 683 # Use the generic interrupt handling code in kernel/irq/: 684 # 685 config GENERIC_HARDIRQS 686 + def_bool y 687 + 688 + config GENERIC_HARDIRQS_NO__DO_IRQ 689 + def_bool y 690 691 config GENERIC_IRQ_PROBE 692 bool
+8 -4
arch/ia64/kernel/iosapic.c
··· 394 } 395 396 static void 397 - iosapic_end_level_irq (unsigned int irq) 398 { 399 ia64_vector vec = irq_to_vector(irq); 400 struct iosapic_rte_info *rte; ··· 404 if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) { 405 do_unmask_irq = 1; 406 mask_irq(irq); 407 - } 408 409 list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) 410 iosapic_eoi(rte->iosapic->addr, vec); ··· 428 .enable = iosapic_enable_level_irq, 429 .disable = iosapic_disable_level_irq, 430 .ack = iosapic_ack_level_irq, 431 - .end = iosapic_end_level_irq, 432 .mask = mask_irq, 433 - .unmask = unmask_irq, 434 .set_affinity = iosapic_set_affinity 435 }; 436 ··· 658 idesc->chip->name, irq_type->name); 659 idesc->chip = irq_type; 660 } 661 return 0; 662 } 663
··· 394 } 395 396 static void 397 + iosapic_unmask_level_irq (unsigned int irq) 398 { 399 ia64_vector vec = irq_to_vector(irq); 400 struct iosapic_rte_info *rte; ··· 404 if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) { 405 do_unmask_irq = 1; 406 mask_irq(irq); 407 + } else 408 + unmask_irq(irq); 409 410 list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) 411 iosapic_eoi(rte->iosapic->addr, vec); ··· 427 .enable = iosapic_enable_level_irq, 428 .disable = iosapic_disable_level_irq, 429 .ack = iosapic_ack_level_irq, 430 .mask = mask_irq, 431 + .unmask = iosapic_unmask_level_irq, 432 .set_affinity = iosapic_set_affinity 433 }; 434 ··· 658 idesc->chip->name, irq_type->name); 659 idesc->chip = irq_type; 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); 665 return 0; 666 } 667
+1
arch/ia64/kernel/irq_ia64.c
··· 635 desc->chip = &irq_type_ia64_lsapic; 636 if (action) 637 setup_irq(irq, action); 638 } 639 640 void __init
··· 635 desc->chip = &irq_type_ia64_lsapic; 636 if (action) 637 setup_irq(irq, action); 638 + set_irq_handler(irq, handle_percpu_irq); 639 } 640 641 void __init