laforge has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/dahdi-linux/+/34011 )


Change subject: Flush DAHDI->trunkdev FIFO at open time
......................................................................

Flush DAHDI->trunkdev FIFO at open time

If we don't do this, we always have a full FIFO at the time userspace
opens the trunkdev, adding latency for no good reason.

Change-Id: Ifbda3766309cc7d6be485073e36607bdd6742f3a
---
M drivers/dahdi/trunkdev/frame_fifo.c
M drivers/dahdi/trunkdev/frame_fifo.h
M drivers/dahdi/trunkdev/trunkdev.c
3 files changed, 26 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/dahdi-linux refs/changes/11/34011/1

diff --git a/drivers/dahdi/trunkdev/frame_fifo.c 
b/drivers/dahdi/trunkdev/frame_fifo.c
index 19b6dba..3b7732f 100644
--- a/drivers/dahdi/trunkdev/frame_fifo.c
+++ b/drivers/dahdi/trunkdev/frame_fifo.c
@@ -53,6 +53,15 @@
        spin_lock_init(&fifo->lock);
 }

+/*! Flush (drop) the entire content of the FIFO */
+void frame_fifo_flush(struct frame_fifo *fifo)
+{
+       unsigned long flags;
+       spin_lock_irqsave(&fifo->lock, flags);
+       fifo->next_out = fifo->next_in;
+       spin_unlock_irqrestore(&fifo->lock, flags);
+}
+
 #define FIFO_BUF_END(f)        ((f)->buf + sizeof((f)->buf))

 /*! put one received frames into the FIFO.
diff --git a/drivers/dahdi/trunkdev/frame_fifo.h 
b/drivers/dahdi/trunkdev/frame_fifo.h
index af02811..b07cddc 100644
--- a/drivers/dahdi/trunkdev/frame_fifo.h
+++ b/drivers/dahdi/trunkdev/frame_fifo.h
@@ -20,6 +20,8 @@
                     void (*threshold_cb)(struct frame_fifo *fifo, unsigned int 
frames, void *priv),
                     void *priv);

+void frame_fifo_flush(struct frame_fifo *fifo);
+
 /* number of frames currently available in FIFO */
 static inline unsigned int __frame_fifo_frames(struct frame_fifo *fifo)
 {
diff --git a/drivers/dahdi/trunkdev/trunkdev.c 
b/drivers/dahdi/trunkdev/trunkdev.c
index 8375c86..339b9d0 100644
--- a/drivers/dahdi/trunkdev/trunkdev.c
+++ b/drivers/dahdi/trunkdev/trunkdev.c
@@ -456,6 +456,9 @@
                span->alarms &= ~(ALL_RY_ALARMS|DAHDI_ALARM_LOS);
                dahdi_alarm_notify(span);
                spin_unlock_irqrestore(&span->lock, flags);
+               /* FIFO should be full at this point, let's flush it as now we 
actually
+                * have a receiver */
+               frame_fifo_flush(&td->to_trunk);

                open.spanno = span->spanno;
                if (copy_to_user((__user void *) data, &open, sizeof(open)))

--
To view, visit https://gerrit.osmocom.org/c/dahdi-linux/+/34011
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: dahdi-linux
Gerrit-Branch: master
Gerrit-Change-Id: Ifbda3766309cc7d6be485073e36607bdd6742f3a
Gerrit-Change-Number: 34011
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <[email protected]>
Gerrit-MessageType: newchange

Reply via email to