[dahdi-commits] dahdi/linux.git branch "2.8.y" updated.

SVN commits to the DAHDI project dahdi-commits at lists.digium.com
Thu Jan 23 09:01:38 CST 2014


branch "2.8.y" has been updated
       via  9fb05e426e77e4de330e7a50568cd06cab3a1578 (commit)
      from  d485a6ff21ddf0a7070e675c568c183235e4105b (commit)

Summary of changes:
 drivers/dahdi/wcaxx-base.c    |    7 +++++++
 drivers/dahdi/wcte13xp-base.c |    7 +++++++
 drivers/dahdi/wcte43x-base.c  |    7 +++++++
 drivers/dahdi/wcxb.c          |    6 ++++++
 4 files changed, 27 insertions(+)


- Log -----------------------------------------------------------------
commit 9fb05e426e77e4de330e7a50568cd06cab3a1578
Author: Shaun Ruffell <sruffell at digium.com>
Date:   Wed Jan 22 12:24:04 2014 -0600

    wcte43x, wcte13xp, wcaxx: Bump irqmisses counter when there are DMA underruns.
    
    This makes the behavior of IRQ misses for these drivers behave the same as the
    wcte12xp, wctdm24xxp, and wct4xxp drivers.
    
    Previously irqmisses would never increase. The presence of underruns would still
    show up in dmesg as latency bumps.
    
    Signed-off-by: Shaun Ruffell <sruffell at digium.com>
    Signed-off-by: Russ Meyerriecks <rmeyerriecks at digium.com>
    (cherry picked from commit 4cd09feb54c97148e8792a393396f3fc31744372)

diff --git a/drivers/dahdi/wcaxx-base.c b/drivers/dahdi/wcaxx-base.c
index b0fa8c6..86f979e 100644
--- a/drivers/dahdi/wcaxx-base.c
+++ b/drivers/dahdi/wcaxx-base.c
@@ -3872,9 +3872,16 @@ static void wcaxx_back_out_gracefully(struct wcaxx *wc)
 	kfree(wc);
 }
 
+static void wcaxx_handle_error(struct wcxb *xb)
+{
+	struct wcaxx *wc = container_of(xb, struct wcaxx, xb);
+	wc->ddev->irqmisses++;
+}
+
 static const struct wcxb_operations wcxb_operations = {
 	.handle_receive = wcaxx_handle_receive,
 	.handle_transmit = wcaxx_handle_transmit,
+	.handle_error = wcaxx_handle_error,
 };
 
 struct cmd_results {
diff --git a/drivers/dahdi/wcte13xp-base.c b/drivers/dahdi/wcte13xp-base.c
index cb16c63..2e5f1c9 100644
--- a/drivers/dahdi/wcte13xp-base.c
+++ b/drivers/dahdi/wcte13xp-base.c
@@ -118,10 +118,17 @@ static void te13x_handle_transmit(struct wcxb *xb, void *vfp);
 static void te13x_handle_receive(struct wcxb *xb, void *vfp);
 static void te13x_handle_interrupt(struct wcxb *xb, u32 pending);
 
+static void te13x_handle_error(struct wcxb *xb)
+{
+	struct t13x *wc = container_of(xb, struct t13x, xb);
+	wc->ddev->irqmisses++;
+}
+
 static struct wcxb_operations xb_ops = {
 	.handle_receive = te13x_handle_receive,
 	.handle_transmit = te13x_handle_transmit,
 	.handle_interrupt = te13x_handle_interrupt,
+	.handle_error = te13x_handle_error,
 };
 
 /* Maintenance Mode Registers */
diff --git a/drivers/dahdi/wcte43x-base.c b/drivers/dahdi/wcte43x-base.c
index eab2afc..20476b8 100644
--- a/drivers/dahdi/wcte43x-base.c
+++ b/drivers/dahdi/wcte43x-base.c
@@ -147,10 +147,17 @@ static void t43x_handle_transmit(struct wcxb *xb, void *vfp);
 static void t43x_handle_receive(struct wcxb *xb, void *vfp);
 static void t43x_handle_interrupt(struct wcxb *xb, u32 pending);
 
+static void t43x_handle_error(struct wcxb *xb)
+{
+	struct t43x *wc = container_of(xb, struct t43x, xb);
+	wc->ddev->irqmisses++;
+}
+
 static struct wcxb_operations xb_ops = {
 	.handle_receive = t43x_handle_receive,
 	.handle_transmit = t43x_handle_transmit,
 	.handle_interrupt = t43x_handle_interrupt,
+	.handle_error = t43x_handle_error,
 };
 
 /* Maintenance Mode Registers */
diff --git a/drivers/dahdi/wcxb.c b/drivers/dahdi/wcxb.c
index 191a0b0..5ae5325 100644
--- a/drivers/dahdi/wcxb.c
+++ b/drivers/dahdi/wcxb.c
@@ -397,6 +397,12 @@ static irqreturn_t _wcxb_isr(int irq, void *dev_id)
 		if (pending & DESC_UNDERRUN) {
 			u32 reg;
 
+			/* Report the error in case drivers have any custom
+			 * methods for indicating potential data corruption. An
+			 * underrun means data loss in the TDM channel. */
+			if (xb->ops->handle_error)
+				xb->ops->handle_error(xb);
+
 			/* bump latency */
 			spin_lock(&xb->lock);
 

-----------------------------------------------------------------------


-- 
dahdi/linux.git



More information about the dahdi-commits mailing list