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
wangjie
OpenXG-RAN
Commits
4a0e4b5e
Commit
4a0e4b5e
authored
Dec 02, 2016
by
Wilson W.K. Thong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixing thread busy crash: add more VCD logs to debug timing issues
parent
9bea08ab
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
98 additions
and
16 deletions
+98
-16
openair1/PHY/LTE_TRANSPORT/rar_tools.c
openair1/PHY/LTE_TRANSPORT/rar_tools.c
+6
-0
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+16
-1
openair2/UTIL/LOG/vcd_signal_dumper.c
openair2/UTIL/LOG/vcd_signal_dumper.c
+24
-0
openair2/UTIL/LOG/vcd_signal_dumper.h
openair2/UTIL/LOG/vcd_signal_dumper.h
+24
-0
targets/RT/USER/lte-ue.c
targets/RT/USER/lte-ue.c
+28
-15
No files found.
openair1/PHY/LTE_TRANSPORT/rar_tools.c
View file @
4a0e4b5e
...
@@ -34,6 +34,7 @@
...
@@ -34,6 +34,7 @@
#include "SCHED/extern.h"
#include "SCHED/extern.h"
#include "LAYER2/MAC/defs.h"
#include "LAYER2/MAC/defs.h"
#include "SCHED/defs.h"
#include "SCHED/defs.h"
#include "UTIL/LOG/vcd_signal_dumper.h"
#include "assertions.h"
#include "assertions.h"
...
@@ -171,6 +172,8 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *ue,
...
@@ -171,6 +172,8 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *ue,
unsigned
char
eNB_id
)
unsigned
char
eNB_id
)
{
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_RAR
,
VCD_FUNCTION_IN
);
// RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *)rar_pdu;
// RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *)rar_pdu;
uint8_t
transmission_mode
=
ue
->
transmission_mode
[
eNB_id
];
uint8_t
transmission_mode
=
ue
->
transmission_mode
[
eNB_id
];
unsigned
char
*
rar_pdu
=
ue
->
dlsch_ra
[
eNB_id
]
->
harq_processes
[
0
]
->
b
;
unsigned
char
*
rar_pdu
=
ue
->
dlsch_ra
[
eNB_id
]
->
harq_processes
[
0
]
->
b
;
...
@@ -315,6 +318,9 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *ue,
...
@@ -315,6 +318,9 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *ue,
msg
(
"ulsch ra (UE): TPC %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
TPC
);
msg
(
"ulsch ra (UE): TPC %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
TPC
);
msg
(
"ulsch ra (UE): O %d
\n
"
,
ulsch
->
O
);
msg
(
"ulsch ra (UE): O %d
\n
"
,
ulsch
->
O
);
msg
(
"ulsch ra (UE): ORI %d
\n
"
,
ulsch
->
O_RI
);
msg
(
"ulsch ra (UE): ORI %d
\n
"
,
ulsch
->
O_RI
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_RAR
,
VCD_FUNCTION_OUT
);
//#endif
//#endif
return
(
0
);
return
(
0
);
}
}
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
4a0e4b5e
...
@@ -942,6 +942,8 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) {
...
@@ -942,6 +942,8 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) {
int
dummy_tx_buffer
[
3840
*
4
]
__attribute__
((
aligned
(
16
)));
int
dummy_tx_buffer
[
3840
*
4
]
__attribute__
((
aligned
(
16
)));
#endif
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON
,
VCD_FUNCTION_IN
);
start_meas
(
&
ue
->
ofdm_mod_stats
);
start_meas
(
&
ue
->
ofdm_mod_stats
);
nsymb
=
(
frame_parms
->
Ncp
==
0
)
?
14
:
12
;
nsymb
=
(
frame_parms
->
Ncp
==
0
)
?
14
:
12
;
...
@@ -1043,7 +1045,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) {
...
@@ -1043,7 +1045,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) {
stop_meas
(
&
ue
->
ofdm_mod_stats
);
stop_meas
(
&
ue
->
ofdm_mod_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON
,
VCD_FUNCTION_OUT
);
}
}
...
@@ -1054,6 +1056,8 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1054,6 +1056,8 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
int
prach_power
;
int
prach_power
;
PRACH_RESOURCES_t
prach_resources_local
;
PRACH_RESOURCES_t
prach_resources_local
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH
,
VCD_FUNCTION_IN
);
ue
->
generate_prach
=
0
;
ue
->
generate_prach
=
0
;
if
(
ue
->
mac_enabled
==
0
){
if
(
ue
->
mac_enabled
==
0
){
...
@@ -1170,6 +1174,8 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1170,6 +1174,8 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
if
(
ue
->
prach_cnt
==
3
)
if
(
ue
->
prach_cnt
==
3
)
ue
->
generate_prach
=
0
;
ue
->
generate_prach
=
0
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH
,
VCD_FUNCTION_OUT
);
}
}
void
ue_ulsch_uespec_procedures
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
,
uint8_t
abstraction_flag
)
{
void
ue_ulsch_uespec_procedures
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
,
uint8_t
abstraction_flag
)
{
...
@@ -1189,6 +1195,8 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
...
@@ -1189,6 +1195,8 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
uint8_t
ulsch_input_buffer
[
5477
]
__attribute__
((
aligned
(
32
)));
uint8_t
ulsch_input_buffer
[
5477
]
__attribute__
((
aligned
(
32
)));
uint8_t
access_mode
;
uint8_t
access_mode
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC
,
VCD_FUNCTION_IN
);
// get harq_pid from subframe relationship
// get harq_pid from subframe relationship
harq_pid
=
subframe2harq_pid
(
&
ue
->
frame_parms
,
harq_pid
=
subframe2harq_pid
(
&
ue
->
frame_parms
,
frame_tx
,
frame_tx
,
...
@@ -1455,6 +1463,9 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
...
@@ -1455,6 +1463,9 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
ue
->
sr
[
subframe_tx
]
=
0
;
ue
->
sr
[
subframe_tx
]
=
0
;
}
}
}
// subframe_scheduling_flag==1
}
// subframe_scheduling_flag==1
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC
,
VCD_FUNCTION_OUT
);
}
}
void
ue_srs_procedures
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
,
uint8_t
abstraction_flag
)
void
ue_srs_procedures
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
eNB_id
,
uint8_t
abstraction_flag
)
...
@@ -1552,6 +1563,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1552,6 +1563,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
int
tx_amp
;
int
tx_amp
;
int8_t
Po_PUCCH
;
int8_t
Po_PUCCH
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH
,
VCD_FUNCTION_IN
);
SOUNDINGRS_UL_CONFIG_DEDICATED
*
pSoundingrs_ul_config_dedicated
=&
ue
->
soundingrs_ul_config_dedicated
[
eNB_id
];
SOUNDINGRS_UL_CONFIG_DEDICATED
*
pSoundingrs_ul_config_dedicated
=&
ue
->
soundingrs_ul_config_dedicated
[
eNB_id
];
// 36.213 8.2
// 36.213 8.2
...
@@ -1742,6 +1755,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1742,6 +1755,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
}
}
}
// SR_Payload==1
}
// SR_Payload==1
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH
,
VCD_FUNCTION_OUT
);
// PUCCH 2x
// PUCCH 2x
if
(
ue
->
generate_ul_signal
[
eNB_id
]
==
0
)
{
// we have not generated ACK/NAK/SR in this subframe
if
(
ue
->
generate_ul_signal
[
eNB_id
]
==
0
)
{
// we have not generated ACK/NAK/SR in this subframe
...
...
openair2/UTIL/LOG/vcd_signal_dumper.c
View file @
4a0e4b5e
...
@@ -174,6 +174,10 @@ const char* eurecomVariablesNames[] = {
...
@@ -174,6 +174,10 @@ const char* eurecomVariablesNames[] = {
"ue0_SFN5"
,
"ue0_SFN5"
,
"ue0_SFN6"
,
"ue0_SFN6"
,
"ue0_SFN7"
,
"ue0_SFN7"
,
#if 1 // 2016-11-29 wilson debug thread busy crash
"ue0_trx_read_ns"
,
"ue0_trx_write_ns"
,
#endif
};
};
const
char
*
eurecomFunctionsNames
[]
=
{
const
char
*
eurecomFunctionsNames
[]
=
{
...
@@ -188,6 +192,19 @@ const char* eurecomFunctionsNames[] = {
...
@@ -188,6 +192,19 @@ const char* eurecomFunctionsNames[] = {
"ue_thread_synch"
,
"ue_thread_synch"
,
"ue_thread_rxtx0"
,
"ue_thread_rxtx0"
,
"ue_thread_rxtx1"
,
"ue_thread_rxtx1"
,
#if 1 // 2016-11-29 wilson debug thread busy crash
"trx_read_sf9"
,
"trx_write_sf9"
,
"ue_signal_cond_rxtx"
,
"ue_wait_cond_rxtx0"
,
"ue_wait_cond_rxtx1"
,
"ue_lock_mutex_rxtx_for_cond_wait0"
,
"ue_lock_mutex_rxtx_for_cond_wait1"
,
"ue_lock_mutex_rxtx_for_cnt_decrement0"
,
"ue_lock_mutex_rxtx_for_cnt_decrement1"
,
"ue_lock_mutex_rxtx_for_cnt_increment0"
,
"ue_lock_mutex_rxtx_for_cnt_increment1"
,
#endif
/* RRH signals */
/* RRH signals */
"eNB_tx"
,
"eNB_tx"
,
...
@@ -218,6 +235,13 @@ const char* eurecomFunctionsNames[] = {
...
@@ -218,6 +235,13 @@ const char* eurecomFunctionsNames[] = {
"phy_eNB_slot_fep"
,
"phy_eNB_slot_fep"
,
"phy_procedures_ue_tx"
,
"phy_procedures_ue_tx"
,
"phy_procedures_ue_rx"
,
"phy_procedures_ue_rx"
,
#if 1 // 2016-12-01 wilson debug long TX runtime in special subframe
"phy_procedures_ue_tx_ulsch_uespec"
,
"phy_procedures_ue_tx_pucch"
,
"phy_procedures_ue_tx_ulsch_common"
,
"phy_procedures_ue_tx_prach"
,
"phy_procedures_ue_tx_ulsch_rar"
,
#endif
"phy_procedures_eNB_lte"
,
"phy_procedures_eNB_lte"
,
"phy_procedures_UE_lte"
,
"phy_procedures_UE_lte"
,
"pdsch_thread"
,
"pdsch_thread"
,
...
...
openair2/UTIL/LOG/vcd_signal_dumper.h
View file @
4a0e4b5e
...
@@ -146,6 +146,10 @@ typedef enum {
...
@@ -146,6 +146,10 @@ typedef enum {
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN5
,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN5
,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN6
,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN6
,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN7
,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN7
,
#if 1 // 2016-11-29 wilson debug thread busy crash
VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS
,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS
,
#endif
VCD_SIGNAL_DUMPER_VARIABLES_LAST
,
VCD_SIGNAL_DUMPER_VARIABLES_LAST
,
VCD_SIGNAL_DUMPER_VARIABLES_END
=
VCD_SIGNAL_DUMPER_VARIABLES_LAST
,
VCD_SIGNAL_DUMPER_VARIABLES_END
=
VCD_SIGNAL_DUMPER_VARIABLES_LAST
,
}
vcd_signal_dump_variables
;
}
vcd_signal_dump_variables
;
...
@@ -162,6 +166,19 @@ typedef enum {
...
@@ -162,6 +166,19 @@ typedef enum {
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_SYNCH
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_SYNCH
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX1
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX1
,
#if 1 // 2016-11-29 wilson debug thread busy crash
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9
,
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_SF9
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX1
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0
,
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1
,
#endif
/* RRH signals */
/* RRH signals */
VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX
,
VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX
,
...
@@ -192,6 +209,13 @@ typedef enum {
...
@@ -192,6 +209,13 @@ typedef enum {
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX
,
#if 1 // 2016-12-01 wilson debug long TX runtime in special subframe
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_RAR
,
#endif
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_THREAD
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_THREAD
,
...
...
targets/RT/USER/lte-ue.c
View file @
4a0e4b5e
...
@@ -716,6 +716,7 @@ static void *UE_thread_rxn_txnp4(void *arg)
...
@@ -716,6 +716,7 @@ static void *UE_thread_rxn_txnp4(void *arg)
printf
(
"Starting UE RXN_TXNP4 thread
\n
"
);
printf
(
"Starting UE RXN_TXNP4 thread
\n
"
);
while
(
!
oai_exit
)
{
while
(
!
oai_exit
)
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0
+
(
proc
->
subframe_rx
&
1
),
1
);
if
(
pthread_mutex_lock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
if
(
pthread_mutex_lock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RXTX
\n
"
);
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RXTX
\n
"
);
exit_fun
(
"nothing to add"
);
exit_fun
(
"nothing to add"
);
...
@@ -723,15 +724,18 @@ static void *UE_thread_rxn_txnp4(void *arg)
...
@@ -723,15 +724,18 @@ static void *UE_thread_rxn_txnp4(void *arg)
}
}
while
(
proc
->
instance_cnt_rxtx
<
0
)
{
while
(
proc
->
instance_cnt_rxtx
<
0
)
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0
+
(
proc
->
subframe_rx
&
1
),
1
);
// most of the time, the thread is waiting here
// most of the time, the thread is waiting here
pthread_cond_wait
(
&
proc
->
cond_rxtx
,
&
proc
->
mutex_rxtx
);
pthread_cond_wait
(
&
proc
->
cond_rxtx
,
&
proc
->
mutex_rxtx
);
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0
+
(
proc
->
subframe_rx
&
1
),
0
);
if
(
pthread_mutex_unlock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
if
(
pthread_mutex_unlock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE] error unlocking mutex for UE RXn_TXnp4
\n
"
);
LOG_E
(
PHY
,
"[SCHED][UE] error unlocking mutex for UE RXn_TXnp4
\n
"
);
exit_fun
(
"nothing to add"
);
exit_fun
(
"nothing to add"
);
return
&
UE_thread_rxtx_retval
;
return
&
UE_thread_rxtx_retval
;
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0
+
(
proc
->
subframe_rx
&
1
),
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0
+
(
proc
->
subframe_rx
&
1
),
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0
+
(
proc
->
subframe_rx
&
1
),
1
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_UE
+
(
proc
->
subframe_rx
&
1
),
proc
->
subframe_rx
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_UE
+
(
proc
->
subframe_rx
&
1
),
proc
->
subframe_rx
);
...
@@ -782,6 +786,7 @@ static void *UE_thread_rxn_txnp4(void *arg)
...
@@ -782,6 +786,7 @@ static void *UE_thread_rxn_txnp4(void *arg)
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0
+
(
proc
->
subframe_rx
&
1
),
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0
+
(
proc
->
subframe_rx
&
1
),
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0
+
(
proc
->
subframe_rx
&
1
),
1
);
if
(
pthread_mutex_lock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
if
(
pthread_mutex_lock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RXTX
\n
"
);
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RXTX
\n
"
);
exit_fun
(
"noting to add"
);
exit_fun
(
"noting to add"
);
...
@@ -796,6 +801,7 @@ static void *UE_thread_rxn_txnp4(void *arg)
...
@@ -796,6 +801,7 @@ static void *UE_thread_rxn_txnp4(void *arg)
exit_fun
(
"noting to add"
);
exit_fun
(
"noting to add"
);
return
&
UE_thread_rxtx_retval
;
return
&
UE_thread_rxtx_retval
;
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0
+
(
proc
->
subframe_rx
&
1
),
0
);
}
}
// thread finished
// thread finished
...
@@ -1013,20 +1019,22 @@ void *UE_thread(void *arg) {
...
@@ -1013,20 +1019,22 @@ void *UE_thread(void *arg) {
for
(
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_rx
;
i
++
)
for
(
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_rx
;
i
++
)
rxp
[
i
]
=
(
void
*
)
&
rxdata
[
i
][
UE
->
frame_parms
.
ofdm_symbol_size
+
UE
->
frame_parms
.
nb_prefix_samples0
+
(
sf
*
UE
->
frame_parms
.
samples_per_tti
)];
rxp
[
i
]
=
(
void
*
)
&
rxdata
[
i
][
UE
->
frame_parms
.
ofdm_symbol_size
+
UE
->
frame_parms
.
nb_prefix_samples0
+
(
sf
*
UE
->
frame_parms
.
samples_per_tti
)];
// grab signal for subframe
// grab signal for subframe
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
1
);
if
(
UE
->
mode
!=
loop_through_memory
)
{
if
(
UE
->
mode
!=
loop_through_memory
)
{
if
(
sf
<
9
)
{
if
(
sf
<
9
)
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
1
);
rxs
=
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
rxs
=
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
&
timestamp
,
&
timestamp
,
rxp
,
rxp
,
UE
->
frame_parms
.
samples_per_tti
,
UE
->
frame_parms
.
samples_per_tti
,
UE
->
frame_parms
.
nb_antennas_rx
);
UE
->
frame_parms
.
nb_antennas_rx
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_
WRITE
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_
READ
,
0
);
// prepare tx buffer pointers
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS
,
rxs
);
// prepare tx buffer pointers
for
(
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_tx
;
i
++
)
for
(
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_tx
;
i
++
)
txp
[
i
]
=
(
void
*
)
&
UE
->
common_vars
.
txdata
[
i
][((
sf
+
2
)
%
10
)
*
UE
->
frame_parms
.
samples_per_tti
];
txp
[
i
]
=
(
void
*
)
&
UE
->
common_vars
.
txdata
[
i
][((
sf
+
2
)
%
10
)
*
UE
->
frame_parms
.
samples_per_tti
];
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
1
);
txs
=
UE
->
rfdevice
.
trx_write_func
(
&
UE
->
rfdevice
,
txs
=
UE
->
rfdevice
.
trx_write_func
(
&
UE
->
rfdevice
,
timestamp
+
timestamp
+
(
2
*
UE
->
frame_parms
.
samples_per_tti
)
-
(
2
*
UE
->
frame_parms
.
samples_per_tti
)
-
...
@@ -1036,27 +1044,25 @@ void *UE_thread(void *arg) {
...
@@ -1036,27 +1044,25 @@ void *UE_thread(void *arg) {
UE
->
frame_parms
.
samples_per_tti
,
UE
->
frame_parms
.
samples_per_tti
,
UE
->
frame_parms
.
nb_antennas_tx
,
UE
->
frame_parms
.
nb_antennas_tx
,
1
);
1
);
if
(
txs
!=
UE
->
frame_parms
.
samples_per_tti
)
{
LOG_E
(
PHY
,
"TX : Timeout (sent %d/%d)
\n
"
,
txs
,
UE
->
frame_parms
.
samples_per_tti
);
exit_fun
(
"problem transmitting samples"
);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS
,
rxs
);
}
}
else
{
else
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9
,
1
);
rxs
=
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
rxs
=
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
&
timestamp
,
&
timestamp
,
rxp
,
rxp
,
UE
->
frame_parms
.
samples_per_tti
-
UE
->
frame_parms
.
ofdm_symbol_size
-
UE
->
frame_parms
.
nb_prefix_samples0
,
UE
->
frame_parms
.
samples_per_tti
-
UE
->
frame_parms
.
ofdm_symbol_size
-
UE
->
frame_parms
.
nb_prefix_samples0
,
UE
->
frame_parms
.
nb_antennas_rx
);
UE
->
frame_parms
.
nb_antennas_rx
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_
WRITE
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_
READ_SF9
,
0
);
// prepare tx buffer pointers
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS
,
rxs
);
// prepare tx buffer pointers
for
(
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_tx
;
i
++
)
for
(
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_tx
;
i
++
)
txp
[
i
]
=
(
void
*
)
&
UE
->
common_vars
.
txdata
[
i
][((
sf
+
2
)
%
10
)
*
UE
->
frame_parms
.
samples_per_tti
];
txp
[
i
]
=
(
void
*
)
&
UE
->
common_vars
.
txdata
[
i
][((
sf
+
2
)
%
10
)
*
UE
->
frame_parms
.
samples_per_tti
];
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_SF9
,
1
);
txs
=
UE
->
rfdevice
.
trx_write_func
(
&
UE
->
rfdevice
,
txs
=
UE
->
rfdevice
.
trx_write_func
(
&
UE
->
rfdevice
,
timestamp
+
timestamp
+
(
2
*
UE
->
frame_parms
.
samples_per_tti
)
-
(
2
*
UE
->
frame_parms
.
samples_per_tti
)
-
...
@@ -1066,25 +1072,29 @@ void *UE_thread(void *arg) {
...
@@ -1066,25 +1072,29 @@ void *UE_thread(void *arg) {
UE
->
frame_parms
.
samples_per_tti
-
rx_off_diff
,
UE
->
frame_parms
.
samples_per_tti
-
rx_off_diff
,
UE
->
frame_parms
.
nb_antennas_tx
,
UE
->
frame_parms
.
nb_antennas_tx
,
1
);
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_SF9
,
0
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS
,
rxs
);
if
(
txs
!=
UE
->
frame_parms
.
samples_per_tti
-
rx_off_diff
)
{
if
(
txs
!=
UE
->
frame_parms
.
samples_per_tti
-
rx_off_diff
)
{
LOG_E
(
PHY
,
"TX : Timeout (sent %d/%d)
\n
"
,
txs
,
UE
->
frame_parms
.
samples_per_tti
-
rx_off_diff
);
LOG_E
(
PHY
,
"TX : Timeout (sent %d/%d)
\n
"
,
txs
,
UE
->
frame_parms
.
samples_per_tti
-
rx_off_diff
);
exit_fun
(
"problem transmitting samples"
);
exit_fun
(
"problem transmitting samples"
);
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9
,
1
);
// read in first symbol of next frame and adjust for timing drift
// read in first symbol of next frame and adjust for timing drift
rxs
=
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
rxs
=
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
&
timestamp1
,
&
timestamp1
,
(
void
**
)
rxdata
,
(
void
**
)
rxdata
,
UE
->
frame_parms
.
ofdm_symbol_size
+
UE
->
frame_parms
.
nb_prefix_samples0
-
rx_off_diff
,
UE
->
frame_parms
.
ofdm_symbol_size
+
UE
->
frame_parms
.
nb_prefix_samples0
-
rx_off_diff
,
UE
->
frame_parms
.
nb_antennas_rx
);
UE
->
frame_parms
.
nb_antennas_rx
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9
,
0
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS
,
rxs
);
rx_off_diff
=
0
;
rx_off_diff
=
0
;
}
}
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
// operate on thread sf mod 2
// operate on thread sf mod 2
UE_rxtx_proc_t
*
proc
=
&
UE
->
proc
.
proc_rxtx
[
sf
&
1
];
UE_rxtx_proc_t
*
proc
=
&
UE
->
proc
.
proc_rxtx
[
sf
&
1
];
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0
+
(
proc
->
subframe_rx
&
1
),
1
);
// lock mutex
// lock mutex
if
(
pthread_mutex_lock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
if
(
pthread_mutex_lock
(
&
proc
->
mutex_rxtx
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RX
\n
"
);
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RX
\n
"
);
...
@@ -1114,14 +1124,17 @@ void *UE_thread(void *arg) {
...
@@ -1114,14 +1124,17 @@ void *UE_thread(void *arg) {
exit_fun
(
"nothing to add"
);
exit_fun
(
"nothing to add"
);
return
&
UE_thread_retval
;
return
&
UE_thread_retval
;
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0
+
(
proc
->
subframe_rx
&
1
),
0
);
if
(
instance_cnt_rxtx
==
0
)
{
if
(
instance_cnt_rxtx
==
0
)
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX
,
1
);
if
(
pthread_cond_signal
(
&
proc
->
cond_rxtx
)
!=
0
)
{
if
(
pthread_cond_signal
(
&
proc
->
cond_rxtx
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE] ERROR pthread_cond_signal for UE RX thread
\n
"
);
LOG_E
(
PHY
,
"[SCHED][UE] ERROR pthread_cond_signal for UE RX thread
\n
"
);
exit_fun
(
"nothing to add"
);
exit_fun
(
"nothing to add"
);
return
&
UE_thread_retval
;
return
&
UE_thread_retval
;
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX
,
0
);
}
else
{
}
else
{
LOG_E
(
PHY
,
"[SCHED][UE] UE RX thread busy (IC %d)!!
\n
"
,
instance_cnt_rxtx
);
LOG_E
(
PHY
,
"[SCHED][UE] UE RX thread busy (IC %d)!!
\n
"
,
instance_cnt_rxtx
);
if
(
instance_cnt_rxtx
>
2
)
{
if
(
instance_cnt_rxtx
>
2
)
{
...
...
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