diff options
Diffstat (limited to 'drivers/dahdi/voicebus')
-rw-r--r-- | drivers/dahdi/voicebus/voicebus.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/dahdi/voicebus/voicebus.c b/drivers/dahdi/voicebus/voicebus.c index 16f3466..d11559a 100644 --- a/drivers/dahdi/voicebus/voicebus.c +++ b/drivers/dahdi/voicebus/voicebus.c @@ -1683,6 +1683,7 @@ vb_isr(int irq, void *dev_id) #endif { struct voicebus *vb = dev_id; + unsigned long flags; u32 int_status; int_status = __vb_getctl(vb, SR_CSR5); @@ -1693,6 +1694,8 @@ vb_isr(int irq, void *dev_id) if (!int_status) return IRQ_NONE; + local_irq_save(flags); + if (unlikely((int_status & (TX_UNAVAILABLE_INTERRUPT|RX_UNAVAILABLE_INTERRUPT)) && !test_bit(VOICEBUS_STOP, &vb->flags) && @@ -1733,6 +1736,7 @@ vb_isr(int irq, void *dev_id) /* Clear the interrupt(s) */ __vb_setctl(vb, SR_CSR5, int_status); } + local_irq_restore(flags); return IRQ_HANDLED; } @@ -1881,7 +1885,7 @@ __voicebus_init(struct voicebus *vb, const char *board_name, goto cleanup; #if !defined(CONFIG_VOICEBUS_TIMER) - retval = request_irq(vb->pdev->irq, vb_isr, DAHDI_IRQ_SHARED_DISABLED, + retval = request_irq(vb->pdev->irq, vb_isr, DAHDI_IRQ_SHARED, board_name, vb); if (retval) { dev_warn(&vb->pdev->dev, "Failed to request interrupt line.\n"); |