fixes for UE removal (update linked lists) searching of UE lists in schedule_SR/SRS/CSI
This commit is contained in:
@@ -108,8 +108,8 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
|
||||
|
||||
if((1<<tmp) & deltaTSFC) {
|
||||
// This is an SRS subframe, loop over UEs
|
||||
for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) {
|
||||
|
||||
for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
|
||||
if (RC.mac[module_idP]->UE_list.active[UE_id]!=TRUE) continue;
|
||||
ul_req = &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body;
|
||||
|
||||
|
||||
@@ -161,7 +161,8 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
|
||||
cc = &eNB->common_channels[CC_id];
|
||||
for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) {
|
||||
for (UE_id=0; UE_id < NUMBER_OF_UE_MAX; UE_id++) {
|
||||
if (UE_list->active[UE_id] != TRUE) continue;
|
||||
|
||||
ul_req = &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body;
|
||||
|
||||
@@ -231,7 +232,8 @@ void schedule_SR(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
||||
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
||||
RC.mac[module_idP]->UL_req[CC_id].sfn_sf = (frameP << 4) + subframeP;
|
||||
|
||||
for (UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
||||
for (UE_id = 0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
|
||||
if (RC.mac[module_idP]->UE_list.active[UE_id]!=TRUE) continue;
|
||||
|
||||
ul_req = &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body;
|
||||
|
||||
|
||||
@@ -1766,6 +1766,11 @@ int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP)
|
||||
UE_list->active[UE_id] = FALSE;
|
||||
UE_list->num_UEs--;
|
||||
|
||||
if (UE_list->head == UE_id) UE_list->head=UE_list->next[UE_id];
|
||||
else UE_list->next[prev(UE_list,UE_id,0)]=UE_list->next[UE_id];
|
||||
if (UE_list->head_ul == UE_id) UE_list->head_ul=UE_list->next_ul[UE_id];
|
||||
else UE_list->next_ul[prev(UE_list,UE_id,0)]=UE_list->next_ul[UE_id];
|
||||
|
||||
// clear all remaining pending transmissions
|
||||
UE_list->UE_template[pCC_id][UE_id].bsr_info[LCGID0] = 0;
|
||||
UE_list->UE_template[pCC_id][UE_id].bsr_info[LCGID1] = 0;
|
||||
|
||||
@@ -398,11 +398,11 @@ void sort_UEs (module_id_t Mod_idP,
|
||||
UE_list_t *UE_list = &RC.mac[Mod_idP]->UE_list;
|
||||
|
||||
for (i = 0; i < NUMBER_OF_UE_MAX; i++) {
|
||||
rnti = UE_RNTI(Mod_idP, i);
|
||||
if (rnti == NOT_A_RNTI)
|
||||
continue;
|
||||
if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1)
|
||||
continue;
|
||||
|
||||
if (UE_list->active[i]==FALSE) continue;
|
||||
if ((rnti = UE_RNTI(Mod_idP, i)) == NOT_A_RNTI) continue;
|
||||
if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) continue;
|
||||
|
||||
list[list_size] = i;
|
||||
list_size++;
|
||||
}
|
||||
@@ -1453,11 +1453,9 @@ void sort_ue_ul (module_id_t module_idP,int frameP, sub_frame_t subframeP)
|
||||
UE_list_t *UE_list = &RC.mac[module_idP]->UE_list;
|
||||
|
||||
for (i = 0; i < NUMBER_OF_UE_MAX; i++) {
|
||||
rnti = UE_RNTI(module_idP, i);
|
||||
if (rnti == NOT_A_RNTI)
|
||||
continue;
|
||||
if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1)
|
||||
continue;
|
||||
if (UE_list->active[i] == FALSE) continue;
|
||||
if ((rnti = UE_RNTI(module_idP, i)) == NOT_A_RNTI) continue;
|
||||
if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) continue;
|
||||
|
||||
list[list_size] = i;
|
||||
list_size++;
|
||||
|
||||
Reference in New Issue
Block a user