mirror of
https://github.com/torvalds/linux
synced 2024-09-27 23:10:58 +00:00
[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>
This commit is contained in:
parent
32163f4b2c
commit
5d4bff94f9
|
@ -683,8 +683,10 @@ source "lib/Kconfig"
|
||||||
# Use the generic interrupt handling code in kernel/irq/:
|
# Use the generic interrupt handling code in kernel/irq/:
|
||||||
#
|
#
|
||||||
config GENERIC_HARDIRQS
|
config GENERIC_HARDIRQS
|
||||||
bool
|
def_bool y
|
||||||
default y
|
|
||||||
|
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||||
|
def_bool y
|
||||||
|
|
||||||
config GENERIC_IRQ_PROBE
|
config GENERIC_IRQ_PROBE
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -394,7 +394,7 @@ iosapic_startup_level_irq (unsigned int irq)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
iosapic_end_level_irq (unsigned int irq)
|
iosapic_unmask_level_irq (unsigned int irq)
|
||||||
{
|
{
|
||||||
ia64_vector vec = irq_to_vector(irq);
|
ia64_vector vec = irq_to_vector(irq);
|
||||||
struct iosapic_rte_info *rte;
|
struct iosapic_rte_info *rte;
|
||||||
|
@ -404,7 +404,8 @@ iosapic_end_level_irq (unsigned int irq)
|
||||||
if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) {
|
if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) {
|
||||||
do_unmask_irq = 1;
|
do_unmask_irq = 1;
|
||||||
mask_irq(irq);
|
mask_irq(irq);
|
||||||
}
|
} else
|
||||||
|
unmask_irq(irq);
|
||||||
|
|
||||||
list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list)
|
list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list)
|
||||||
iosapic_eoi(rte->iosapic->addr, vec);
|
iosapic_eoi(rte->iosapic->addr, vec);
|
||||||
|
@ -427,9 +428,8 @@ static struct irq_chip irq_type_iosapic_level = {
|
||||||
.enable = iosapic_enable_level_irq,
|
.enable = iosapic_enable_level_irq,
|
||||||
.disable = iosapic_disable_level_irq,
|
.disable = iosapic_disable_level_irq,
|
||||||
.ack = iosapic_ack_level_irq,
|
.ack = iosapic_ack_level_irq,
|
||||||
.end = iosapic_end_level_irq,
|
|
||||||
.mask = mask_irq,
|
.mask = mask_irq,
|
||||||
.unmask = unmask_irq,
|
.unmask = iosapic_unmask_level_irq,
|
||||||
.set_affinity = iosapic_set_affinity
|
.set_affinity = iosapic_set_affinity
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -658,6 +658,10 @@ register_intr (unsigned int gsi, int irq, unsigned char delivery,
|
||||||
idesc->chip->name, irq_type->name);
|
idesc->chip->name, irq_type->name);
|
||||||
idesc->chip = irq_type;
|
idesc->chip = irq_type;
|
||||||
}
|
}
|
||||||
|
if (trigger == IOSAPIC_EDGE)
|
||||||
|
__set_irq_handler_unlocked(irq, handle_edge_irq);
|
||||||
|
else
|
||||||
|
__set_irq_handler_unlocked(irq, handle_level_irq);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -635,6 +635,7 @@ ia64_native_register_percpu_irq (ia64_vector vec, struct irqaction *action)
|
||||||
desc->chip = &irq_type_ia64_lsapic;
|
desc->chip = &irq_type_ia64_lsapic;
|
||||||
if (action)
|
if (action)
|
||||||
setup_irq(irq, action);
|
setup_irq(irq, action);
|
||||||
|
set_irq_handler(irq, handle_percpu_irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init
|
void __init
|
||||||
|
|
Loading…
Reference in a new issue