From 9f26028ded0201efb7906c682568eb1519f4eb12 Mon Sep 17 00:00:00 2001
From: Robert Schmidt <robert.schmidt@eurecom.fr>
Date: Tue, 23 Jun 2020 10:27:45 +0200
Subject: [PATCH] Default pre-processor: efficiently build UE list

---
 openair2/LAYER2/MAC/pre_processor.c | 27 ++++++++-------------------
 1 file changed, 8 insertions(+), 19 deletions(-)

diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c
index 72455f7125..5eb27699be 100644
--- a/openair2/LAYER2/MAC/pre_processor.c
+++ b/openair2/LAYER2/MAC/pre_processor.c
@@ -635,12 +635,10 @@ dlsch_scheduler_pre_processor(module_id_t Mod_id,
   store_dlsch_buffer(Mod_id, CC_id, frameP, subframeP);
 
   UE_list_t UE_to_sched;
-  UE_to_sched.head = -1;
   for (int i = 0; i < MAX_MOBILES_PER_ENB; ++i)
     UE_to_sched.next[i] = -1;
+  int *cur = &UE_to_sched.head;
 
-  int first = 1;
-  int last_UE_id = -1;
   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];
@@ -673,15 +671,10 @@ dlsch_scheduler_pre_processor(module_id_t Mod_id,
     }
 
     /* define UEs to schedule */
-    if (first) {
-      first = 0;
-      UE_to_sched.head = UE_id;
-    } else {
-      UE_to_sched.next[last_UE_id] = UE_id;
-    }
-    UE_to_sched.next[UE_id] = -1;
-    last_UE_id = UE_id;
+    *cur = UE_id;
+    cur = &UE_to_sched.next[UE_id];
   }
+  *cur = -1;
 
   if (UE_to_sched.head < 0)
     return;
@@ -1085,11 +1078,10 @@ void ulsch_scheduler_pre_processor(module_id_t Mod_id,
   COMMON_channels_t *cc = &mac->common_channels[CC_id];
 
   UE_list_t UE_to_sched;
-  UE_to_sched.head = -1;
   for (int i = 0; i < MAX_MOBILES_PER_ENB; ++i)
     UE_to_sched.next[i] = -1;
+  int *cur = &UE_to_sched.head;
 
-  int last_UE_id = -1;
   for (int UE_id = UE_info->list.head; UE_id >= 0; UE_id = UE_info->list.next[UE_id]) {
     UE_TEMPLATE *UE_template = &UE_info->UE_template[CC_id][UE_id];
     UE_sched_ctrl_t *ue_sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
@@ -1112,13 +1104,10 @@ void ulsch_scheduler_pre_processor(module_id_t Mod_id,
       continue;
 
     /* define UEs to schedule */
-    if (UE_to_sched.head < 0)
-      UE_to_sched.head = UE_id;
-    else
-      UE_to_sched.next[last_UE_id] = UE_id;
-    UE_to_sched.next[UE_id] = -1;
-    last_UE_id = UE_id;
+    *cur = UE_id;
+    cur = &UE_to_sched.next[UE_id];
   }
+  *cur = -1;
 
   if (UE_to_sched.head < 0)
     return;
-- 
2.26.2