pespin has submitted this change. ( 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: Id103d5f3d437065abcd32788caef339343b1e96 --- 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 4 files changed, 8 insertions(+), 29 deletions(-)
Approvals: fixeria: Looks good to me, but someone else must approve pespin: Looks good to me, approved osmith: Looks good to me, but someone else must approve Jenkins Builder: Verified
diff --git a/include/osmocom/bsc/paging.h b/include/osmocom/bsc/paging.h index 2d0f8da..dd3d316 100644 --- a/include/osmocom/bsc/paging.h +++ b/include/osmocom/bsc/paging.h @@ -89,6 +89,8 @@ enum bsc_paging_reason reason; };
+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 6fb78d8..d452a52 100644 --- a/src/osmo-bsc/bsc_vty.c +++ b/src/osmo-bsc/bsc_vty.c @@ -1044,9 +1044,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..87ed44f 100644 --- a/src/osmo-bsc/bts.c +++ b/src/osmo-bsc/bts.c @@ -24,6 +24,7 @@ #include <osmocom/bsc/bts.h> #include <osmocom/bsc/debug.h> #include <osmocom/bsc/nm_common_fsm.h> +#include <osmocom/bsc/paging.h>
const struct value_string bts_attribute_names[] = { OSMO_VALUE_STRING(BTS_TYPE_VARIANT), @@ -268,8 +269,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..512f39c 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, &bts->paging); }
/*! 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;