diff options
-rw-r--r-- | src/gprs_rlcmac_sched.cpp | 1 | ||||
-rw-r--r-- | src/tbf.cpp | 9 | ||||
-rw-r--r-- | src/tbf.h | 3 |
3 files changed, 13 insertions, 0 deletions
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp index 690be308..a3211ee2 100644 --- a/src/gprs_rlcmac_sched.cpp +++ b/src/gprs_rlcmac_sched.cpp @@ -133,6 +133,7 @@ static struct msgb *sched_select_ctrl_msg(struct gprs_rlcmac_bts *bts, } /* any message */ if (msg) { + tbf->rotate_in_list(); LOGP(DRLCMACSCHED, LOGL_DEBUG, "Scheduling control " "message at RTS for %s (TRX=%d, TS=%d)\n", tbf_name(tbf), trx, ts); diff --git a/src/tbf.cpp b/src/tbf.cpp index 88d4662f..e882e1fb 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -1742,3 +1742,12 @@ bool gprs_rlcmac_tbf::dl_window_stalled() const { return dir.dl.window.window_stalled(); } + +void gprs_rlcmac_tbf::rotate_in_list() +{ + llist_del(&list); + if (direction == GPRS_RLCMAC_UL_TBF) + llist_add(&list, &bts->bts_data()->ul_tbfs); + else + llist_add(&list, &bts->bts_data()->dl_tbfs); +} @@ -135,6 +135,9 @@ struct gprs_rlcmac_tbf { uint16_t sns() const; + /* attempt to make things a bit more fair */ + void rotate_in_list(); + struct llist_head list; uint32_t state_flags; enum gprs_rlcmac_tbf_direction direction; |