[svn-commits] sruffell: linux/trunk r10118 - /linux/trunk/drivers/dahdi/voicebus/voicebus.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Aug 12 10:58:31 CDT 2011


Author: sruffell
Date: Fri Aug 12 10:58:27 2011
New Revision: 10118

URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=10118
Log:
wcte12xp, wctdm24xxp: Force local interrupts off in the interrupt handler.

r10066 "wctdm24xxp, wcte12xp: Run the ISR with interrupts disabled."
requested that the interrupt handler be run in "fast" mode (disabled)
but this isn't necessarily guaranteed.

This patch makes the interrupt handler itself disable all the interrupts.
Linux commit 470c66239ef0336429b35345f3f615d47341e13b [1] contains a comment
about why this is necessary.

[1] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=470c66239ef03364

(closes issue DAHLIN-248)
Reported-and-Tested-by: Vladimir Mikhelson <vlad at mikhelson.com>
Signed-off-by: Shaun Ruffell <sruffell at digium.com>

Modified:
    linux/trunk/drivers/dahdi/voicebus/voicebus.c

Modified: linux/trunk/drivers/dahdi/voicebus/voicebus.c
URL: http://svnview.digium.com/svn/dahdi/linux/trunk/drivers/dahdi/voicebus/voicebus.c?view=diff&rev=10118&r1=10117&r2=10118
==============================================================================
--- linux/trunk/drivers/dahdi/voicebus/voicebus.c (original)
+++ linux/trunk/drivers/dahdi/voicebus/voicebus.c Fri Aug 12 10:58:27 2011
@@ -1683,6 +1683,7 @@
 #endif
 {
 	struct voicebus *vb = dev_id;
+	unsigned long flags;
 	u32 int_status;
 
 	int_status = __vb_getctl(vb, SR_CSR5);
@@ -1692,6 +1693,8 @@
 
 	if (!int_status)
 		return IRQ_NONE;
+
+	local_irq_save(flags);
 
 	if (unlikely((int_status &
 	    (TX_UNAVAILABLE_INTERRUPT|RX_UNAVAILABLE_INTERRUPT)) &&
@@ -1733,6 +1736,7 @@
 		/* Clear the interrupt(s) */
 		__vb_setctl(vb, SR_CSR5, int_status);
 	}
+	local_irq_restore(flags);
 
 	return IRQ_HANDLED;
 }
@@ -1881,7 +1885,7 @@
 		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");




More information about the svn-commits mailing list