diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index e83a8ef4362f97f7f1c64510073008b2bff93d52..75bdefa747268548c70c3498f4237538d36e1a72 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -1033,7 +1033,8 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, __FILE__, __LINE__); } - + + /* This schedules UCI_SR in subframeP */ schedule_SR(module_idP, frameP, subframeP); /* This schedules UCI_CSI in subframeP */ diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index 1f99f50ece2019987b4b2e47dd8fe7bd68a46201..4ec72a0f3154564dd40c76f0210f6c565ea7a10a 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -509,7 +509,7 @@ schedule_dlsch(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP, in continue; break; } - } + } if (mbsfn_flag[CC_id] != 0) continue; @@ -570,6 +570,7 @@ schedule_ue_spec(module_id_t module_idP, // CALLING Pre_Processor for downlink scheduling // (Returns estimation of RBs required by each UE and the allocation on sub-band) + // per SubFrame VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR, VCD_FUNCTION_IN); start_meas(&eNB->schedule_dlsch_preprocessor); @@ -579,7 +580,7 @@ schedule_ue_spec(module_id_t module_idP, VCD_FUNCTION_OUT); for (int UE_id = UE_info->list.head; UE_id >= 0; UE_id = UE_info->list.next[UE_id]) { - LOG_D(MAC, "doing schedule_ue_spec for CC_id %d UE %d\n", + LOG_D(MAC, "[%d.%d]doing schedule_ue_spec for CC_id %d UE %d\n",frameP, subframeP, CC_id, UE_id); UE_sched_ctrl_t *ue_sched_ctrl = &UE_info->UE_sched_ctrl[UE_id]; diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c index 81341da68f35e759d02aaab5980b6aed1b7f9e5d..83136a1d7b2443774a9a0457b327e0a707fc7567 100644 --- a/openair2/LAYER2/MAC/pre_processor.c +++ b/openair2/LAYER2/MAC/pre_processor.c @@ -107,7 +107,7 @@ int rr_dl_run(module_id_t Mod_id, int rbg = 0; for (; !rbgalloc_mask[rbg]; rbg++) ; /* fast-forward to first allowed RBG */ - + /* just start with the UE after the one we had last time. If it does not * exist, this will start at the head */ int *start_ue = data; @@ -194,6 +194,8 @@ skip_ue: max_num_ue = min(max_num_ue, n_rbg_sched); int rb_required[MAX_MOBILES_PER_ENB]; // how much UEs request cur_UE = &UE_sched.head; + LOG_I(MAC, "%d.%d debug: before compute [UE], \n",frame,subframe); + while (*cur_UE >= 0 && max_num_ue > 0) { const int UE_id = *cur_UE; cur_UE = &UE_sched.next[UE_id]; // go to next @@ -212,15 +214,18 @@ skip_ue: rb_required[UE_id] = find_nb_rb_DL(mcs, B, n_rbg_sched * RBGsize, RBGsize); subframe_t.rnti[UE_id] = rnti; subframe_t.ammount[UE_id] = rb_required[UE_id]; + LOG_I(MAC, "debug: compute for UE %d, \n", subframe_t.ammount[UE_id]); max_num_ue--; } *cur_UE = -1; // not all UEs might be allocated, mark end /* for one UE after the next: allocate resources */ + LOG_I(MAC, "%d.%d debug: before allocated [UE], \n",frame,subframe); + cur_UE = &UE_sched.head; while (*cur_UE >= 0) { - printf("debug: 222@openair2/LAYER2/MAC/pre_processor.c \n",*cur_UE); const int UE_id = *cur_UE; + LOG_I(MAC, "%d.%d debug: allocate for [UE %d], \n",frame,subframe ,UE_id); UE_sched_ctrl_t *ue_ctrl = &UE_info->UE_sched_ctrl[UE_id]; ue_ctrl->rballoc_sub_UE[CC_id][rbg] = 1;//璇ユ杞缁� *** rbgalloc_mask[rbg] = 0;//璇BG宸插垎閰� @@ -239,6 +244,7 @@ skip_ue: break;//濡傛灉璇ユ璋冨害鎵€鏈夌殑rbg鍧囪鍒嗛厤锛屽垯璺冲嚭璧勬簮鍒嗛厤 for (rbg++; !rbgalloc_mask[rbg]; rbg++) /* fast-forward */ ; } + LOG_I(MAC, "debug: end \n"); return n_rbg_sched; //* 鍒嗛厤鐨勭粨鏋滐細灏嗙粨鏋滈兘瀛樺偍鍒颁簡 ue_ctrl->rballoc_sub_UE[CC_id][rbg] 涔嬩腑!!!锛屾渶鍚庢墍鏈塺bg閮藉垎閰� @@ -666,7 +672,7 @@ dlsch_scheduler_pre_processor(module_id_t Mod_id, for (int i = 0; i < MAX_MOBILES_PER_ENB; ++i) UE_to_sched.next[i] = -1; int *cur = &UE_to_sched.head; - + //init UE_to_sched for (int UE_id = UE_info->list.head; UE_id >= 0; UE_id = UE_info->list.next[UE_id]) { UE_sched_ctrl_t *ue_sched_ctrl = &UE_info->UE_sched_ctrl[UE_id]; const UE_TEMPLATE *ue_template = &UE_info->UE_template[CC_id][UE_id]; @@ -704,7 +710,6 @@ dlsch_scheduler_pre_processor(module_id_t Mod_id, } *cur = -1; //debug : 鏌ョ湅鏃犳暟鎹紶閫佹椂璋冨害濡備綍鍙栨秷锛� - printf("debug : 707@/root/oai/openairinterface5g/openair2/LAYER2/MAC/pre_processor.c"); if (UE_to_sched.head < 0) return; @@ -719,8 +724,7 @@ dlsch_scheduler_pre_processor(module_id_t Mod_id, rbgalloc_mask[i] &= !vrb_map[RBGsize * i + j]; n_rbg_sched += rbgalloc_mask[i]; } - printf("debug : 721@/root/oai/openairinterface5g/openair2/LAYER2/MAC/pre_processor.c"); - + //perSubframe if any UE connected mac->pre_processor_dl.dl_algo.run(Mod_id, CC_id, frameP, @@ -731,6 +735,7 @@ dlsch_scheduler_pre_processor(module_id_t Mod_id, rbgalloc_mask, mac->pre_processor_dl.dl_algo.data); + // the following block is meant for validation of the pre-processor to check // whether all UE allocations are non-overlapping and is not necessary for // scheduling functionality @@ -749,7 +754,7 @@ dlsch_scheduler_pre_processor(module_id_t Mod_id, continue; LOG_I(MAC, - "%4d.%d UE%d %d RBs allocated, pre MCS %d\n", + "debug %4d.%d UE%d %d RBs allocated, pre MCS %d\n", frameP, subframeP, UE_id, @@ -763,8 +768,8 @@ dlsch_scheduler_pre_processor(module_id_t Mod_id, continue; for (int j = 0; j < RBGsize; j++) { if (vrb_map[RBGsize*i+j] != 0) { - LOG_I(MAC, "%4d.%d DL scheduler allocation list: %s\n", frameP, subframeP, t); - LOG_E(MAC, "%4d.%d: UE %d allocated at locked RB %d/RBG %d\n", frameP, + LOG_I(MAC, " %4d.%d DL scheduler allocation list: %s\n", frameP, subframeP, t); + LOG_E(MAC, " %4d.%d: UE %d allocated at locked RB %d/RBG %d\n", frameP, subframeP, UE_id, RBGsize * i + j, i); } vrb_map[RBGsize*i+j] = 1; @@ -773,7 +778,7 @@ dlsch_scheduler_pre_processor(module_id_t Mod_id, } } if (print) - LOG_I(MAC, "%4d.%d DL scheduler allocation list: %s\n", frameP, subframeP, t); + LOG_I(MAC, " %4d.%d DL scheduler allocation list: %s\n", frameP, subframeP, t); //#endif }