From 2afffd5cf67ad84c4fd8e589798b8697b809ebc5 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Sun, 25 Sep 2016 17:01:20 +0200 Subject: [PATCH] Revert "bts: extend bts_chan_load to allow counting tch only" This reverts commit 308cb0719dca3ba8eed1eff2a2124d44f34d9a28. Problems in this commit: openbsc/src/libbsc/chan_alloc.c:523: case GSM_PCHAN_TCH_F_PDCH: This is actually wrong, GSM_PCHAN_TCH_F_PDCH use ts->flags, not ts->dyn below (due to historical reasons and could be unified). 560: if (only_count_tch && !chan_is_tch(ts)) This has exactly one effect: it excludes GSM_PCHAN_TCH_F_PDCH when in PDCH mode, because for all other PDCH (plain PDCH and TCH/F_TCH/H_PDCH in PDCH mode) below ts_subslots() returns 0 and skips the for() loop. I consider this a bug in TCH/F_PDCH, to be fixed in an upcoming commit. I don't see why we need the only_count_tch argument, because this should normally only count TCH, weren't it for the TCH/F_PDCH bug. If dyn TS should be counted differently, we should do this in a different way. Change-Id: I34dbbaf53a800115e3d03bd44028cad675f3b525 --- openbsc/include/openbsc/chan_alloc.h | 2 +- openbsc/src/libbsc/bsc_ctrl_commands.c | 2 +- openbsc/src/libbsc/bsc_vty.c | 2 +- openbsc/src/libbsc/chan_alloc.c | 29 +++----------------------- openbsc/src/libbsc/paging.c | 2 +- 5 files changed, 7 insertions(+), 30 deletions(-) diff --git a/openbsc/include/openbsc/chan_alloc.h b/openbsc/include/openbsc/chan_alloc.h index d919b5105..78242e5b7 100644 --- a/openbsc/include/openbsc/chan_alloc.h +++ b/openbsc/include/openbsc/chan_alloc.h @@ -46,7 +46,7 @@ struct pchan_load { struct load_counter pchan[_GSM_PCHAN_MAX]; }; -void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts, int only_count_tch); +void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts); void network_chan_load(struct pchan_load *pl, struct gsm_network *net); int trx_is_usable(struct gsm_bts_trx *trx); diff --git a/openbsc/src/libbsc/bsc_ctrl_commands.c b/openbsc/src/libbsc/bsc_ctrl_commands.c index 3f4fee2a3..7e8479734 100644 --- a/openbsc/src/libbsc/bsc_ctrl_commands.c +++ b/openbsc/src/libbsc/bsc_ctrl_commands.c @@ -239,7 +239,7 @@ static int get_bts_chan_load(struct ctrl_cmd *cmd, void *data) bts = cmd->node; memset(&pl, 0, sizeof(pl)); - bts_chan_load(&pl, bts, 0); + bts_chan_load(&pl, bts); cmd->reply = talloc_strdup(cmd, ""); diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c index cdcc011fb..cb0b1d8c8 100644 --- a/openbsc/src/libbsc/bsc_vty.c +++ b/openbsc/src/libbsc/bsc_vty.c @@ -329,7 +329,7 @@ static void bts_dump_vty(struct vty *vty, struct gsm_bts *bts) /* FIXME: chan_desc */ memset(&pl, 0, sizeof(pl)); - bts_chan_load(&pl, bts, 0); + bts_chan_load(&pl, bts); vty_out(vty, " Current Channel Load:%s", VTY_NEWLINE); dump_pchan_load_vty(vty, " ", &pl); } diff --git a/openbsc/src/libbsc/chan_alloc.c b/openbsc/src/libbsc/chan_alloc.c index 03d44e01f..7b0c3e67d 100644 --- a/openbsc/src/libbsc/chan_alloc.c +++ b/openbsc/src/libbsc/chan_alloc.c @@ -514,28 +514,7 @@ struct gsm_subscriber_connection *connection_for_subscr(struct gsm_subscriber *s return NULL; } -static int chan_is_tch(struct gsm_bts_trx_ts *ts) -{ - switch (ts->pchan) { - case GSM_PCHAN_TCH_F: - case GSM_PCHAN_TCH_H: - return 1; - case GSM_PCHAN_TCH_F_PDCH: - case GSM_PCHAN_TCH_F_TCH_H_PDCH: - if (ts->dyn.pchan_is == GSM_PCHAN_TCH_F || - ts->dyn.pchan_is == GSM_PCHAN_TCH_H) - return 1; - else - return 0; - default: - return 0; - } -} - - - -void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts, - int only_count_tch) +void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts) { struct gsm_bts_trx *trx; @@ -557,9 +536,6 @@ void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts, if (!nm_is_running(&ts->mo.nm_state)) continue; - if (only_count_tch && !chan_is_tch(ts)) - continue; - subslots = ts_subslots(ts); for (j = 0; j < subslots; j++) { struct gsm_lchan *lchan = &ts->lchan[j]; @@ -585,5 +561,6 @@ void network_chan_load(struct pchan_load *pl, struct gsm_network *net) memset(pl, 0, sizeof(*pl)); llist_for_each_entry(bts, &net->bts_list, list) - bts_chan_load(pl, bts, 0); + bts_chan_load(pl, bts); } + diff --git a/openbsc/src/libbsc/paging.c b/openbsc/src/libbsc/paging.c index e3795b305..fcb4debd9 100644 --- a/openbsc/src/libbsc/paging.c +++ b/openbsc/src/libbsc/paging.c @@ -119,7 +119,7 @@ static int can_send_pag_req(struct gsm_bts *bts, int rsl_type) int count; memset(&pl, 0, sizeof(pl)); - bts_chan_load(&pl, bts, 0); + bts_chan_load(&pl, bts); switch (rsl_type) { case RSL_CHANNEED_TCH_F: