pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/27858 )
Change subject: bts: Simplify bts->paging initialization ......................................................................
bts: Simplify bts->paging initialization
Related: SYS#5922 Change-Id: Id103d5f3d437065abcd32788caef339343b1e96a --- M include/osmocom/bsc/bts.h M include/osmocom/bsc/gsm_data.h M include/osmocom/bsc/paging.h M src/osmo-bsc/bsc_vty.c M src/osmo-bsc/bts.c M src/osmo-bsc/paging.c 6 files changed, 28 insertions(+), 49 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/58/27858/1
diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h index cd0f8cb..95d9b05 100644 --- a/include/osmocom/bsc/bts.h +++ b/include/osmocom/bsc/bts.h @@ -17,6 +17,7 @@ #include "osmocom/bsc/bts_trx.h" #include "osmocom/bsc/bts_sm.h" #include "osmocom/bsc/abis_om2000.h" +#include "osmocom/bsc/paging.h"
enum bts_counter_id { BTS_CTR_CHREQ_TOTAL, diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h index 4a58c2b..b478ba0 100644 --- a/include/osmocom/bsc/gsm_data.h +++ b/include/osmocom/bsc/gsm_data.h @@ -962,26 +962,6 @@
#define GSM_LCHAN_SI(lchan, i) (void *)((lchan)->si.buf[i][0])
-/* - * This keeps track of the paging status of one BTS. It - * includes a number of pending requests, a back pointer - * to the gsm_bts, a timer and some more state. - */ -struct gsm_bts_paging_state { - /* pending requests */ - struct llist_head pending_requests; - struct gsm_bts *bts; - - struct osmo_timer_list work_timer; - struct osmo_timer_list credit_timer; - - /* free chans needed */ - int free_chans_need; - - /* load */ - uint16_t available_slots; -}; - struct gsm_envabtse { struct gsm_abis_mo mo; }; diff --git a/include/osmocom/bsc/paging.h b/include/osmocom/bsc/paging.h index 2d0f8da..c4381fa 100644 --- a/include/osmocom/bsc/paging.h +++ b/include/osmocom/bsc/paging.h @@ -89,6 +89,28 @@ enum bsc_paging_reason reason; };
+/* + * This keeps track of the paging status of one BTS. It + * includes a number of pending requests, a back pointer + * to the gsm_bts, a timer and some more state. + */ +struct gsm_bts_paging_state { + /* pending requests */ + struct llist_head pending_requests; + struct gsm_bts *bts; + + struct osmo_timer_list work_timer; + struct osmo_timer_list credit_timer; + + /* free chans needed */ + int free_chans_need; + + /* load */ + uint16_t available_slots; +}; + +void paging_init(struct gsm_bts *bts); + /* schedule paging request */ int paging_request_bts(const struct bsc_paging_params *params, struct gsm_bts *bts);
diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c index 5976721..92fa64a 100644 --- a/src/osmo-bsc/bsc_vty.c +++ b/src/osmo-bsc/bsc_vty.c @@ -1043,9 +1043,6 @@ { struct gsm_paging_request *pag;
- if (!bts->paging.bts) - return; - llist_for_each_entry(pag, &bts->paging.pending_requests, entry) paging_dump_vty(vty, pag); } diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c index f4c90e0..16fe547 100644 --- a/src/osmo-bsc/bts.c +++ b/src/osmo-bsc/bts.c @@ -268,8 +268,7 @@ bts->rach_b_thresh = -1; bts->rach_ldavg_slots = -1;
- bts->paging.free_chans_need = -1; - INIT_LLIST_HEAD(&bts->paging.pending_requests); + paging_init(bts);
bts->features.data = &bts->_features_data[0]; bts->features.data_len = sizeof(bts->_features_data); diff --git a/src/osmo-bsc/paging.c b/src/osmo-bsc/paging.c index 721ea31..d3b9f37 100644 --- a/src/osmo-bsc/paging.c +++ b/src/osmo-bsc/paging.c @@ -240,22 +240,14 @@ }
/*! initialize the bts paging state, if it hasn't been initialized yet */ -static void paging_init_if_needed(struct gsm_bts *bts) +void paging_init(struct gsm_bts *bts) { - if (bts->paging.bts) - return; - bts->paging.bts = bts; - - /* This should be initialized only once. There is currently no code that sets bts->paging.bts - * back to NULL, so let's just assert this one instead of graceful handling. */ - OSMO_ASSERT(llist_empty(&bts->paging.pending_requests)); - - osmo_timer_setup(&bts->paging.work_timer, paging_worker, - &bts->paging); - + bts->paging.free_chans_need = -1; /* Large number, until we get a proper message */ bts->paging.available_slots = 20; + INIT_LLIST_HEAD(&bts->paging.pending_requests); + osmo_timer_setup(&bts->paging.work_timer, paging_worker, st); }
/*! do we have any pending paging requests for given subscriber? */ @@ -379,9 +371,6 @@ if (!trx_is_usable(bts->c0)) return 0;
- /* maybe it is the first time we use it */ - paging_init_if_needed(bts); - /* Trigger paging, pass any error to the caller */ rc = _paging_request(params, bts); if (rc < 0) @@ -405,8 +394,6 @@ *msc_p = NULL; *reason_p = BSC_PAGING_NONE;
- paging_init_if_needed(bts); - llist_for_each_entry_safe(req, req2, &bts_entry->pending_requests, entry) { if (req->bsub != bsub) @@ -474,8 +461,6 @@ llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) { struct gsm_paging_request *req, *req2;
- paging_init_if_needed(bts); - llist_for_each_entry_safe(req, req2, &bts->paging.pending_requests, entry) { if (req->bsub != bsub) continue; @@ -492,7 +477,6 @@ /*! Update the BTS paging buffer slots on given BTS */ void paging_update_buffer_space(struct gsm_bts *bts, uint16_t free_slots) { - paging_init_if_needed(bts);
osmo_timer_del(&bts->paging.credit_timer); bts->paging.available_slots = free_slots; @@ -505,8 +489,6 @@ unsigned int requests = 0; struct gsm_paging_request *req;
- paging_init_if_needed(bts); - llist_for_each_entry(req, &bts->paging.pending_requests, entry) ++requests;
@@ -519,8 +501,6 @@ struct gsm_paging_request *req, *req2; int num_cancelled = 0;
- paging_init_if_needed(bts); - llist_for_each_entry_safe(req, req2, &bts->paging.pending_requests, entry) { if (msc && req->msc != msc) continue;