Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG-RAN
Commits
a3685e6b
Commit
a3685e6b
authored
Feb 22, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/multi-ue-fixes' into integration_2023_w08
parents
f4412ac0
e9ff5ee5
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
110 additions
and
37 deletions
+110
-37
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+52
-20
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+58
-17
No files found.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
a3685e6b
...
...
@@ -383,7 +383,8 @@ bool allocate_dl_retransmission(module_id_t module_id,
uint16_t
*
rballoc_mask
,
int
*
n_rb_sched
,
NR_UE_info_t
*
UE
,
int
current_harq_pid
)
{
int
current_harq_pid
)
{
int
CC_id
=
0
;
gNB_MAC_INST
*
nr_mac
=
RC
.
nrmac
[
module_id
];
...
...
@@ -408,21 +409,30 @@ bool allocate_dl_retransmission(module_id_t module_id,
const
int
tda
=
get_dl_tda
(
nr_mac
,
scc
,
slot
);
AssertFatal
(
tda
>=
0
,
"Unable to find PDSCH time domain allocation in list
\n
"
);
if
(
tda
==
retInfo
->
time_domain_allocation
&&
layers
==
retInfo
->
nrOfLayers
)
{
/* Check first whether the old TDA can be reused
* this helps allocate retransmission when TDA changes (e.g. new nrOfSymbols > old nrOfSymbols) */
NR_tda_info_t
temp_tda
=
nr_get_pdsch_tda_info
(
dl_bwp
,
tda
);
bool
reuse_old_tda
=
(
retInfo
->
tda_info
.
startSymbolIndex
==
temp_tda
.
startSymbolIndex
)
&&
(
retInfo
->
tda_info
.
nrOfSymbols
<=
temp_tda
.
nrOfSymbols
);
LOG_D
(
NR_MAC
,
"[UE %x] %s old TDA, %s number of layers
\n
"
,
UE
->
rnti
,
reuse_old_tda
?
"reuse"
:
"do not reuse"
,
layers
==
retInfo
->
nrOfLayers
?
"same"
:
"different"
);
NR_tda_info_t
*
tda_info
=
&
retInfo
->
tda_info
;
if
(
reuse_old_tda
&&
layers
==
retInfo
->
nrOfLayers
)
{
/* Check that there are enough resources for retransmission */
while
(
rbSize
<
retInfo
->
rbSize
)
{
rbStart
+=
rbSize
;
/* last iteration rbSize was not enough, skip it */
rbSize
=
0
;
const
int
slbitmap
=
SL_to_bitmap
(
tda_info
->
startSymbolIndex
,
tda_info
->
nrOfSymbols
);
const
uint16_t
slbitmap
=
SL_to_bitmap
(
retInfo
->
tda_info
.
startSymbolIndex
,
retInfo
->
tda_info
.
nrOfSymbols
);
while
(
rbStart
<
bwpSize
&&
(
rballoc_mask
[
rbStart
]
&
slbitmap
)
!=
slbitmap
)
rbStart
++
;
if
(
rbStart
>=
bwpSize
)
{
LOG_D
(
NR_MAC
,
"cannot allocate retransmission for RNTI %04x: no resources
\n
"
,
UE
->
rnti
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] could not allocate DL retransmission: no resources
\n
"
,
UE
->
rnti
,
frame
,
slot
);
return
false
;
}
...
...
@@ -434,7 +444,6 @@ bool allocate_dl_retransmission(module_id_t module_id,
}
else
{
/* the retransmission will use a different time domain allocation, check
* that we have enough resources */
NR_tda_info_t
temp_tda
=
nr_get_pdsch_tda_info
(
dl_bwp
,
tda
);
NR_pdsch_dmrs_t
temp_dmrs
=
get_dl_dmrs_params
(
scc
,
dl_bwp
,
&
temp_tda
,
...
...
@@ -461,7 +470,12 @@ bool allocate_dl_retransmission(module_id_t module_id,
&
new_rbSize
);
if
(
!
success
||
new_tbs
!=
retInfo
->
tb_size
)
{
LOG_D
(
MAC
,
"new TBsize %d of new TDA does not match old TBS %d
\n
"
,
new_tbs
,
retInfo
->
tb_size
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] allocation of DL retransmission failed: new TBS %d of new TDA does not match old TBS %d
\n
"
,
UE
->
rnti
,
frame
,
slot
,
new_tbs
,
retInfo
->
tb_size
);
return
false
;
/* the maximum TBsize we might have is smaller than what we need */
}
...
...
@@ -485,8 +499,10 @@ bool allocate_dl_retransmission(module_id_t module_id,
&
sched_ctrl
->
sched_pdcch
,
false
);
if
(
CCEIndex
<
0
)
{
LOG_D
(
MAC
,
"%4d.%2d could not find CCE for DL DCI retransmission RNTI %04x
\n
"
,
frame
,
slot
,
UE
->
rnti
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] could not find free CCE for DL DCI retransmission
\n
"
,
UE
->
rnti
,
frame
,
slot
);
return
false
;
}
...
...
@@ -496,8 +512,7 @@ bool allocate_dl_retransmission(module_id_t module_id,
int
r_pucch
=
nr_get_pucch_resource
(
sched_ctrl
->
coreset
,
ul_bwp
->
pucch_Config
,
CCEIndex
);
const
int
alloc
=
nr_acknack_scheduling
(
nr_mac
,
UE
,
frame
,
slot
,
r_pucch
,
0
);
if
(
alloc
<
0
)
{
LOG_D
(
MAC
,
"could not find PUCCH for UE %04x@%d.%d
\n
"
,
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] could not find PUCCH for DL DCI retransmission
\n
"
,
UE
->
rnti
,
frame
,
slot
);
...
...
@@ -579,7 +594,10 @@ void pf_dl(module_id_t module_id,
bool
r
=
allocate_dl_retransmission
(
module_id
,
frame
,
slot
,
rballoc_mask
,
&
n_rb_sched
,
UE
,
sched_pdsch
->
dl_harq_pid
);
if
(
!
r
)
{
LOG_D
(
NR_MAC
,
"%4d.%2d retransmission can NOT be allocated
\n
"
,
frame
,
slot
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] DL retransmission could not be allocated
\n
"
,
UE
->
rnti
,
frame
,
slot
);
continue
;
}
/* reduce max_num_ue once we are sure UE can be allocated, i.e., has CCE */
...
...
@@ -590,7 +608,10 @@ void pf_dl(module_id_t module_id,
* if the UE disconnected in L2sim, in which case the gNB is not notified
* (this can be considered a design flaw) */
if
(
sched_ctrl
->
available_dl_harq
.
head
<
0
)
{
LOG_D
(
NR_MAC
,
"RNTI %04x has no free DL HARQ process, skipping
\n
"
,
UE
->
rnti
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] UE has no free DL HARQ process, skipping
\n
"
,
UE
->
rnti
,
frame
,
slot
);
continue
;
}
...
...
@@ -621,8 +642,14 @@ void pf_dl(module_id_t module_id,
0
/* tb_scaling */
,
sched_pdsch
->
nrOfLayers
)
>>
3
;
float
coeff_ue
=
(
float
)
tbs
/
UE
->
dl_thr_ue
;
LOG_D
(
NR_MAC
,
"UE %04x b %d, thr_ue %f, tbs %d, coeff_ue %f
\n
"
,
UE
->
rnti
,
b
,
UE
->
dl_thr_ue
,
tbs
,
coeff_ue
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] b %d, thr_ue %f, tbs %d, coeff_ue %f
\n
"
,
UE
->
rnti
,
frame
,
slot
,
b
,
UE
->
dl_thr_ue
,
tbs
,
coeff_ue
);
/* Create UE_sched list for UEs eligible for new transmission*/
UE_sched
[
curUE
].
coef
=
coeff_ue
;
UE_sched
[
curUE
].
UE
=
UE
;
...
...
@@ -651,7 +678,10 @@ void pf_dl(module_id_t module_id,
int
rbStart
=
0
;
// start wrt BWPstart
if
(
sched_ctrl
->
available_dl_harq
.
head
<
0
)
{
LOG_D
(
MAC
,
"RNTI %04x has no free HARQ process, skipping
\n
"
,
iterator
->
UE
->
rnti
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] UE has no free DL HARQ process, skipping
\n
"
,
iterator
->
UE
->
rnti
,
frame
,
slot
);
iterator
++
;
continue
;
}
...
...
@@ -664,7 +694,10 @@ void pf_dl(module_id_t module_id,
&
sched_ctrl
->
sched_pdcch
,
false
);
if
(
CCEIndex
<
0
)
{
LOG_D
(
NR_MAC
,
"%4d.%2d could not find CCE for DL DCI RNTI %04x
\n
"
,
frame
,
slot
,
rnti
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] could not find free CCE for DL DCI
\n
"
,
rnti
,
frame
,
slot
);
iterator
++
;
continue
;
}
...
...
@@ -676,8 +709,7 @@ void pf_dl(module_id_t module_id,
const
int
alloc
=
nr_acknack_scheduling
(
mac
,
iterator
->
UE
,
frame
,
slot
,
r_pucch
,
0
);
if
(
alloc
<
0
)
{
LOG_D
(
NR_MAC
,
"could not find PUCCH for %04x@%d.%d
\n
"
,
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] could not find PUCCH for DL DCI
\n
"
,
rnti
,
frame
,
slot
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
a3685e6b
...
...
@@ -1432,21 +1432,25 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
const
uint8_t
nrOfLayers
=
retInfo
->
nrOfLayers
;
LOG_D
(
NR_MAC
,
"retInfo->time_domain_allocation = %d, tda = %d
\n
"
,
retInfo
->
time_domain_allocation
,
tda
);
LOG_D
(
NR_MAC
,
"tbs %d
\n
"
,
retInfo
->
tb_size
);
if
(
tda
==
retInfo
->
time_domain_allocation
&&
nrOfLayers
==
retInfo
->
nrOfLayers
)
{
NR_tda_info_t
tda_info
=
nr_get_pusch_tda_info
(
&
UE
->
current_UL_BWP
,
tda
);
bool
reuse_old_tda
=
(
retInfo
->
tda_info
.
startSymbolIndex
==
tda_info
.
startSymbolIndex
)
&&
(
retInfo
->
tda_info
.
nrOfSymbols
<=
tda_info
.
nrOfSymbols
);
if
(
reuse_old_tda
&&
nrOfLayers
==
retInfo
->
nrOfLayers
)
{
/* Check the resource is enough for retransmission */
const
uint16_t
slbitmap
=
SL_to_bitmap
(
retInfo
->
tda_info
.
startSymbolIndex
,
retInfo
->
tda_info
.
nrOfSymbols
);
while
(
rbStart
<
bwpSize
&&
(
rballoc_mask
[
rbStart
]
&
slbitmap
)
!=
slbitmap
)
rbStart
++
;
if
(
rbStart
+
retInfo
->
rbSize
>
bwpSize
)
{
LOG_W
(
NR_MAC
,
"cannot allocate retransmission of RNTI %04x: no resources (rbStart %d, retInfo->rbSize %d, bwpSize %d
\n
"
,
UE
->
rnti
,
rbStart
,
retInfo
->
rbSize
,
bwpSize
);
LOG_W
(
NR_MAC
,
"[UE %04x][%4d.%2d] could not allocate UL retransmission: no resources (rbStart %d, retInfo->rbSize %d, bwpSize %d)
\n
"
,
UE
->
rnti
,
frame
,
slot
,
rbStart
,
retInfo
->
rbSize
,
bwpSize
);
return
false
;
}
LOG_D
(
NR_MAC
,
"%s(): retransmission keeping TDA %d and TBS %d
\n
"
,
__func__
,
tda
,
retInfo
->
tb_size
);
}
else
{
NR_tda_info_t
tda_info
=
nr_get_pusch_tda_info
(
&
UE
->
current_UL_BWP
,
tda
);
NR_pusch_dmrs_t
dmrs_info
=
get_ul_dmrs_params
(
scc
,
&
UE
->
current_UL_BWP
,
&
tda_info
,
...
...
@@ -1472,7 +1476,12 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
&
new_tbs
,
&
new_rbSize
);
if
(
!
success
||
new_tbs
!=
retInfo
->
tb_size
)
{
LOG_D
(
NR_MAC
,
"%s(): new TBsize %d of new TDA does not match old TBS %d
\n
"
,
__func__
,
new_tbs
,
retInfo
->
tb_size
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] allocation of UL retransmission failed: new TBsize %d of new TDA does not match old TBS %d
\n
"
,
UE
->
rnti
,
frame
,
slot
,
new_tbs
,
retInfo
->
tb_size
);
return
false
;
/* the maximum TBsize we might have is smaller than what we need */
}
LOG_D
(
NR_MAC
,
"%s(): retransmission with TDA %d->%d and TBS %d -> %d
\n
"
,
__func__
,
retInfo
->
time_domain_allocation
,
tda
,
retInfo
->
tb_size
,
new_tbs
);
...
...
@@ -1494,7 +1503,10 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
&
sched_ctrl
->
sched_pdcch
,
false
);
if
(
CCEIndex
<
0
)
{
LOG_D
(
NR_MAC
,
"%4d.%2d no free CCE for retransmission UL DCI UE %04x
\n
"
,
frame
,
slot
,
UE
->
rnti
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] no free CCE for retransmission UL DCI UE
\n
"
,
UE
->
rnti
,
frame
,
slot
);
return
false
;
}
...
...
@@ -1594,7 +1606,10 @@ void pf_ul(module_id_t module_id,
const
int
tda
=
get_ul_tda
(
nrmac
,
scc
,
sched_pusch
->
frame
,
sched_pusch
->
slot
);
bool
r
=
allocate_ul_retransmission
(
nrmac
,
frame
,
slot
,
rballoc_mask
,
&
n_rb_sched
,
UE
,
sched_pusch
->
ul_harq_pid
,
scc
,
tda
);
if
(
!
r
)
{
LOG_D
(
NR_MAC
,
"%4d.%2d UL retransmission UE RNTI %04x can NOT be allocated
\n
"
,
frame
,
slot
,
UE
->
rnti
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] UL retransmission could not be allocated
\n
"
,
UE
->
rnti
,
frame
,
slot
);
continue
;
}
else
LOG_D
(
NR_MAC
,
"%4d.%2d UL Retransmission UE RNTI %04x to be allocated, max_num_ue %d
\n
"
,
frame
,
slot
,
UE
->
rnti
,
max_num_ue
);
...
...
@@ -1608,7 +1623,10 @@ void pf_ul(module_id_t module_id,
* if the UE disconnected in L2sim, in which case the gNB is not notified
* (this can be considered a design flaw) */
if
(
sched_ctrl
->
available_ul_harq
.
head
<
0
)
{
LOG_D
(
NR_MAC
,
"RNTI %04x has no free UL HARQ process, skipping
\n
"
,
UE
->
rnti
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] has no free UL HARQ process, skipping
\n
"
,
UE
->
rnti
,
frame
,
slot
);
continue
;
}
...
...
@@ -1641,7 +1659,10 @@ void pf_ul(module_id_t module_id,
&
sched_ctrl
->
sched_pdcch
,
false
);
if
(
CCEIndex
<
0
)
{
LOG_D
(
NR_MAC
,
"%4d.%2d no free CCE for UL DCI UE %04x (BSR 0)
\n
"
,
frame
,
slot
,
UE
->
rnti
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] no free CCE for UL DCI (BSR 0)
\n
"
,
UE
->
rnti
,
frame
,
slot
);
continue
;
}
...
...
@@ -1659,8 +1680,13 @@ void pf_ul(module_id_t module_id,
while
(
rbStart
<
bwpSize
&&
(
rballoc_mask
[
rbStart
]
&
slbitmap
)
!=
slbitmap
)
rbStart
++
;
if
(
rbStart
+
min_rb
>=
bwpSize
)
{
LOG_W
(
NR_MAC
,
"cannot allocate continuous UL data for RNTI %04x: no resources (rbStart %d, min_rb %d, bwpSize %d
\n
"
,
UE
->
rnti
,
rbStart
,
min_rb
,
bwpSize
);
LOG_W
(
NR_MAC
,
"[UE %04x][%4d.%2d] could not allocate continuous UL data: no resources (rbStart %d, min_rb %d, bwpSize %d)
\n
"
,
UE
->
rnti
,
frame
,
slot
,
rbStart
,
min_rb
,
bwpSize
);
continue
;
}
...
...
@@ -1698,8 +1724,14 @@ void pf_ul(module_id_t module_id,
/* Calculate coefficient*/
const
uint32_t
tbs
=
ul_pf_tbs
[
current_BWP
->
mcs_table
][
sched_pusch
->
mcs
];
float
coeff_ue
=
(
float
)
tbs
/
UE
->
ul_thr_ue
;
LOG_D
(
NR_MAC
,
"rnti %04x b %d, ul_thr_ue %f, tbs %d, coeff_ue %f
\n
"
,
UE
->
rnti
,
b
,
UE
->
ul_thr_ue
,
tbs
,
coeff_ue
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] b %d, ul_thr_ue %f, tbs %d, coeff_ue %f
\n
"
,
UE
->
rnti
,
frame
,
slot
,
b
,
UE
->
ul_thr_ue
,
tbs
,
coeff_ue
);
UE_sched
[
curUE
].
coef
=
coeff_ue
;
UE_sched
[
curUE
].
UE
=
UE
;
curUE
++
;
...
...
@@ -1721,7 +1753,10 @@ void pf_ul(module_id_t module_id,
false
);
if
(
CCEIndex
<
0
)
{
LOG_D
(
NR_MAC
,
"%4d.%2d no free CCE for UL DCI UE %04x
\n
"
,
frame
,
slot
,
iterator
->
UE
->
rnti
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] no free CCE for UL DCI
\n
"
,
iterator
->
UE
->
rnti
,
frame
,
slot
);
iterator
++
;
continue
;
}
...
...
@@ -1750,7 +1785,13 @@ void pf_ul(module_id_t module_id,
max_rbSize
++
;
if
(
rbStart
+
min_rb
>=
bwpSize
||
max_rbSize
<
min_rb
)
{
LOG_D
(
NR_MAC
,
"cannot allocate UL data for RNTI %04x: no resources (rbStart %d, min_rb %d, bwpSize %d)
\n
"
,
iterator
->
UE
->
rnti
,
rbStart
,
min_rb
,
bwpSize
);
LOG_D
(
NR_MAC
,
"[UE %04x][%4d.%2d] could not allocate UL data: no resources (rbStart %d, min_rb %d, bwpSize %d)
\n
"
,
iterator
->
UE
->
rnti
,
frame
,
slot
,
rbStart
,
min_rb
,
bwpSize
);
iterator
++
;
continue
;
}
else
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment