pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-pcu/+/32349 )

Change subject: Merge bts_alloc_ms() and ms_alloc()
......................................................................

Merge bts_alloc_ms() and ms_alloc()

gprs_default_cb_ms_idle() is changed to have the same implementation as
previous bts_ms_idle_cb(), since that's the only one being used in
osmo-pcu code. It makes no sense to use different callback logic in unit
tests.

This is another step towards simplifying the code and getting rid of the
idle/active_cb().

Change-Id: I2a06d17588572a21dc5a14ddbde83766076b446d
---
M src/bts.cpp
M src/bts.h
M src/gprs_ms.c
M src/pdch.cpp
M src/tbf_dl.cpp
M tests/alloc/AllocTest.cpp
M tests/app_info/AppInfoTest.cpp
M tests/llc/LlcTest.cpp
M tests/ms/MsTest.cpp
M tests/tbf/TbfTest.cpp
M tests/types/TypesTest.cpp
11 files changed, 53 insertions(+), 62 deletions(-)

Approvals:
  osmith: Looks good to me, but someone else must approve
  Jenkins Builder: Verified
  fixeria: Looks good to me, approved




diff --git a/src/bts.cpp b/src/bts.cpp
index 3b27676..07ea77c 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -1007,7 +1007,7 @@
                     "SBFn=%u TRX=%u TS=%u\n", sb_fn, pdch->trx->trx_no, 
pdch->ts_no);
                bts_do_rate_ctr_inc(bts, CTR_IMMEDIATE_ASSIGN_UL_TBF_TWO_PHASE);
        } else {
-               GprsMs *ms = bts_alloc_ms(bts);
+               GprsMs *ms = ms_alloc(bts);
                ms_set_egprs_ms_class(ms, chan_req.egprs_mslot_class);
                tbf = ms_new_ul_tbf_assigned_agch(ms);
                if (!tbf) {
@@ -1198,36 +1198,6 @@
        }
 }

-static void bts_ms_idle_cb(struct GprsMs *ms)
-{
-       bts_stat_item_dec(ms->bts, STAT_MS_PRESENT);
-       if (ms_is_idle(ms))
-               talloc_free(ms);
-}
-
-static void bts_ms_active_cb(struct GprsMs *ms)
-{
-       /* Nothing to do */
-}
-
-GprsMs *bts_alloc_ms(struct gprs_rlcmac_bts* bts)
-{
-       struct GprsMs *ms;
-
-       static struct gpr_ms_callback bts_ms_cb = {
-               .ms_idle = bts_ms_idle_cb,
-               .ms_active = bts_ms_active_cb,
-       };
-
-       ms = ms_alloc(bts);
-
-       ms_set_callback(ms, &bts_ms_cb);
-       ms_set_timeout(ms, osmo_tdef_get(bts->pcu->T_defs, -2030, OSMO_TDEF_S, 
-1));
-
-       bts_stat_item_inc(bts, STAT_MS_PRESENT);
-       return ms;
-}
-
 struct GprsMs *bts_get_ms(const struct gprs_rlcmac_bts *bts, uint32_t tlli, 
uint32_t old_tlli,
                          const char *imsi)
 {
diff --git a/src/bts.h b/src/bts.h
index 5644b44..7dd8547 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -285,7 +285,6 @@
        struct osmo_mobile_identity mi_imsi;
 };

-struct GprsMs *bts_alloc_ms(struct gprs_rlcmac_bts *bts);
 int bts_add_paging(struct gprs_rlcmac_bts *bts, const struct paging_req_cs 
*req, struct GprsMs *ms);

 uint32_t bts_rfn_to_fn(const struct gprs_rlcmac_bts *bts, uint32_t rfn);
diff --git a/src/gprs_ms.c b/src/gprs_ms.c
index 3e95103..b9a1b76 100644
--- a/src/gprs_ms.c
+++ b/src/gprs_ms.c
@@ -63,7 +63,8 @@

 void gprs_default_cb_ms_idle(struct GprsMs *ms)
 {
-       talloc_free(ms);
+       if (ms_is_idle(ms))
+               talloc_free(ms);
 }

 void gprs_default_cb_ms_active(struct GprsMs *ms)
@@ -111,6 +112,7 @@
        talloc_set_destructor(ms, ms_talloc_destructor);

        llist_add(&ms->list, &bts->ms_list);
+       bts_stat_item_inc(bts, STAT_MS_PRESENT);

        ms->bts = bts;
        ms->cb = gprs_default_cb;
@@ -147,6 +149,8 @@
        if (!ms->ctrs)
                goto free_ret;

+       ms_set_timeout(ms, osmo_tdef_get(bts->pcu->T_defs, -2030, OSMO_TDEF_S, 
-1));
+
        return ms;
 free_ret:
        talloc_free(ms);
@@ -159,6 +163,7 @@

        LOGPMS(ms, DRLCMAC, LOGL_INFO, "Destroying MS object\n");

+       bts_stat_item_dec(ms->bts, STAT_MS_PRESENT);
        llist_del(&ms->list);

        ms_set_reserved_slots(ms, NULL, 0, 0);
diff --git a/src/pdch.cpp b/src/pdch.cpp
index 43b3936..1c39ceb 100644
--- a/src/pdch.cpp
+++ b/src/pdch.cpp
@@ -665,7 +665,7 @@
                uint32_t tlli = request->ID.u.TLLI;
                ms = bts_get_ms_by_tlli(bts, tlli, GSM_RESERVED_TMSI);
                if (!ms) {
-                       ms = bts_alloc_ms(bts);
+                       ms = ms_alloc(bts);
                        ms_set_tlli(ms, tlli);
                }
        } else if (request->ID.u.Global_TFI.UnionType) { /* ID_TYPE = DL_TFI */
@@ -857,7 +857,7 @@
        if (!ms) {
                LOGPDCH(this, DRLCMAC, LOGL_NOTICE, "MS send measurement "
                        "but TLLI 0x%08x is unknown\n", report->TLLI);
-               ms = bts_alloc_ms(bts());
+               ms = ms_alloc(bts());
                ms_set_tlli(ms, report->TLLI);
        }
        if ((poll = pdch_ulc_get_node(ulc, fn))) {
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index cca059a..cdd703c 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -216,7 +216,7 @@
        }

        if (!ms)
-               ms = bts_alloc_ms(bts);
+               ms = ms_alloc(bts);
        if (imsi)
                ms_set_imsi(ms, imsi);
        ms_confirm_tlli(ms, tlli);
diff --git a/tests/alloc/AllocTest.cpp b/tests/alloc/AllocTest.cpp
index 4497fbd..cf1bba7 100644
--- a/tests/alloc/AllocTest.cpp
+++ b/tests/alloc/AllocTest.cpp
@@ -135,7 +135,7 @@
         * least this part is working okay.
         */
        for (i = 0; i < (int)ARRAY_SIZE(tbfs); ++i) {
-               ms = bts_alloc_ms(bts);
+               ms = ms_alloc(bts);
                tbfs[i] = tbf_alloc(bts, ms, dir, -1, 0);
                if (tbfs[i] == NULL)
                        break;
@@ -155,7 +155,7 @@
                if (tbfs[i])
                        tbf_free(tbfs[i]);

-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        tbfs[0] = tbf_alloc(bts, ms, dir, -1, 0);
        OSMO_ASSERT(tbfs[0]);
        tbf_free(tbfs[0]);
@@ -221,7 +221,7 @@

        enable_ts_on_bts(bts, ts0, ts1, ts2, ts3, ts4, ts5, ts6, ts7);

-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        ms_set_ms_class(ms, ms_class);
        /* Avoid delaying free to avoid tons of to-be-freed ms objects queuing 
*/
        ms_set_timeout(ms, 0);
@@ -264,7 +264,7 @@

        enable_ts_on_bts(bts, ts0, ts1, ts2, ts3, ts4, ts5, ts6, ts7);

-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        ms_set_ms_class(ms, ms_class);
        /* Avoid delaying free to avoid tons of to-be-freed ms objects queuing 
*/
        ms_set_timeout(ms, 0);
@@ -315,7 +315,7 @@

        tfi = bts_tfi_find_free(bts, GPRS_RLCMAC_UL_TBF, &trx_no, -1);
        OSMO_ASSERT(tfi >= 0);
-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        ms_set_ms_class(ms, ms_class);
        /* Avoid delaying free to avoid tons of to-be-freed ms objects queuing 
*/
        ms_set_timeout(ms, 0);
@@ -561,7 +561,7 @@

                ms = bts_get_ms_by_tlli(bts, tlli, GSM_RESERVED_TMSI);
                if (!ms)
-                       ms = bts_alloc_ms(bts);
+                       ms = ms_alloc(bts);
                ms_set_ms_class(ms, ms_class);
                ms = alloc_tbfs(bts, ms, mode);
                if (!ms)
@@ -770,7 +770,7 @@
        trx->pdch[6].enable();
        trx->pdch[7].enable();

-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        ms_set_ms_class(ms, ms_class);
        ms_set_egprs_ms_class(ms, egprs_ms_class);
        dl_tbf1 = dl_tbf_alloc(bts, ms, 0, false);
@@ -783,7 +783,7 @@
        OSMO_ASSERT(numTs1 == 4);
        printf("TBF1: numTs(%d)\n", numTs1);

-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        ms_set_ms_class(ms, ms_class);
        ms_set_egprs_ms_class(ms, egprs_ms_class);
        dl_tbf2 = dl_tbf_alloc(bts, ms, 0, false);
diff --git a/tests/app_info/AppInfoTest.cpp b/tests/app_info/AppInfoTest.cpp
index 1a4e660..ea84b20 100644
--- a/tests/app_info/AppInfoTest.cpp
+++ b/tests/app_info/AppInfoTest.cpp
@@ -90,11 +90,11 @@
        trx->pdch[6].enable();
        trx->pdch[7].enable();

-       ms1 = bts_alloc_ms(bts);
+       ms1 = ms_alloc(bts);
        ms_set_ms_class(ms1, 10);
        ms_set_egprs_ms_class(ms1, 11);
        tbf1 = dl_tbf_alloc(bts, ms1, 0, false);
-       ms2 = bts_alloc_ms(bts);
+       ms2 = ms_alloc(bts);
        ms_set_ms_class(ms2, 12);
        ms_set_egprs_ms_class(ms2, 13);
        tbf2 = dl_tbf_alloc(bts, ms2, 0, false);
@@ -162,7 +162,7 @@
        bts = gprs_pcu_get_bts_by_nr(the_pcu, 0);
        talloc_free(bts);

-       /* FIXME: talloc report disabled, because bts_alloc_ms(bts, ) in 
prepare_bts_with_two_dl_tbf_subscr() causes leak */
+       /* FIXME: talloc report disabled, because ms_alloc(bts, ) in 
prepare_bts_with_two_dl_tbf_subscr() causes leak */
        /* talloc_report_full(tall_pcu_ctx, stderr); */
        talloc_free(the_pcu);
        talloc_free(tall_pcu_ctx);
diff --git a/tests/llc/LlcTest.cpp b/tests/llc/LlcTest.cpp
index 3c19787..ee227f9 100644
--- a/tests/llc/LlcTest.cpp
+++ b/tests/llc/LlcTest.cpp
@@ -52,7 +52,7 @@
        the_pcu = gprs_pcu_alloc(tall_pcu_ctx);
        the_pcu->vty.llc_codel_interval_msec = LLC_CODEL_DISABLE;
        struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu, 0);
-       struct GprsMs *ms = bts_alloc_ms(bts);
+       struct GprsMs *ms = ms_alloc(bts);
        return ms_llc_queue(ms);
 }

@@ -235,7 +235,7 @@
        /* DEFAULT should be resolved to GPRS_CODEL_SLOW_INTERVAL_MS 4000 */
        #define GPRS_CODEL_SLOW_INTERVAL_MS 4000
        struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu, 0);
-       struct GprsMs *ms = bts_alloc_ms(bts);
+       struct GprsMs *ms = ms_alloc(bts);
        gprs_llc_queue *queue = ms_llc_queue(ms);
        unsigned int i;

@@ -297,7 +297,7 @@
 static void test_llc_merge()
 {
        gprs_llc_queue *queue1 = prepare_queue();
-       struct GprsMs *ms = bts_alloc_ms(queue1->ms->bts);
+       struct GprsMs *ms = ms_alloc(queue1->ms->bts);
        gprs_llc_queue *queue2 = ms_llc_queue(ms);
        struct timespec expire_time = {0};

diff --git a/tests/ms/MsTest.cpp b/tests/ms/MsTest.cpp
index 84cb52e..a8febd0 100644
--- a/tests/ms/MsTest.cpp
+++ b/tests/ms/MsTest.cpp
@@ -380,7 +380,7 @@
        if (ms)
                return ms;

-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);

        if (dir == GPRS_RLCMAC_UL_TBF)
                ms_set_tlli(ms, tlli);
diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp
index d493e6c..0f0960a 100644
--- a/tests/tbf/TbfTest.cpp
+++ b/tests/tbf/TbfTest.cpp
@@ -122,7 +122,7 @@
        /*
         * Make a uplink and downlink allocation
         */
-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        gprs_rlcmac_tbf *dl_tbf = dl_tbf_alloc(bts,
                                                ms, 0, false);
        OSMO_ASSERT(dl_tbf != NULL);
@@ -205,7 +205,7 @@
        GprsMs *ms;
        gprs_rlcmac_dl_tbf *dl_tbf;

-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        ms_set_ms_class(ms, ms_class);
        ms_set_egprs_ms_class(ms, egprs_ms_class);

@@ -2346,7 +2346,7 @@
        gprs_bssgp_init(bts, 4234, 4234, 1, 1, false, 0, 0, 0);

        /* Does no support EGPRS */
-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        ms_set_ms_class(ms, ms_class);
        dl_tbf = dl_tbf_alloc(bts, ms, 0, false);

@@ -2355,7 +2355,7 @@
        /* EGPRS-only */

        /* Does support EGPRS */
-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        ms_set_ms_class(ms, ms_class);
        ms_set_egprs_ms_class(ms, ms_class);
        dl_tbf = dl_tbf_alloc(bts, ms, 0, false);
@@ -2397,7 +2397,7 @@
        /* EGPRS-only */

        /* Does support EGPRS */
-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        ms_set_ms_class(ms, ms_class);
        ms_set_egprs_ms_class(ms, ms_class);
        dl_tbf = dl_tbf_alloc(bts, ms, 0, true);
@@ -2476,7 +2476,7 @@
        trx0->pdch[2].enable();
        trx0->pdch[3].enable();

-       second_ms = bts_alloc_ms(bts);
+       second_ms = ms_alloc(bts);
        ms_set_tlli(second_ms, new_tlli);
        ul_tbf = ul_tbf_alloc(bts, second_ms, 0, true);
        OSMO_ASSERT(ul_tbf != NULL);
@@ -3335,7 +3335,7 @@

        int rc = 0;

-       ms = bts_alloc_ms(bts);
+       ms = ms_alloc(bts);
        ms_set_tlli(ms, tlli);
        ul_tbf = ms_new_ul_tbf_rejected_pacch(ms, pdch);

diff --git a/tests/types/TypesTest.cpp b/tests/types/TypesTest.cpp
index 94fc980..91b7ce4 100644
--- a/tests/types/TypesTest.cpp
+++ b/tests/types/TypesTest.cpp
@@ -688,7 +688,7 @@
        the_pcu->alloc_algorithm = alloc_algorithm_a;
        bts->trx[0].pdch[4].enable();

-       GprsMs *ms = bts_alloc_ms(bts);
+       GprsMs *ms = ms_alloc(bts);
        ms_set_ms_class(ms, 1);
        ms_set_egprs_ms_class(ms, 1);
        struct gprs_rlcmac_ul_tbf *tbf = ul_tbf_alloc(bts, ms, 0, true);
@@ -781,7 +781,7 @@
        the_pcu->alloc_algorithm = alloc_algorithm_a;
        bts->trx[0].pdch[2].enable();
        bts->trx[0].pdch[3].enable();
-       GprsMs *ms = bts_alloc_ms(bts);
+       GprsMs *ms = ms_alloc(bts);
        ms_set_ms_class(ms, 1);

        struct gprs_rlcmac_tbf *tbf = dl_tbf_alloc(bts, ms, 0, false);
@@ -808,7 +808,7 @@
        bts->trx[0].pdch[4].enable();
        bts->trx[0].pdch[5].enable();

-       GprsMs *ms = bts_alloc_ms(bts);
+       GprsMs *ms = ms_alloc(bts);
        ms_set_ms_class(ms, 1);
        struct gprs_rlcmac_tbf *tbf = ul_tbf_alloc(bts, ms, 0, false);
        static uint8_t res[] = { 0x06,
@@ -851,7 +851,7 @@
        bts->trx[0].pdch[1].enable();
        bts->trx[0].pdch[2].enable();

-       GprsMs *ms = bts_alloc_ms(bts);
+       GprsMs *ms = ms_alloc(bts);
        ms_set_ms_class(ms, 1);
        ms_set_egprs_ms_class(ms, 1);
        struct gprs_rlcmac_tbf *tbf = ul_tbf_alloc(bts, ms, 0, false);

--
To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/32349
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Change-Id: I2a06d17588572a21dc5a14ddbde83766076b446d
Gerrit-Change-Number: 32349
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to