diff options
Diffstat (limited to 'arch/alpha/kernel/sys_takara.c')
-rw-r--r-- | arch/alpha/kernel/sys_takara.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/alpha/kernel/sys_takara.c b/arch/alpha/kernel/sys_takara.c index 360f135b6..a0bc57125 100644 --- a/arch/alpha/kernel/sys_takara.c +++ b/arch/alpha/kernel/sys_takara.c @@ -66,6 +66,13 @@ takara_startup_irq(unsigned int irq) return 0; /* never anything pending */ } +static void +takara_end_irq(unsigned int irq) +{ + if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) + takara_enable_irq(irq); +} + static struct hw_interrupt_type takara_irq_type = { typename: "TAKARA", startup: takara_startup_irq, @@ -73,7 +80,7 @@ static struct hw_interrupt_type takara_irq_type = { enable: takara_enable_irq, disable: takara_disable_irq, ack: takara_disable_irq, - end: takara_enable_irq, + end: takara_end_irq, }; static void @@ -126,7 +133,6 @@ takara_init_irq(void) long i; init_i8259a_irqs(); - init_rtc_irq(); if (alpha_using_srm) { alpha_mv.device_interrupt = takara_srm_device_interrupt; @@ -146,7 +152,7 @@ takara_init_irq(void) takara_update_irq_hw(i, -1); for (i = 16; i < 128; ++i) { - irq_desc[i].status = IRQ_DISABLED; + irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL; irq_desc[i].handler = &takara_irq_type; } |