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

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Dec 15 17:53:16 UTC 2010


Author: sruffell
Date: Wed Dec 15 11:53:12 2010
New Revision: 9535

URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=9535
Log:
wctdm24xxp, wcte12xp: Lock interrupts when recovering from an underrun.

This reduces the chance that another interrupt will interfere with the
recovery process.  Otherwise it is possible that the hardware advances
past the position that we think it is currently at.

Signed-off-by: Shaun Ruffell <sruffell at digium.com>
Acked-by: Kinsey Moore <kmoore at digium.com>
Acked-By: Russ Meyerriecks <rmeyerriecks 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=9535&r1=9534&r2=9535
==============================================================================
--- linux/trunk/drivers/dahdi/voicebus/voicebus.c (original)
+++ linux/trunk/drivers/dahdi/voicebus/voicebus.c Wed Dec 15 11:53:12 2010
@@ -1482,12 +1482,19 @@
 
 	if (unlikely(softunderrun)) {
 		int i;
+		unsigned long flags;
+
+		/* Disable interrupts on the local processor.  We don't want
+		 * the following process interrupted. We're 'racing' against
+		 * the hardware here.... */
+		local_irq_save(flags);
 		vb_increase_latency(vb, behind, &buffers);
-
 		d = vb_descriptor(dl, dl->head);
 		while (!OWNED(d)) {
-			if (d->buffer1 != vb->idle_vbb_dma_addr)
+			if (d->buffer1 != vb->idle_vbb_dma_addr) {
+				local_irq_restore(flags);
 				goto tx_error_exit;
+			}
 			SET_OWNED(d);
 			dl->head = (dl->head + 1) & DRING_MASK;
 			d = vb_descriptor(dl, dl->head);
@@ -1502,6 +1509,7 @@
 			dl->head = (dl->head + 1) & DRING_MASK;
 		}
 		dl->tail = dl->head;
+		local_irq_restore(flags);
 	}
 
 	d = vb_descriptor(dl, dl->tail);




More information about the svn-commits mailing list