Change in osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2020-12-01 Thread laforge
laforge has abandoned this change. ( 
https://gerrit.osmocom.org/c/osmo-pcu/+/3150 )

Change subject: Move DL scheduling and RTS handler to trx level
..


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

Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Gerrit-Change-Number: 3150
Gerrit-PatchSet: 9
Gerrit-Owner: Max 
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge 
Gerrit-MessageType: abandon


osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2017-09-18 Thread Holger Freyther

Patch Set 9: Code-Review-1

Looks like a lot of churn in this iteration. Especially as we have trx->bts in 
many places. For moving UL/DL TBF into the trx. What corner cases do you 
expect? How do you solve them? Is there a high level approach for this branch?

E.g. how to make sure that UL and DL are allocated on the same TRX only? How is 
it balanced?  What is your plan for USF? Does it need to be unique per BTS or 
TRX?

-- 
To view, visit https://gerrit.osmocom.org/3150
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Gerrit-PatchSet: 9
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max 
Gerrit-Reviewer: Harald Welte 
Gerrit-Reviewer: Holger Freyther 
Gerrit-Reviewer: Jenkins Builder
Gerrit-HasComments: No


[PATCH] osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2017-09-04 Thread Max
Hello Harald Welte, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/3150

to look at the new patch set (#9).

Move DL scheduling and RTS handler to trx level

Use TRX object directly instead of BTS singleton and trx_no. This is
necessary to facilitate the move of UL/DL TBF lists to TRX level.

Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Related: OS#1541
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac.h
M src/gprs_rlcmac_sched.cpp
M src/pcu_l1_if.cpp
M src/tbf.cpp
M src/tbf.h
M tests/tbf/TbfTest.cpp
8 files changed, 66 insertions(+), 76 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/50/3150/9

diff --git a/src/bts.cpp b/src/bts.cpp
index b768569..5cf3d7c 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -1375,8 +1375,7 @@
egprs_ms_class, tlli, ta, ms);
 
if (!ul_tbf) {
-   handle_tbf_reject(bts_data(), ms, tlli,
-   trx_no(), ts_no);
+   handle_tbf_reject(get_trx(), ms, tlli, ts_no);
return;
}
 
diff --git a/src/bts.h b/src/bts.h
index d65cd2f..37e065e 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -92,7 +92,7 @@
gprs_rlcmac_bts *bts_data() const;
BTS *bts() const;
uint8_t trx_no() const;
-
+   gprs_rlcmac_trx *get_trx();
struct gprs_rlcmac_ul_tbf *ul_tbf_by_tfi(uint8_t tfi);
struct gprs_rlcmac_dl_tbf *dl_tbf_by_tfi(uint8_t tfi);
 
@@ -695,6 +695,11 @@
return trx->bts->bts_data();
 }
 
+inline gprs_rlcmac_trx *gprs_rlcmac_pdch::get_trx()
+{
+   return trx;
+}
+
 inline uint8_t gprs_rlcmac_pdch::trx_no() const
 {
return trx->trx_no;
diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index be1e686..3d825a8 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -89,9 +89,7 @@
 int gprs_rlcmac_paging_request(uint8_t *ptmsi, uint16_t ptmsi_len,
const char *imsi);
 
-int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts,
-uint32_t fn, uint8_t block_nr);
+int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_trx *trx, uint8_t ts, 
uint32_t fn, uint8_t block_nr);
 
 int gprs_alloc_max_dl_slots_per_ms(struct gprs_rlcmac_bts *bts,
uint8_t ms_class = 0);
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index 2350808..4585622 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -25,12 +25,10 @@
 
 #include "pcu_utils.h"
 
-static uint32_t sched_poll(BTS *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn, uint8_t block_nr,
-   struct gprs_rlcmac_tbf **poll_tbf,
-   struct gprs_rlcmac_tbf **ul_ass_tbf,
-   struct gprs_rlcmac_tbf **dl_ass_tbf,
-   struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
+static uint32_t sched_poll(struct gprs_rlcmac_trx *trx, uint8_t ts, uint32_t 
fn, uint8_t block_nr,
+  struct gprs_rlcmac_tbf **poll_tbf,
+  struct gprs_rlcmac_tbf **ul_ass_tbf, struct 
gprs_rlcmac_tbf **dl_ass_tbf,
+  struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
 {
struct gprs_rlcmac_ul_tbf *ul_tbf;
struct gprs_rlcmac_dl_tbf *dl_tbf;
@@ -42,11 +40,11 @@
if ((block_nr % 3) == 2)
poll_fn ++;
poll_fn = poll_fn % GSM_MAX_FN;
-   llist_for_each(pos, &bts->ul_tbfs()) {
+   llist_for_each(pos, &trx->bts->ul_tbfs()) {
ul_tbf = as_ul_tbf(pos->entry());
OSMO_ASSERT(ul_tbf);
/* this trx, this ts */
-   if (ul_tbf->trx->trx_no != trx || !ul_tbf->is_control_ts(ts))
+   if (ul_tbf->trx->trx_no != trx->trx_no || 
!ul_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (ul_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -63,11 +61,11 @@
 /* FIXME: Is this supposed to be fair? The last TBF for each wins? Maybe use 
llist_add_tail and skip once we have all
 states? */
}
-   llist_for_each(pos, &bts->dl_tbfs()) {
+   llist_for_each(pos, &trx->bts->dl_tbfs()) {
dl_tbf = as_dl_tbf(pos->entry());
OSMO_ASSERT(dl_tbf);
/* this trx, this ts */
-   if (dl_tbf->trx->trx_no != trx || !dl_tbf->is_control_ts(ts))
+   if (dl_tbf->trx->trx_no != trx->trx_no || 
!dl_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (dl_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -207,9 +205,8 @@
return NULL;
 }
 
-static struct msgb *sched_select_downlink(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn,
-   uint8_t block_nr, struct gprs_rlcmac_pdch *pdch)
+static struct msgb *sched_select_downlink(struct gprs_rlcmac_trx *trx, uint8_t 
t

osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2017-09-01 Thread Harald Welte

Patch Set 8: Code-Review+1

@Holger: Would you mind having a look at this? looks fine to me, but you 
requested that feature/ticket in the past, AFAIR.

-- 
To view, visit https://gerrit.osmocom.org/3150
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Gerrit-PatchSet: 8
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max 
Gerrit-Reviewer: Harald Welte 
Gerrit-Reviewer: Holger Freyther 
Gerrit-Reviewer: Jenkins Builder
Gerrit-HasComments: No


[PATCH] osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2017-08-14 Thread Max
Hello Harald Welte, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/3150

to look at the new patch set (#7).

Move DL scheduling and RTS handler to trx level

Use TRX object directly instead of BTS singleton and trx_no. This is
necessary to facilitate the move of UL/DL TBF lists to TRX level.

Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Related: OS#1541
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac.h
M src/gprs_rlcmac_sched.cpp
M src/pcu_l1_if.cpp
M src/tbf.cpp
M src/tbf.h
M tests/tbf/TbfTest.cpp
8 files changed, 58 insertions(+), 68 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/50/3150/7

diff --git a/src/bts.cpp b/src/bts.cpp
index add6ab3..ada8456 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -1375,8 +1375,7 @@
egprs_ms_class, tlli, ta, ms);
 
if (!ul_tbf) {
-   handle_tbf_reject(bts_data(), ms, tlli,
-   trx_no(), ts_no);
+   handle_tbf_reject(get_trx(), ms, tlli, ts_no);
return;
}
 
diff --git a/src/bts.h b/src/bts.h
index 1f1dae2..71dfb7b 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -91,7 +91,7 @@
gprs_rlcmac_bts *bts_data() const;
BTS *bts() const;
uint8_t trx_no() const;
-
+   gprs_rlcmac_trx *get_trx();
struct gprs_rlcmac_ul_tbf *ul_tbf_by_tfi(uint8_t tfi);
struct gprs_rlcmac_dl_tbf *dl_tbf_by_tfi(uint8_t tfi);
 
@@ -692,6 +692,11 @@
return trx->bts->bts_data();
 }
 
+inline gprs_rlcmac_trx *gprs_rlcmac_pdch::get_trx()
+{
+   return trx;
+}
+
 inline uint8_t gprs_rlcmac_pdch::trx_no() const
 {
return trx->trx_no;
diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index be1e686..3d825a8 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -89,9 +89,7 @@
 int gprs_rlcmac_paging_request(uint8_t *ptmsi, uint16_t ptmsi_len,
const char *imsi);
 
-int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts,
-uint32_t fn, uint8_t block_nr);
+int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_trx *trx, uint8_t ts, 
uint32_t fn, uint8_t block_nr);
 
 int gprs_alloc_max_dl_slots_per_ms(struct gprs_rlcmac_bts *bts,
uint8_t ms_class = 0);
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index 42f0308..af9c3bf 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -25,12 +25,10 @@
 
 #include "pcu_utils.h"
 
-static uint32_t sched_poll(BTS *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn, uint8_t block_nr,
-   struct gprs_rlcmac_tbf **poll_tbf,
-   struct gprs_rlcmac_tbf **ul_ass_tbf,
-   struct gprs_rlcmac_tbf **dl_ass_tbf,
-   struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
+static uint32_t sched_poll(struct gprs_rlcmac_trx *trx, uint8_t ts, uint32_t 
fn, uint8_t block_nr,
+  struct gprs_rlcmac_tbf **poll_tbf,
+  struct gprs_rlcmac_tbf **ul_ass_tbf, struct 
gprs_rlcmac_tbf **dl_ass_tbf,
+  struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
 {
struct gprs_rlcmac_ul_tbf *ul_tbf;
struct gprs_rlcmac_dl_tbf *dl_tbf;
@@ -42,11 +40,11 @@
if ((block_nr % 3) == 2)
poll_fn ++;
poll_fn = poll_fn % GSM_MAX_FN;
-   llist_for_each(pos, &bts->ul_tbfs()) {
+   llist_for_each(pos, &trx->bts->ul_tbfs()) {
ul_tbf = as_ul_tbf(pos->entry());
OSMO_ASSERT(ul_tbf);
/* this trx, this ts */
-   if (ul_tbf->trx->trx_no != trx || !ul_tbf->is_control_ts(ts))
+   if (ul_tbf->trx->trx_no != trx->trx_no || 
!ul_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (ul_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -62,11 +60,11 @@
*ul_ass_tbf = ul_tbf;
 #warning "Is this supposed to be fair? The last TBF for each wins? Maybe use 
llist_add_tail and skip once we have all states?"
}
-   llist_for_each(pos, &bts->dl_tbfs()) {
+   llist_for_each(pos, &trx->bts->dl_tbfs()) {
dl_tbf = as_dl_tbf(pos->entry());
OSMO_ASSERT(dl_tbf);
/* this trx, this ts */
-   if (dl_tbf->trx->trx_no != trx || !dl_tbf->is_control_ts(ts))
+   if (dl_tbf->trx->trx_no != trx->trx_no || 
!dl_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (dl_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -206,9 +204,8 @@
return NULL;
 }
 
-static struct msgb *sched_select_downlink(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn,
-   uint8_t block_nr, struct gprs_rlcmac_pdch *pdch)
+static struct msgb *sched_select_downl

[PATCH] osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2017-08-14 Thread Max
Hello Harald Welte, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/3150

to look at the new patch set (#6).

Move DL scheduling and RTS handler to trx level

Use TRX object directly instead of BTS singleton and trx_no. This is
necessary to facilitate the move of UL/DL TBF lists to TRX level.

Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Related: OS#1541
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac.h
M src/gprs_rlcmac_sched.cpp
M src/pcu_l1_if.cpp
M src/tbf.cpp
M src/tbf.h
M tests/tbf/TbfTest.cpp
8 files changed, 58 insertions(+), 68 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/50/3150/6

diff --git a/src/bts.cpp b/src/bts.cpp
index add6ab3..ada8456 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -1375,8 +1375,7 @@
egprs_ms_class, tlli, ta, ms);
 
if (!ul_tbf) {
-   handle_tbf_reject(bts_data(), ms, tlli,
-   trx_no(), ts_no);
+   handle_tbf_reject(get_trx(), ms, tlli, ts_no);
return;
}
 
diff --git a/src/bts.h b/src/bts.h
index 1f1dae2..71dfb7b 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -91,7 +91,7 @@
gprs_rlcmac_bts *bts_data() const;
BTS *bts() const;
uint8_t trx_no() const;
-
+   gprs_rlcmac_trx *get_trx();
struct gprs_rlcmac_ul_tbf *ul_tbf_by_tfi(uint8_t tfi);
struct gprs_rlcmac_dl_tbf *dl_tbf_by_tfi(uint8_t tfi);
 
@@ -692,6 +692,11 @@
return trx->bts->bts_data();
 }
 
+inline gprs_rlcmac_trx *gprs_rlcmac_pdch::get_trx()
+{
+   return trx;
+}
+
 inline uint8_t gprs_rlcmac_pdch::trx_no() const
 {
return trx->trx_no;
diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index be1e686..3d825a8 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -89,9 +89,7 @@
 int gprs_rlcmac_paging_request(uint8_t *ptmsi, uint16_t ptmsi_len,
const char *imsi);
 
-int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts,
-uint32_t fn, uint8_t block_nr);
+int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_trx *trx, uint8_t ts, 
uint32_t fn, uint8_t block_nr);
 
 int gprs_alloc_max_dl_slots_per_ms(struct gprs_rlcmac_bts *bts,
uint8_t ms_class = 0);
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index 42f0308..c5fbf84 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -25,12 +25,10 @@
 
 #include "pcu_utils.h"
 
-static uint32_t sched_poll(BTS *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn, uint8_t block_nr,
-   struct gprs_rlcmac_tbf **poll_tbf,
-   struct gprs_rlcmac_tbf **ul_ass_tbf,
-   struct gprs_rlcmac_tbf **dl_ass_tbf,
-   struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
+static uint32_t sched_poll(struct gprs_rlcmac_trx *trx, uint8_t ts, uint32_t 
fn, uint8_t block_nr,
+  struct gprs_rlcmac_tbf **poll_tbf,
+  struct gprs_rlcmac_tbf **ul_ass_tbf, struct 
gprs_rlcmac_tbf **dl_ass_tbf,
+  struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
 {
struct gprs_rlcmac_ul_tbf *ul_tbf;
struct gprs_rlcmac_dl_tbf *dl_tbf;
@@ -42,11 +40,11 @@
if ((block_nr % 3) == 2)
poll_fn ++;
poll_fn = poll_fn % GSM_MAX_FN;
-   llist_for_each(pos, &bts->ul_tbfs()) {
+   llist_for_each(pos, &trx->bts->ul_tbfs()) {
ul_tbf = as_ul_tbf(pos->entry());
OSMO_ASSERT(ul_tbf);
/* this trx, this ts */
-   if (ul_tbf->trx->trx_no != trx || !ul_tbf->is_control_ts(ts))
+   if (ul_tbf->trx->trx_no != trx->trx_no || 
!ul_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (ul_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -62,11 +60,11 @@
*ul_ass_tbf = ul_tbf;
 #warning "Is this supposed to be fair? The last TBF for each wins? Maybe use 
llist_add_tail and skip once we have all states?"
}
-   llist_for_each(pos, &bts->dl_tbfs()) {
+   llist_for_each(pos, &trx->bts->dl_tbfs()) {
dl_tbf = as_dl_tbf(pos->entry());
OSMO_ASSERT(dl_tbf);
/* this trx, this ts */
-   if (dl_tbf->trx->trx_no != trx || !dl_tbf->is_control_ts(ts))
+   if (dl_tbf->trx->trx_no != trx->trx_no || 
!dl_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (dl_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -206,9 +204,8 @@
return NULL;
 }
 
-static struct msgb *sched_select_downlink(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn,
-   uint8_t block_nr, struct gprs_rlcmac_pdch *pdch)
+static struct msgb *sched_select_downl

[PATCH] osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2017-08-14 Thread Max
Hello Harald Welte, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/3150

to look at the new patch set (#5).

Move DL scheduling and RTS handler to trx level

Use TRX object directly instead of BTS singleton and trx_no. This is
necessary to facilitate the move of UL/DL TBF lists to TRX level.

Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Related: OS#1541
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac.h
M src/gprs_rlcmac_sched.cpp
M src/pcu_l1_if.cpp
M src/tbf.cpp
M src/tbf.h
M tests/tbf/TbfTest.cpp
8 files changed, 58 insertions(+), 68 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/50/3150/5

diff --git a/src/bts.cpp b/src/bts.cpp
index add6ab3..ada8456 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -1375,8 +1375,7 @@
egprs_ms_class, tlli, ta, ms);
 
if (!ul_tbf) {
-   handle_tbf_reject(bts_data(), ms, tlli,
-   trx_no(), ts_no);
+   handle_tbf_reject(get_trx(), ms, tlli, ts_no);
return;
}
 
diff --git a/src/bts.h b/src/bts.h
index 1f1dae2..71dfb7b 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -91,7 +91,7 @@
gprs_rlcmac_bts *bts_data() const;
BTS *bts() const;
uint8_t trx_no() const;
-
+   gprs_rlcmac_trx *get_trx();
struct gprs_rlcmac_ul_tbf *ul_tbf_by_tfi(uint8_t tfi);
struct gprs_rlcmac_dl_tbf *dl_tbf_by_tfi(uint8_t tfi);
 
@@ -692,6 +692,11 @@
return trx->bts->bts_data();
 }
 
+inline gprs_rlcmac_trx *gprs_rlcmac_pdch::get_trx()
+{
+   return trx;
+}
+
 inline uint8_t gprs_rlcmac_pdch::trx_no() const
 {
return trx->trx_no;
diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index be1e686..3d825a8 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -89,9 +89,7 @@
 int gprs_rlcmac_paging_request(uint8_t *ptmsi, uint16_t ptmsi_len,
const char *imsi);
 
-int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts,
-uint32_t fn, uint8_t block_nr);
+int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_trx *trx, uint8_t ts, 
uint32_t fn, uint8_t block_nr);
 
 int gprs_alloc_max_dl_slots_per_ms(struct gprs_rlcmac_bts *bts,
uint8_t ms_class = 0);
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index 42f0308..007fb79 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -25,12 +25,10 @@
 
 #include "pcu_utils.h"
 
-static uint32_t sched_poll(BTS *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn, uint8_t block_nr,
-   struct gprs_rlcmac_tbf **poll_tbf,
-   struct gprs_rlcmac_tbf **ul_ass_tbf,
-   struct gprs_rlcmac_tbf **dl_ass_tbf,
-   struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
+static uint32_t sched_poll(struct gprs_rlcmac_trx *trx, uint8_t ts, uint32_t 
fn, uint8_t block_nr,
+  struct gprs_rlcmac_tbf **poll_tbf,
+  struct gprs_rlcmac_tbf **ul_ass_tbf, struct 
gprs_rlcmac_tbf **dl_ass_tbf,
+  struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
 {
struct gprs_rlcmac_ul_tbf *ul_tbf;
struct gprs_rlcmac_dl_tbf *dl_tbf;
@@ -42,11 +40,11 @@
if ((block_nr % 3) == 2)
poll_fn ++;
poll_fn = poll_fn % GSM_MAX_FN;
-   llist_for_each(pos, &bts->ul_tbfs()) {
+   llist_for_each(pos, &trx->bts->ul_tbfs()) {
ul_tbf = as_ul_tbf(pos->entry());
OSMO_ASSERT(ul_tbf);
/* this trx, this ts */
-   if (ul_tbf->trx->trx_no != trx || !ul_tbf->is_control_ts(ts))
+   if (ul_tbf->trx->trx_no != trx->trx_no || 
!ul_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (ul_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -62,11 +60,11 @@
*ul_ass_tbf = ul_tbf;
 #warning "Is this supposed to be fair? The last TBF for each wins? Maybe use 
llist_add_tail and skip once we have all states?"
}
-   llist_for_each(pos, &bts->dl_tbfs()) {
+   llist_for_each(pos, &trx->bts->dl_tbfs()) {
dl_tbf = as_dl_tbf(pos->entry());
OSMO_ASSERT(dl_tbf);
/* this trx, this ts */
-   if (dl_tbf->trx->trx_no != trx || !dl_tbf->is_control_ts(ts))
+   if (dl_tbf->trx->trx_no != trx->trx_no || 
!dl_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (dl_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -206,9 +204,8 @@
return NULL;
 }
 
-static struct msgb *sched_select_downlink(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn,
-   uint8_t block_nr, struct gprs_rlcmac_pdch *pdch)
+static struct msgb *sched_select_downl

osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2017-08-09 Thread Harald Welte

Patch Set 4: Code-Review+2

-- 
To view, visit https://gerrit.osmocom.org/3150
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Gerrit-PatchSet: 4
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max 
Gerrit-Reviewer: Harald Welte 
Gerrit-Reviewer: Jenkins Builder
Gerrit-HasComments: No


osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2017-07-08 Thread Harald Welte

Patch Set 2: Code-Review+1

-- 
To view, visit https://gerrit.osmocom.org/3150
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Gerrit-PatchSet: 2
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max 
Gerrit-Reviewer: Harald Welte 
Gerrit-Reviewer: Jenkins Builder
Gerrit-HasComments: No


[PATCH] osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2017-07-07 Thread Max
Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/3150

to look at the new patch set (#2).

Move DL scheduling and RTS handler to trx level

Use TRX object directly instead of BTS singleton and trx_no. This is
necessary to facilitate the move of UL/DL TBF lists to TRX level.

Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Related: OS#1541
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac.h
M src/gprs_rlcmac_sched.cpp
M src/pcu_l1_if.cpp
M src/tbf.cpp
M src/tbf.h
M tests/tbf/TbfTest.cpp
8 files changed, 55 insertions(+), 65 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/50/3150/2

diff --git a/src/bts.cpp b/src/bts.cpp
index 1d27284..e66699f 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -1425,8 +1425,7 @@
egprs_ms_class, tlli, ta, ms);
 
if (!ul_tbf) {
-   handle_tbf_reject(bts_data(), ms, tlli,
-   trx_no(), ts_no);
+   handle_tbf_reject(get_trx(), ms, tlli, ts_no);
return;
}
 
diff --git a/src/bts.h b/src/bts.h
index 78ed002..7983fa2 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -76,7 +76,7 @@
gprs_rlcmac_bts *bts_data() const;
BTS *bts() const;
uint8_t trx_no() const;
-
+   gprs_rlcmac_trx *get_trx();
struct gprs_rlcmac_ul_tbf *ul_tbf_by_tfi(uint8_t tfi);
struct gprs_rlcmac_dl_tbf *dl_tbf_by_tfi(uint8_t tfi);
 
@@ -671,6 +671,11 @@
return trx->bts->bts_data();
 }
 
+inline gprs_rlcmac_trx *gprs_rlcmac_pdch::get_trx()
+{
+   return trx;
+}
+
 inline uint8_t gprs_rlcmac_pdch::trx_no() const
 {
return trx->trx_no;
diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index be1e686..3d825a8 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -89,9 +89,7 @@
 int gprs_rlcmac_paging_request(uint8_t *ptmsi, uint16_t ptmsi_len,
const char *imsi);
 
-int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts,
-uint32_t fn, uint8_t block_nr);
+int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_trx *trx, uint8_t ts, 
uint32_t fn, uint8_t block_nr);
 
 int gprs_alloc_max_dl_slots_per_ms(struct gprs_rlcmac_bts *bts,
uint8_t ms_class = 0);
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index a21c023..a8392cb 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -25,12 +25,10 @@
 
 #include "pcu_utils.h"
 
-static uint32_t sched_poll(BTS *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn, uint8_t block_nr,
-   struct gprs_rlcmac_tbf **poll_tbf,
-   struct gprs_rlcmac_tbf **ul_ass_tbf,
-   struct gprs_rlcmac_tbf **dl_ass_tbf,
-   struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
+static uint32_t sched_poll(struct gprs_rlcmac_trx *trx, uint8_t ts, uint32_t 
fn, uint8_t block_nr,
+  struct gprs_rlcmac_tbf **poll_tbf,
+  struct gprs_rlcmac_tbf **ul_ass_tbf, struct 
gprs_rlcmac_tbf **dl_ass_tbf,
+  struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
 {
struct gprs_rlcmac_ul_tbf *ul_tbf;
struct gprs_rlcmac_dl_tbf *dl_tbf;
@@ -42,11 +40,11 @@
if ((block_nr % 3) == 2)
poll_fn ++;
poll_fn = poll_fn % GSM_MAX_FN;
-   llist_for_each(pos, &bts->ul_tbfs()) {
+   llist_for_each(pos, &trx->bts->ul_tbfs()) {
ul_tbf = as_ul_tbf(pos->entry());
OSMO_ASSERT(ul_tbf);
/* this trx, this ts */
-   if (ul_tbf->trx->trx_no != trx || !ul_tbf->is_control_ts(ts))
+   if (ul_tbf->trx->trx_no != trx->trx_no || 
!ul_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (ul_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -62,11 +60,11 @@
*ul_ass_tbf = ul_tbf;
 #warning "Is this supposed to be fair? The last TBF for each wins? Maybe use 
llist_add_tail and skip once we have all states?"
}
-   llist_for_each(pos, &bts->dl_tbfs()) {
+   llist_for_each(pos, &trx->bts->dl_tbfs()) {
dl_tbf = as_dl_tbf(pos->entry());
OSMO_ASSERT(dl_tbf);
/* this trx, this ts */
-   if (dl_tbf->trx->trx_no != trx || !dl_tbf->is_control_ts(ts))
+   if (dl_tbf->trx->trx_no != trx->trx_no || 
!dl_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (dl_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -206,9 +204,8 @@
return NULL;
 }
 
-static struct msgb *sched_select_downlink(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn,
-   uint8_t block_nr, struct gprs_rlcmac_pdch *pdch)
+static struct msgb *sched_select_downlink(struct gpr

[PATCH] osmo-pcu[master]: Move DL scheduling and RTS handler to trx level

2017-07-06 Thread Max

Review at  https://gerrit.osmocom.org/3150

Move DL scheduling and RTS handler to trx level

Use TRX object directly instead of BTS singleton and trx_no.

Change-Id: Ia176245647c19fa1551fb6f5c8225b2529f73cbf
Related: OS#1541
---
M src/gprs_rlcmac.h
M src/gprs_rlcmac_sched.cpp
M src/pcu_l1_if.cpp
M tests/tbf/TbfTest.cpp
4 files changed, 42 insertions(+), 51 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/50/3150/1

diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index be1e686..3d825a8 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -89,9 +89,7 @@
 int gprs_rlcmac_paging_request(uint8_t *ptmsi, uint16_t ptmsi_len,
const char *imsi);
 
-int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts,
-uint32_t fn, uint8_t block_nr);
+int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_trx *trx, uint8_t ts, 
uint32_t fn, uint8_t block_nr);
 
 int gprs_alloc_max_dl_slots_per_ms(struct gprs_rlcmac_bts *bts,
uint8_t ms_class = 0);
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index a21c023..a8392cb 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -25,12 +25,10 @@
 
 #include "pcu_utils.h"
 
-static uint32_t sched_poll(BTS *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn, uint8_t block_nr,
-   struct gprs_rlcmac_tbf **poll_tbf,
-   struct gprs_rlcmac_tbf **ul_ass_tbf,
-   struct gprs_rlcmac_tbf **dl_ass_tbf,
-   struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
+static uint32_t sched_poll(struct gprs_rlcmac_trx *trx, uint8_t ts, uint32_t 
fn, uint8_t block_nr,
+  struct gprs_rlcmac_tbf **poll_tbf,
+  struct gprs_rlcmac_tbf **ul_ass_tbf, struct 
gprs_rlcmac_tbf **dl_ass_tbf,
+  struct gprs_rlcmac_ul_tbf **ul_ack_tbf)
 {
struct gprs_rlcmac_ul_tbf *ul_tbf;
struct gprs_rlcmac_dl_tbf *dl_tbf;
@@ -42,11 +40,11 @@
if ((block_nr % 3) == 2)
poll_fn ++;
poll_fn = poll_fn % GSM_MAX_FN;
-   llist_for_each(pos, &bts->ul_tbfs()) {
+   llist_for_each(pos, &trx->bts->ul_tbfs()) {
ul_tbf = as_ul_tbf(pos->entry());
OSMO_ASSERT(ul_tbf);
/* this trx, this ts */
-   if (ul_tbf->trx->trx_no != trx || !ul_tbf->is_control_ts(ts))
+   if (ul_tbf->trx->trx_no != trx->trx_no || 
!ul_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (ul_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -62,11 +60,11 @@
*ul_ass_tbf = ul_tbf;
 #warning "Is this supposed to be fair? The last TBF for each wins? Maybe use 
llist_add_tail and skip once we have all states?"
}
-   llist_for_each(pos, &bts->dl_tbfs()) {
+   llist_for_each(pos, &trx->bts->dl_tbfs()) {
dl_tbf = as_dl_tbf(pos->entry());
OSMO_ASSERT(dl_tbf);
/* this trx, this ts */
-   if (dl_tbf->trx->trx_no != trx || !dl_tbf->is_control_ts(ts))
+   if (dl_tbf->trx->trx_no != trx->trx_no || 
!dl_tbf->is_control_ts(ts))
continue;
/* polling for next uplink block */
if (dl_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED
@@ -206,9 +204,8 @@
return NULL;
 }
 
-static struct msgb *sched_select_downlink(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts, uint32_t fn,
-   uint8_t block_nr, struct gprs_rlcmac_pdch *pdch)
+static struct msgb *sched_select_downlink(struct gprs_rlcmac_trx *trx, uint8_t 
ts, uint32_t fn, uint8_t block_nr,
+ struct gprs_rlcmac_pdch *pdch)
 {
struct msgb *msg = NULL;
struct gprs_rlcmac_dl_tbf *tbf, *prio_tbf = NULL;
@@ -225,7 +222,7 @@
int age;
const int age_thresh1 = msecs_to_frames(200);
const int high_prio_msecs =
-   OSMO_MIN(BTS::TIMER_T3190_MSEC/2, bts->dl_tbf_idle_msec);
+   OSMO_MIN(BTS::TIMER_T3190_MSEC/2, 
trx->bts->bts_data()->dl_tbf_idle_msec);
const int age_thresh2 = msecs_to_frames(high_prio_msecs);
 
/* select downlink resource */
@@ -277,7 +274,7 @@
if (prio_tbf) {
LOGP(DRLCMACSCHED, LOGL_DEBUG, "Scheduling data message at "
"RTS for DL TFI=%d (TRX=%d, TS=%d) prio=%d\n",
-   prio_tfi, trx, ts, max_prio);
+   prio_tfi, trx->trx_no, ts, max_prio);
/* next TBF to handle resource is the next one */
pdch->next_dl_tfi = (prio_tfi + 1) & 31;
/* generate DL data block */
@@ -307,9 +304,7 @@
return msg;
 }
 
-int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
-   uint8_t trx, uint8_t ts,
-uint32_t fn, uint8_t block_nr)
+in