aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-09-22 16:41:12 +0200
committerpespin <pespin@sysmocom.de>2021-09-23 11:09:15 +0000
commit192390c797bd82823636027df61c308dc4d1dcc0 (patch)
tree482e05dde182fdd8d9da29b3de4e0fd25bbbd488
parentce9ec4963c963104d7872f389477ac7424ac313a (diff)
trx_sched_clean_ts: Clean VAMOS shadow TS too
trx_sched_init_ts does it properly, but apparently it was forgotten to do the same upon clean up. Change-Id: Ice751870a46548af42b14846b8482335f636a84a
-rw-r--r--src/common/scheduler.c51
1 files changed, 30 insertions, 21 deletions
diff --git a/src/common/scheduler.c b/src/common/scheduler.c
index 6e1e4fb1..0826eda7 100644
--- a/src/common/scheduler.c
+++ b/src/common/scheduler.c
@@ -653,34 +653,43 @@ void trx_sched_init(struct gsm_bts_trx *trx)
}
}
+static void trx_sched_clean_ts(struct gsm_bts_trx_ts *ts)
+{
+ struct l1sched_ts *l1ts = ts->priv;
+ unsigned int i;
+
+ msgb_queue_flush(&l1ts->dl_prims);
+ rate_ctr_group_free(l1ts->ctrs);
+ l1ts->ctrs = NULL;
+ for (i = 0; i < _TRX_CHAN_MAX; i++) {
+ struct l1sched_chan_state *chan_state;
+ chan_state = &l1ts->chan_state[i];
+ if (chan_state->dl_bursts) {
+ talloc_free(chan_state->dl_bursts);
+ chan_state->dl_bursts = NULL;
+ }
+ if (chan_state->ul_bursts) {
+ talloc_free(chan_state->ul_bursts);
+ chan_state->ul_bursts = NULL;
+ }
+ }
+ /* clear lchan channel states */
+ for (i = 0; i < ARRAY_SIZE(ts->lchan); i++)
+ lchan_set_state(&ts->lchan[i], LCHAN_S_NONE);
+}
+
void trx_sched_clean(struct gsm_bts_trx *trx)
{
- unsigned int tn, i;
+ unsigned int tn;
LOGPTRX(trx, DL1C, LOGL_DEBUG, "Clean scheduler structures\n");
for (tn = 0; tn < ARRAY_SIZE(trx->ts); tn++) {
struct gsm_bts_trx_ts *ts = &trx->ts[tn];
- struct l1sched_ts *l1ts = ts->priv;
-
- msgb_queue_flush(&l1ts->dl_prims);
- rate_ctr_group_free(l1ts->ctrs);
- l1ts->ctrs = NULL;
- for (i = 0; i < _TRX_CHAN_MAX; i++) {
- struct l1sched_chan_state *chan_state;
- chan_state = &l1ts->chan_state[i];
- if (chan_state->dl_bursts) {
- talloc_free(chan_state->dl_bursts);
- chan_state->dl_bursts = NULL;
- }
- if (chan_state->ul_bursts) {
- talloc_free(chan_state->ul_bursts);
- chan_state->ul_bursts = NULL;
- }
- }
- /* clear lchan channel states */
- for (i = 0; i < ARRAY_SIZE(ts->lchan); i++)
- lchan_set_state(&ts->lchan[i], LCHAN_S_NONE);
+
+ /* Clean primary and shadow timeslots */
+ trx_sched_clean_ts(ts);
+ trx_sched_clean_ts(ts->vamos.peer);
}
}