diff options
Diffstat (limited to 'arch/alpha/kernel/sys_rx164.c')
-rw-r--r-- | arch/alpha/kernel/sys_rx164.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/alpha/kernel/sys_rx164.c b/arch/alpha/kernel/sys_rx164.c index d5299d008..2d5927c84 100644 --- a/arch/alpha/kernel/sys_rx164.c +++ b/arch/alpha/kernel/sys_rx164.c @@ -65,6 +65,13 @@ rx164_startup_irq(unsigned int irq) return 0; } +static void +rx164_end_irq(unsigned int irq) +{ + if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) + rx164_enable_irq(irq); +} + static struct hw_interrupt_type rx164_irq_type = { typename: "RX164", startup: rx164_startup_irq, @@ -72,7 +79,7 @@ static struct hw_interrupt_type rx164_irq_type = { enable: rx164_enable_irq, disable: rx164_disable_irq, ack: rx164_disable_irq, - end: rx164_enable_irq, + end: rx164_end_irq, }; static void @@ -109,12 +116,11 @@ rx164_init_irq(void) rx164_update_irq_hw(0); for (i = 16; i < 40; ++i) { - irq_desc[i].status = IRQ_DISABLED; + irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL; irq_desc[i].handler = &rx164_irq_type; } init_i8259a_irqs(); - init_rtc_irq(); common_init_isa_dma(); setup_irq(16+20, &isa_cascade_irqaction); |