From 7e4921d8e2d442fcc047bbbcfb2b26d48e2cc5d4 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 28 Sep 2017 16:41:24 +0200 Subject: Simplify TS alloc: internalize TRX check Move TRX check inside local tfi_find_free() wrapper to make main algorithm easier to follow. Change-Id: I02da2b8ba8c9c8815dae0e39e1fed277ca0df171 Related: OS#2282 --- src/gprs_rlcmac_ts_alloc.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp index e394a6e4..c45aa398 100644 --- a/src/gprs_rlcmac_ts_alloc.cpp +++ b/src/gprs_rlcmac_ts_alloc.cpp @@ -329,7 +329,7 @@ static bool idle_pdch_avail(const struct gprs_rlcmac_bts *bts_data) /*! Return free TFI * * \param[in] bts Pointer to BTS struct - * \param[in] trx Pointer to TRX struct + * \param[in] trx Optional pointer to TRX struct * \param[in] ms Pointer to MS object * \param[in] dir DL or UL direction * \param[in] use_trx which TRX to use or -1 if it should be selected based on what MS uses @@ -342,6 +342,15 @@ static int tfi_find_free(const BTS *bts, const gprs_rlcmac_trx *trx, const GprsM int tfi; uint8_t trx_no; + if (trx) { + if (use_trx >= 0 && use_trx != trx->trx_no) { + LOGP(DRLCMAC, LOGL_ERROR, "- Requested incompatible TRX %d (current is %d)\n", + use_trx, trx->trx_no); + return -EINVAL; + } + use_trx = trx->trx_no; + } + if (use_trx == -1 && ms->current_trx()) use_trx = ms->current_trx()->trx_no; @@ -786,16 +795,6 @@ int alloc_algorithm_b(struct gprs_rlcmac_bts *bts, GprsMs *ms_, struct gprs_rlcm first_common_ts = ms->first_common_ts(); trx = ms->current_trx(); - if (trx) { - if (use_trx >= 0 && use_trx != trx->trx_no) { - LOGP(DRLCMAC, LOGL_ERROR, - "- Requested incompatible TRX %d (current is %d)\n", - use_trx, trx->trx_no); - return -EINVAL; - } - use_trx = trx->trx_no; - } - /* Step 2a: Find usable TRX and TFI */ tfi = tfi_find_free(bts->bts, trx, ms, tbf->direction, use_trx, &trx_no); if (tfi < 0) { -- cgit v1.2.3