diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2017-07-04 13:43:11 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-07-24 22:00:00 +0000 |
commit | 69de62a57348a2b636021663d1271b5738ced116 (patch) | |
tree | 57ff17d88ec7c78c5ac87135b711610f8e8a520b | |
parent | 9dccaa2064e63ba24dde6f7a9928f2ff70ef5943 (diff) |
cosmetic: scheduler_trx.c: Add function to get rid of ugly goto path
Change-Id: I9c2e166e6f182f703ccf49aa883c223e377c8421
-rw-r--r-- | src/osmo-bts-trx/scheduler_trx.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/src/osmo-bts-trx/scheduler_trx.c b/src/osmo-bts-trx/scheduler_trx.c index f46ae1ad..26b1705a 100644 --- a/src/osmo-bts-trx/scheduler_trx.c +++ b/src/osmo-bts-trx/scheduler_trx.c @@ -1585,6 +1585,26 @@ no_clock: return 0; } +/*! reset clock with current fn and schedule it. Called when trx becomes + * available or when max clock skew is reached */ +static int trx_setup_clock(struct gsm_bts *bts, struct osmo_trx_clock_state *tcs, + struct timespec *tv_now, const struct timespec *interval, uint32_t fn) +{ + tcs->last_fn_timer.fn = fn; + /* call trx cheduler function for new 'last' FN */ + trx_sched_fn(bts, tcs->last_fn_timer.fn); + + /* schedule first FN clock timer */ + timer_ofd_setup(&tcs->fn_timer_ofd, trx_fn_timer_cb, bts); + timer_ofd_schedule(&tcs->fn_timer_ofd, NULL, interval); + + tcs->last_fn_timer.tv = *tv_now; + tcs->last_clk_ind.tv = *tv_now; + tcs->last_clk_ind.fn = fn; + + return 0; +} + /*! called every time we receive a clock indication from TRX */ int trx_sched_clock(struct gsm_bts *bts, uint32_t fn) { @@ -1615,20 +1635,7 @@ int trx_sched_clock(struct gsm_bts *bts, uint32_t fn) /* tell BSC */ check_transceiver_availability(bts, 1); -new_clock: - tcs->last_fn_timer.fn = fn; - /* call trx cheduler function for new 'last' FN */ - trx_sched_fn(bts, tcs->last_fn_timer.fn); - - /* schedule first FN clock timer */ - timer_ofd_setup(&tcs->fn_timer_ofd, trx_fn_timer_cb, bts); - timer_ofd_schedule(&tcs->fn_timer_ofd, NULL, &interval); - - tcs->last_fn_timer.tv = tv_now; - tcs->last_clk_ind.tv = tv_now; - tcs->last_clk_ind.fn = fn; - - return 0; + return trx_setup_clock(bts, tcs, &tv_now, &interval, fn); } /* calculate elapsed time +fn since last timer */ @@ -1663,7 +1670,7 @@ new_clock: if (elapsed_fn > MAX_FN_SKEW || elapsed_fn < -MAX_FN_SKEW) { LOGP(DL1C, LOGL_NOTICE, "GSM clock skew: old fn=%u, " "new fn=%u\n", tcs->last_fn_timer.fn, fn); - goto new_clock; + return trx_setup_clock(bts, tcs, &tv_now, &interval, fn); } LOGP(DL1C, LOGL_INFO, "GSM clock jitter: %d us (elapsed_fn=%d)\n", |