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
spbro
OpenXG-RAN
Commits
2039a4f2
Commit
2039a4f2
authored
Aug 16, 2024
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
making global dmrs_symbol in pusch_vars local to avoid race conditions
parent
871078a6
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
30 deletions
+21
-30
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+21
-28
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+0
-2
No files found.
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
View file @
2039a4f2
...
...
@@ -1282,6 +1282,13 @@ static void inner_rx(PHY_VARS_gNB *gNB,
memset
(
rxFext
,
0
,
sizeof
(
c16_t
)
*
nb_rx_ant
*
buffer_length
);
memset
(
chFext
,
0
,
sizeof
(
c16_t
)
*
nb_layer
*
nb_rx_ant
*
buffer_length
);
int
dmrs_symbol
;
if
(
gNB
->
chest_time
==
0
)
dmrs_symbol
=
dmrs_symbol_flag
?
symbol
:
get_valid_dmrs_idx_for_channel_est
(
rel15_ul
->
ul_dmrs_symb_pos
,
symbol
);
else
{
// average of channel estimates stored in first symbol
int
end_symbol
=
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
;
dmrs_symbol
=
get_next_dmrs_symbol_in_slot
(
rel15_ul
->
ul_dmrs_symb_pos
,
rel15_ul
->
start_symbol_index
,
end_symbol
);
}
for
(
int
aarx
=
0
;
aarx
<
nb_rx_ant
;
aarx
++
)
{
for
(
int
aatx
=
0
;
aatx
<
nb_layer
;
aatx
++
)
{
...
...
@@ -1290,7 +1297,7 @@ static void inner_rx(PHY_VARS_gNB *gNB,
rxFext
[
aarx
],
chFext
[
aatx
][
aarx
],
soffset
+
(
symbol
*
frame_parms
->
ofdm_symbol_size
),
pusch_vars
->
dmrs_symbol
*
frame_parms
->
ofdm_symbol_size
,
dmrs_symbol
*
frame_parms
->
ofdm_symbol_size
,
aarx
,
dmrs_symbol_flag
,
rel15_ul
,
...
...
@@ -1412,15 +1419,7 @@ static void nr_pusch_symbol_processing(void *arg)
int
ulsch_id
=
rdata
->
ulsch_id
;
int
slot
=
rdata
->
slot
;
NR_gNB_PUSCH
*
pusch_vars
=
&
gNB
->
pusch_vars
[
ulsch_id
];
for
(
int
symbol
=
rdata
->
startSymbol
;
symbol
<
rdata
->
startSymbol
+
rdata
->
numSymbols
;
symbol
++
)
{
int
dmrs_symbol_flag
=
(
rel15_ul
->
ul_dmrs_symb_pos
>>
symbol
)
&
0x01
;
if
(
dmrs_symbol_flag
==
1
)
{
if
((
rel15_ul
->
ul_dmrs_symb_pos
>>
((
symbol
+
1
)
%
frame_parms
->
symbols_per_slot
))
&
0x01
)
AssertFatal
(
1
==
0
,
"Double DMRS configuration is not yet supported
\n
"
);
gNB
->
pusch_vars
[
ulsch_id
].
dmrs_symbol
=
symbol
;
}
for
(
int
symbol
=
rdata
->
startSymbol
;
symbol
<
rdata
->
startSymbol
+
rdata
->
numSymbols
;
symbol
++
)
{
if
(
gNB
->
pusch_vars
[
ulsch_id
].
ul_valid_re_per_slot
[
symbol
]
==
0
)
continue
;
int
soffset
=
(
slot
%
RU_RX_SLOT_DEPTH
)
*
frame_parms
->
symbols_per_slot
*
frame_parms
->
ofdm_symbol_size
;
...
...
@@ -1469,7 +1468,6 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
nfapi_nr_pusch_pdu_t
*
rel15_ul
=
&
gNB
->
ulsch
[
ulsch_id
].
harq_process
->
ulsch_pdu
;
NR_gNB_PUSCH
*
pusch_vars
=
&
gNB
->
pusch_vars
[
ulsch_id
];
pusch_vars
->
dmrs_symbol
=
INVALID_VALUE
;
int
nbSymb
=
0
;
uint32_t
bwp_start_subcarrier
=
((
rel15_ul
->
rb_start
+
rel15_ul
->
bwp_start
)
*
NR_NB_SC_PER_RB
+
frame_parms
->
first_carrier_offset
)
%
frame_parms
->
ofdm_symbol_size
;
LOG_D
(
PHY
,
"pusch %d.%d : bwp_start_subcarrier %d, rb_start %d, first_carrier_offset %d
\n
"
,
frame
,
slot
,
bwp_start_subcarrier
,
rel15_ul
->
rb_start
,
frame_parms
->
first_carrier_offset
);
...
...
@@ -1481,13 +1479,12 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
start_meas
(
&
gNB
->
ulsch_channel_estimation_stats
);
int
max_ch
=
0
;
uint32_t
nvar
=
0
;
for
(
uint8_t
symbol
=
rel15_ul
->
start_symbol_index
;
symbol
<
(
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
);
symbol
++
)
{
int
end_symbol
=
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
;
for
(
uint8_t
symbol
=
rel15_ul
->
start_symbol_index
;
symbol
<
end_symbol
;
symbol
++
)
{
uint8_t
dmrs_symbol_flag
=
(
rel15_ul
->
ul_dmrs_symb_pos
>>
symbol
)
&
0x01
;
LOG_D
(
PHY
,
"symbol %d, dmrs_symbol_flag :%d
\n
"
,
symbol
,
dmrs_symbol_flag
);
if
(
dmrs_symbol_flag
==
1
)
{
if
(
pusch_vars
->
dmrs_symbol
==
INVALID_VALUE
)
pusch_vars
->
dmrs_symbol
=
symbol
;
for
(
int
nl
=
0
;
nl
<
rel15_ul
->
nrOfLayers
;
nl
++
)
{
uint32_t
nvar_tmp
=
0
;
...
...
@@ -1535,18 +1532,13 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
nvar
/=
(
rel15_ul
->
nr_of_symbols
*
rel15_ul
->
nrOfLayers
*
frame_parms
->
nb_antennas_rx
);
// averaging time domain channel estimates
if
(
gNB
->
chest_time
==
1
)
{
if
(
gNB
->
chest_time
==
1
)
nr_chest_time_domain_avg
(
frame_parms
,
pusch_vars
->
ul_ch_estimates
,
rel15_ul
->
nr_of_symbols
,
rel15_ul
->
start_symbol_index
,
rel15_ul
->
ul_dmrs_symb_pos
,
rel15_ul
->
rb_size
);
pusch_vars
->
dmrs_symbol
=
get_next_dmrs_symbol_in_slot
(
rel15_ul
->
ul_dmrs_symb_pos
,
rel15_ul
->
start_symbol_index
,
rel15_ul
->
nr_of_symbols
);
}
stop_meas
(
&
gNB
->
ulsch_channel_estimation_stats
);
...
...
@@ -1554,7 +1546,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
// Scrambling initialization
int
number_dmrs_symbols
=
0
;
for
(
int
l
=
rel15_ul
->
start_symbol_index
;
l
<
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
;
l
++
)
for
(
int
l
=
rel15_ul
->
start_symbol_index
;
l
<
end_symbol
;
l
++
)
number_dmrs_symbols
+=
((
rel15_ul
->
ul_dmrs_symb_pos
)
>>
l
)
&
0x01
;
int
nb_re_dmrs
;
if
(
rel15_ul
->
dmrs_config_type
==
pusch_dmrs_type1
)
...
...
@@ -1593,9 +1585,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
// first the computation of channel levels
int
nb_re_pusch
=
0
,
meas_symbol
=
-
1
;
for
(
meas_symbol
=
rel15_ul
->
start_symbol_index
;
meas_symbol
<
(
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
);
meas_symbol
++
)
for
(
meas_symbol
=
rel15_ul
->
start_symbol_index
;
meas_symbol
<
end_symbol
;
meas_symbol
++
)
if
((
nb_re_pusch
=
get_nb_re_pusch
(
frame_parms
,
rel15_ul
,
meas_symbol
))
>
0
)
break
;
...
...
@@ -1606,6 +1596,11 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
int
soffset
=
(
slot
%
RU_RX_SLOT_DEPTH
)
*
frame_parms
->
symbols_per_slot
*
frame_parms
->
ofdm_symbol_size
;
nb_re_pusch
=
(
nb_re_pusch
+
15
)
&
~
15
;
int
dmrs_symbol
;
if
(
gNB
->
chest_time
==
0
)
dmrs_symbol
=
get_valid_dmrs_idx_for_channel_est
(
rel15_ul
->
ul_dmrs_symb_pos
,
meas_symbol
);
else
// average of channel estimates stored in first symbol
dmrs_symbol
=
get_next_dmrs_symbol_in_slot
(
rel15_ul
->
ul_dmrs_symb_pos
,
rel15_ul
->
start_symbol_index
,
end_symbol
);
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
for
(
int
aatx
=
0
;
aatx
<
rel15_ul
->
nrOfLayers
;
aatx
++
)
...
...
@@ -1614,7 +1609,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
(
c16_t
*
)
&
pusch_vars
->
rxdataF_ext
[
aarx
][
meas_symbol
*
nb_re_pusch
],
(
c16_t
*
)
&
pusch_vars
->
ul_ch_estimates_ext
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
][
meas_symbol
*
nb_re_pusch
],
soffset
+
meas_symbol
*
frame_parms
->
ofdm_symbol_size
,
pusch_vars
->
dmrs_symbol
*
frame_parms
->
ofdm_symbol_size
,
dmrs_symbol
*
frame_parms
->
ofdm_symbol_size
,
aarx
,
(
rel15_ul
->
ul_dmrs_symb_pos
>>
meas_symbol
)
&
0x01
,
rel15_ul
,
...
...
@@ -1662,9 +1657,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
start_meas
(
&
gNB
->
rx_pusch_symbol_processing_stats
);
int
numSymbols
=
gNB
->
num_pusch_symbols_per_thread
;
for
(
uint8_t
symbol
=
rel15_ul
->
start_symbol_index
;
symbol
<
(
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
);
symbol
+=
numSymbols
)
for
(
uint8_t
symbol
=
rel15_ul
->
start_symbol_index
;
symbol
<
end_symbol
;
symbol
+=
numSymbols
)
{
int
total_res
=
0
;
for
(
int
s
=
0
;
s
<
numSymbols
;
s
++
)
{
...
...
openair1/PHY/defs_gNB.h
View file @
2039a4f2
...
...
@@ -357,8 +357,6 @@ typedef struct {
/// - first index: ? [0..3] (hard coded)
/// - first index: ? [0..1179743] (hard coded)
int16_t
**
llr_layers
;
/// DMRS symbol index, to be updated every DMRS symbol within a slot.
uint8_t
dmrs_symbol
;
// PTRS symbol index, to be updated every PTRS symbol within a slot.
uint8_t
ptrs_symbol_index
;
/// bit mask of PT-RS ofdm symbol indicies
...
...
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