[svn-commits] sruffell: branch linux/sruffell/dahdi-linux-chainedvb r7092 - /linux/team/sru...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Sep 3 16:15:19 CDT 2009


Author: sruffell
Date: Thu Sep  3 16:15:15 2009
New Revision: 7092

URL: http://svn.asterisk.org/svn-view/dahdi?view=rev&rev=7092
Log:
wip: Latency bumps work the same currently...

Modified:
    linux/team/sruffell/dahdi-linux-chainedvb/drivers/dahdi/voicebus/voicebus.c

Modified: linux/team/sruffell/dahdi-linux-chainedvb/drivers/dahdi/voicebus/voicebus.c
URL: http://svn.asterisk.org/svn-view/dahdi/linux/team/sruffell/dahdi-linux-chainedvb/drivers/dahdi/voicebus/voicebus.c?view=diff&rev=7092&r1=7091&r2=7092
==============================================================================
--- linux/team/sruffell/dahdi-linux-chainedvb/drivers/dahdi/voicebus/voicebus.c (original)
+++ linux/team/sruffell/dahdi-linux-chainedvb/drivers/dahdi/voicebus/voicebus.c Thu Sep  3 16:15:15 2009
@@ -161,6 +161,7 @@
 	struct voicebus_chained_descriptor *tail;
 	enum dma_data_direction	direction;
 	unsigned int		padding;
+	atomic_t		count;
 };
 #else
 struct voicebus_descriptor_list {
@@ -368,6 +369,7 @@
 	}
 	dl->head = list_entry(list->next, typeof(*d), node);
 	dl->tail = list_entry(list->next, typeof(*d), node);
+	atomic_set(&dl->count, 0);
 }
 #else
 static void
@@ -403,7 +405,7 @@
 
 	vb_cleanup_descriptors(vb, dl);
 	while (!list_empty(list)) {
-		d = list_entry(list->next, struct voicebus_chained_descriptor, node);
+		d = list_entry(list->next, typeof(*d), node);
 		list_del(&d->node);
 		dma_free_coherent(&vb->pdev->dev, sizeof(*d->desc),
 				  d->desc, d->dma_addr);
@@ -466,6 +468,7 @@
 		prev = d;
 	}
 
+	atomic_set(&dl->count, 0);
 	return 0;
 
 error_nomem:
@@ -905,6 +908,7 @@
 
 	/* That's it until the hardware is done with it. */
 	SET_OWNED(d->desc);
+	atomic_inc(&dl->count);
 	return -EFAULT;
 }
 
@@ -922,6 +926,7 @@
 		vbb = d->pending;
 		dl->head = get_next_descriptor(dl, d);
 		d->desc->buffer1 = 0;
+		atomic_dec(&dl->count);
 		return vbb;
 	} else {
 		return NULL;
@@ -1316,22 +1321,22 @@
 }
 EXPORT_SYMBOL(voicebus_release);
 
-#if defined(USE_CHAINED_DESCRIPTORS)
-static void __vb_increase_latency(struct voicebus *vb)
-{
-}
-#else
 static void
 __vb_increase_latency(struct voicebus *vb)
 {
 	static int __warn_once = 1;
 	void *vbb;
 	int latency;
+#if defined(USE_CHAINED_DESCRIPTORS)
+	const int MAX_LATENCY = DLIST_SIZE;
+#else
+	const int MAX_LATENCY = DRING_SIZE;
+#endif
 
 	assert_in_vb_deferred(vb);
 
 	latency = atomic_read(&vb->txd.count);
-	if (DRING_SIZE == latency) {
+	if (MAX_LATENCY == latency) {
 		if (__warn_once) {
 			/* We must subtract two from this number since there
 			 * are always two buffers in the TX FIFO.
@@ -1339,7 +1344,7 @@
 			VB_PRINTK(vb, ERR,
 				"ERROR: Unable to service card within %d ms "\
 				"and unable to further increase latency.\n",
-				DRING_SIZE-2);
+				MAX_LATENCY-2);
 			__warn_once = 0;
 		}
 	} else {
@@ -1368,7 +1373,6 @@
 
 	}
 }
-#endif
 
 /*!
  * \brief Actually process the completed transmit and receive buffers.




More information about the svn-commits mailing list