tnt has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-e1d/+/26818 )
Change subject: contrib/e1-prbs-test: Delay the TX pipe fill data until first RX ......................................................................
contrib/e1-prbs-test: Delay the TX pipe fill data until first RX
There is non negligible time between the moment init_timeslot is called and the moment when we get the first RX (which is when we start sending out data at the same rate we RX it). And those 1024 byte were borderline not enough to not underflow.
By delaying the 1024 byte pre-fill until we get the first RX, we ensure the time that pre-fill covers is more consistant and less dependend on whatever the app/scheduling does during the init phase.
Signed-off-by: Sylvain Munaut tnt@246tNt.com Change-Id: Ic1c93fd138073a75830dc16bb41c4541e68eef90 --- M contrib/e1-prbs-test/internal.h M contrib/e1-prbs-test/main.c 2 files changed, 7 insertions(+), 4 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-e1d refs/changes/18/26818/1
diff --git a/contrib/e1-prbs-test/internal.h b/contrib/e1-prbs-test/internal.h index a2c4ef5..64ee146 100644 --- a/contrib/e1-prbs-test/internal.h +++ b/contrib/e1-prbs-test/internal.h @@ -30,6 +30,7 @@ struct osmo_prbs prbs; /* PRBS definition */ struct prbs_precomp prbs_pc; /* pre-computed PRBS bytes */ unsigned int prbs_pc_idx; /* next to-be-transmitted byte offset in prbs_pc */ + bool active; /* started tx ? */ };
struct timeslot_state_rx { diff --git a/contrib/e1-prbs-test/main.c b/contrib/e1-prbs-test/main.c index d0809bf..b64cb15 100644 --- a/contrib/e1-prbs-test/main.c +++ b/contrib/e1-prbs-test/main.c @@ -66,6 +66,12 @@ len = rc; process_rx(&ts->rx, ofd->priv_nr, buf, len);
+ /* if this is the first cb, we preload the transmit queue a bit */ + if (!ts->tx.active) { + process_tx(ts, 1024); + ts->tx.active = true; + } + /* generate as many bytes as were read */ process_tx(ts, len);
@@ -79,10 +85,6 @@
ts_init_prbs_tx(ts, g_prbs_offs_tx); ts_init_prbs_rx(ts, g_prbs_offs_rx); - - /* start to put something into the transmit queue, before we get read-triggered - * later on */ - process_tx(ts, 1024); }
static int open_slots_e1d(struct test_state *tst, int intf_nr, int line_nr)
laforge has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-e1d/+/26818 )
Change subject: contrib/e1-prbs-test: Delay the TX pipe fill data until first RX ......................................................................
Patch Set 2: Code-Review+2
laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-e1d/+/26818 )
Change subject: contrib/e1-prbs-test: Delay the TX pipe fill data until first RX ......................................................................
contrib/e1-prbs-test: Delay the TX pipe fill data until first RX
There is non negligible time between the moment init_timeslot is called and the moment when we get the first RX (which is when we start sending out data at the same rate we RX it). And those 1024 byte were borderline not enough to not underflow.
By delaying the 1024 byte pre-fill until we get the first RX, we ensure the time that pre-fill covers is more consistant and less dependend on whatever the app/scheduling does during the init phase.
Signed-off-by: Sylvain Munaut tnt@246tNt.com Change-Id: Ic1c93fd138073a75830dc16bb41c4541e68eef90 --- M contrib/e1-prbs-test/internal.h M contrib/e1-prbs-test/main.c 2 files changed, 7 insertions(+), 4 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved
diff --git a/contrib/e1-prbs-test/internal.h b/contrib/e1-prbs-test/internal.h index a2c4ef5..64ee146 100644 --- a/contrib/e1-prbs-test/internal.h +++ b/contrib/e1-prbs-test/internal.h @@ -30,6 +30,7 @@ struct osmo_prbs prbs; /* PRBS definition */ struct prbs_precomp prbs_pc; /* pre-computed PRBS bytes */ unsigned int prbs_pc_idx; /* next to-be-transmitted byte offset in prbs_pc */ + bool active; /* started tx ? */ };
struct timeslot_state_rx { diff --git a/contrib/e1-prbs-test/main.c b/contrib/e1-prbs-test/main.c index d0809bf..b64cb15 100644 --- a/contrib/e1-prbs-test/main.c +++ b/contrib/e1-prbs-test/main.c @@ -66,6 +66,12 @@ len = rc; process_rx(&ts->rx, ofd->priv_nr, buf, len);
+ /* if this is the first cb, we preload the transmit queue a bit */ + if (!ts->tx.active) { + process_tx(ts, 1024); + ts->tx.active = true; + } + /* generate as many bytes as were read */ process_tx(ts, len);
@@ -79,10 +85,6 @@
ts_init_prbs_tx(ts, g_prbs_offs_tx); ts_init_prbs_rx(ts, g_prbs_offs_rx); - - /* start to put something into the transmit queue, before we get read-triggered - * later on */ - process_tx(ts, 1024); }
static int open_slots_e1d(struct test_state *tst, int intf_nr, int line_nr)