Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
lizhongxiao
OpenXG UE
Commits
5532bc37
Commit
5532bc37
authored
Mar 07, 2018
by
wujing
Browse files
Options
Browse Files
Download
Plain Diff
merge ues_test branch into sp3_tdd_config1
parents
7c599a16
a099d412
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
206 additions
and
100 deletions
+206
-100
common/utils/itti/intertask_interface.c
common/utils/itti/intertask_interface.c
+9
-0
openair2/LAYER2/MAC/eNB_scheduler.c
openair2/LAYER2/MAC/eNB_scheduler.c
+4
-3
openair2/LAYER2/MAC/eNB_scheduler_RA.c
openair2/LAYER2/MAC/eNB_scheduler_RA.c
+26
-0
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+2
-10
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+14
-15
openair2/LAYER2/MAC/pre_processor.c
openair2/LAYER2/MAC/pre_processor.c
+16
-5
openair2/LAYER2/MAC/proto.h
openair2/LAYER2/MAC/proto.h
+3
-0
openair2/LAYER2/MAC/rar_tools.c
openair2/LAYER2/MAC/rar_tools.c
+1
-0
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
+4
-2
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c
+8
-2
openair2/RRC/LITE/rrc_common.c
openair2/RRC/LITE/rrc_common.c
+3
-3
openair2/RRC/LITE/rrc_eNB.c
openair2/RRC/LITE/rrc_eNB.c
+106
-58
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+10
-2
No files found.
common/utils/itti/intertask_interface.c
View file @
5532bc37
...
...
@@ -650,6 +650,15 @@ void itti_mark_task_ready(task_id_t task_id)
/* Mark the thread as using LFDS queue */
lfds611_queue_use
(
itti_desc
.
tasks
[
task_id
].
message_queue
);
#if defined(UE_EXPANSION) || defined(RTAI)
/* Assign low priority to created threads */
{
struct
sched_param
sched_param
;
sched_param
.
sched_priority
=
sched_get_priority_min
(
SCHED_FIFO
)
+
1
;
sched_setscheduler
(
0
,
SCHED_FIFO
,
&
sched_param
);
}
#endif
itti_desc
.
threads
[
thread_id
].
task_state
=
TASK_STATE_READY
;
itti_desc
.
ready_tasks
++
;
...
...
openair2/LAYER2/MAC/eNB_scheduler.c
View file @
5532bc37
...
...
@@ -541,13 +541,14 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id,
"UE %d rnti %x: sent PDCCH order for RAPROC waiting (failure timer %d)
\n
"
,
UE_id
,
rnti
,
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
);
if
((
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
%
4
0
)
==
0
)
UE_list
->
UE_sched_ctrl
[
UE_id
].
ra_pdcch_order_sent
=
0
;
// resend every
4
frames
if
((
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
%
8
0
)
==
0
)
UE_list
->
UE_sched_ctrl
[
UE_id
].
ra_pdcch_order_sent
=
0
;
// resend every
8
frames
}
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
++
;
// check threshold
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
>
20000
)
{
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
>
4000
)
{
// note: probably ul_failure_timer is should be less than UE radio link failure time(see T310/N310/N311)
// inform RRC of failure and clear timer
LOG_I
(
MAC
,
"UE %d rnti %x: UL Failure after repeated PDCCH orders: Triggering RRC
\n
"
,
...
...
openair2/LAYER2/MAC/eNB_scheduler_RA.c
View file @
5532bc37
...
...
@@ -1672,6 +1672,8 @@ initiate_ra_proc(module_id_t module_idP,
struct
PRACH_ConfigSIB_v1310
*
ext4_prach
=
NULL
;
PRACH_ParametersListCE_r13_t
*
prach_ParametersListCE_r13
=
NULL
;
static
uint8_t
failure_cnt
=
0
;
if
(
cc
->
radioResourceConfigCommon_BR
&&
cc
->
radioResourceConfigCommon_BR
->
ext4
)
{
...
...
@@ -1783,6 +1785,7 @@ initiate_ra_proc(module_id_t module_idP,
}
ra
[
i
].
RA_rnti
=
ra_rnti
;
ra
[
i
].
preamble_index
=
preamble_index
;
failure_cnt
=
0
;
LOG_D
(
MAC
,
"[eNB %d][RAPROC] CC_id %d Frame %d Activating RAR generation in Frame %d, subframe %d for process %d, rnti %x, state %d
\n
"
,
module_idP
,
CC_id
,
frameP
,
ra
[
i
].
Msg2_frame
,
...
...
@@ -1795,6 +1798,13 @@ initiate_ra_proc(module_id_t module_idP,
LOG_E
(
MAC
,
"[eNB %d][RAPROC] FAILURE: CC_id %d Frame %d Initiating RA procedure for preamble index %d
\n
"
,
module_idP
,
CC_id
,
frameP
,
preamble_index
);
failure_cnt
++
;
if
(
failure_cnt
>
20
)
{
LOG_E
(
MAC
,
"[eNB %d][RAPROC] CC_id %d Frame %d Clear Random access information
\n
"
,
module_idP
,
CC_id
,
frameP
);
clear_ra_proc
(
module_idP
,
CC_id
,
frameP
);
}
}
void
...
...
@@ -1817,6 +1827,22 @@ cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP,
ra
[
i
].
RRC_timer
=
20
;
ra
[
i
].
rnti
=
0
;
ra
[
i
].
msg3_round
=
0
;
LOG_I
(
MAC
,
"[eNB %d][RAPROC] CC_id %d Frame %d Canceled RA procedure for UE rnti %x
\n
"
,
module_idP
,
CC_id
,
frameP
,
rnti
);
}
}
}
void
clear_ra_proc
(
module_id_t
module_idP
,
int
CC_id
,
frame_t
frameP
)
{
unsigned
char
i
;
RA_t
*
ra
=
(
RA_t
*
)
&
RC
.
mac
[
module_idP
]
->
common_channels
[
CC_id
].
ra
[
0
];
for
(
i
=
0
;
i
<
NB_RA_PROC_MAX
;
i
++
)
{
LOG_D
(
MAC
,
"[eNB %d][RAPROC] CC_id %d Frame %d Clear Random access information rnti %x
\n
"
,
module_idP
,
CC_id
,
frameP
,
ra
[
i
].
rnti
);
ra
[
i
].
state
=
IDLE
;
ra
[
i
].
timing_offset
=
0
;
ra
[
i
].
RRC_timer
=
20
;
ra
[
i
].
rnti
=
0
;
ra
[
i
].
msg3_round
=
0
;
}
}
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
5532bc37
...
...
@@ -2273,16 +2273,8 @@ int rrc_mac_remove_ue(module_id_t mod_idP, rnti_t rntiP)
eNB_dlsch_info
[
mod_idP
][
pCC_id
][
UE_id
].
serving_num
=
0
;
// check if this has an RA process active
RA_t
*
ra
;
for
(
i
=
0
;
i
<
NB_RA_PROC_MAX
;
i
++
)
{
ra
=
(
RA_t
*
)
&
RC
.
mac
[
mod_idP
]
->
common_channels
[
pCC_id
].
ra
[
i
];
if
(
ra
->
rnti
==
rntiP
)
{
ra
->
state
=
IDLE
;
ra
->
timing_offset
=
0
;
ra
->
RRC_timer
=
20
;
ra
->
rnti
=
0
;
//break;
}
if
(
find_RA_id
(
mod_idP
,
pCC_id
,
rntiP
)
!=
-
1
)
{
cancel_ra_proc
(
mod_idP
,
pCC_id
,
0
,
rntiP
);
}
return
0
;
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
5532bc37
...
...
@@ -165,18 +165,16 @@ rx_sdu(const module_id_t enb_mod_idP,
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
],
ul_cqi
);
// AssertFatal(1==0,"ulsch in error\n");
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
]
==
3
)
{
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_scheduled
&=
(
~
(
1
<<
harq_pid
));
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
]
=
0
;
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_consecutive_errors
++
==
10
)
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
=
1
;
}
else
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
]
++
;
// AssertFatal(1==0,"ulsch in error\n");
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
]
==
3
)
{
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_scheduled
&=
(
~
(
1
<<
harq_pid
));
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
]
=
0
;
if
(
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_consecutive_errors
++
==
10
)
UE_list
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
=
1
;
if
(
find_RA_id
(
enb_mod_idP
,
CC_idP
,
current_rnti
)
!=
-
1
)
cancel_ra_proc
(
enb_mod_idP
,
CC_idP
,
frameP
,
current_rnti
);
}
else
UE_list
->
UE_sched_ctrl
[
UE_id
].
round_UL
[
CC_idP
][
harq_pid
]
++
;
return
;
}
...
...
@@ -204,7 +202,7 @@ rx_sdu(const module_id_t enb_mod_idP,
(
int
)
mac
->
common_channels
[
CC_idP
].
radioResourceConfigCommon
->
rach_ConfigCommon
.
maxHARQ_Msg3Tx
);
if
(
ra
[
RA_id
].
msg3_round
=
=
if
(
ra
[
RA_id
].
msg3_round
>
=
mac
->
common_channels
[
CC_idP
].
radioResourceConfigCommon
->
rach_ConfigCommon
.
maxHARQ_Msg3Tx
-
1
)
{
cancel_ra_proc
(
enb_mod_idP
,
CC_idP
,
frameP
,
current_rnti
);
...
...
@@ -309,7 +307,7 @@ rx_sdu(const module_id_t enb_mod_idP,
// prepare transmission of Msg4(RRCConnectionReconfiguration)
ra
->
state
=
MSGCRNTI
;
LOG_I
(
MAC
,
"[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) RRCConnectionReconfiguration(Msg4)"
,
"[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) RRCConnectionReconfiguration(Msg4)
\n
"
,
enb_mod_idP
,
frameP
,
subframeP
,
CC_idP
,
old_rnti
,
old_UE_id
);
//
UE_id
=
old_UE_id
;
...
...
@@ -2090,7 +2088,8 @@ void schedule_ulsch_rnti(module_id_t module_idP,
0
,
// ul_tx_mode
0
,
// current_tx_nb
0
,
// n_srs
get_TBS_UL
(
UE_template
->
mcs_UL
[
harq_pid
],
ulsch_ue_select
[
CC_id
].
list
[
ulsch_ue_num
].
nb_rb
)
// get_TBS_UL(UE_template->mcs_UL[harq_pid], ulsch_ue_select[CC_id].list[ulsch_ue_num].nb_rb)
UE_template
->
TBS_UL
[
harq_pid
]
);
#ifdef Rel14
if
(
UE_template
->
rach_resource_type
>
0
)
{
// This is a BL/CE UE allocation
...
...
openair2/LAYER2/MAC/pre_processor.c
View file @
5532bc37
...
...
@@ -2501,7 +2501,15 @@ void ulsch_scheduler_pre_ue_select(
ue_first_num
[
CC_id
]
++
;
continue
;
}
if
(
(
ulsch_ue_select
[
CC_id
].
ue_num
+
ul_inactivity_num
[
CC_id
]
)
<
ulsch_ue_max_num
[
CC_id
]
)
{
UE_sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
if
(
((
UE_sched_ctl
->
ul_inactivity_timer
>
20
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
))
||
((
UE_sched_ctl
->
ul_inactivity_timer
>
10
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
)
&&
(
mac_eNB_get_rrc_status
(
module_idP
,
UE_RNTI
(
module_idP
,
UE_id
))
<
RRC_CONNECTED
)))
{
first_ue_id
[
CC_id
][
ue_first_num
[
CC_id
]]
=
UE_id
;
first_ue_total
[
CC_id
]
[
ue_first_num
[
CC_id
]]
=
0
;
ue_first_num
[
CC_id
]
++
;
continue
;
}
/*if ( (ulsch_ue_select[CC_id].ue_num+ul_inactivity_num[CC_id] ) < ulsch_ue_max_num[CC_id] ) {
UE_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
uint8_t ul_period = 0;
if (cc->tdd_Config) {
...
...
@@ -2515,7 +2523,7 @@ void ulsch_scheduler_pre_ue_select(
ul_inactivity_num[CC_id] ++;
continue;
}
}
}
*/
}
}
...
...
@@ -2590,7 +2598,10 @@ void ulsch_scheduler_pre_ue_select(
HI_DCI0_req
=
&
eNB
->
HI_DCI0_req
[
CC_id
][
subframeP
].
hi_dci0_request_body
;
//SR BSR
if
(
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
ul_total_buffer
>
0
)
||
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
ul_SR
>
0
)
)
{
UE_sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
if
(
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
ul_total_buffer
>
0
)
||
(
UE_list
->
UE_template
[
CC_id
][
UE_id
].
ul_SR
>
0
)
||
((
UE_sched_ctl
->
ul_inactivity_timer
>
20
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
))
||
((
UE_sched_ctl
->
ul_inactivity_timer
>
10
)
&&
(
UE_sched_ctl
->
ul_scheduled
==
0
)
&&
(
mac_eNB_get_rrc_status
(
module_idP
,
UE_RNTI
(
module_idP
,
UE_id
))
<
RRC_CONNECTED
))
){
hi_dci0_pdu
=
&
HI_DCI0_req
->
hi_dci0_pdu_list
[
HI_DCI0_req
->
number_of_dci
+
HI_DCI0_req
->
number_of_hi
];
format_flag
=
2
;
if
(
CCE_allocation_infeasible
(
module_idP
,
CC_id
,
format_flag
,
subframeP
,
aggregation
,
rnti
)
==
1
)
{
...
...
@@ -2613,7 +2624,7 @@ void ulsch_scheduler_pre_ue_select(
}
}
//inactivity UE
if
(
(
ulsch_ue_select
[
CC_id
].
ue_num
+
ul_inactivity_num
[
CC_id
])
<
ulsch_ue_max_num
[
CC_id
]
)
{
/*
if ( (ulsch_ue_select[CC_id].ue_num+ul_inactivity_num[CC_id]) < ulsch_ue_max_num[CC_id] ) {
UE_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
uint8_t ul_period = 0;
if (cc->tdd_Config) {
...
...
@@ -2627,7 +2638,7 @@ void ulsch_scheduler_pre_ue_select(
ul_inactivity_num[CC_id]++;
continue;
}
}
}
*/
}
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
...
...
openair2/LAYER2/MAC/proto.h
View file @
5532bc37
...
...
@@ -299,6 +299,9 @@ void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP,
@param Msg3_frame frame where scheduling takes place
@param Msg3_subframe subframe where scheduling takes place
*/
void
clear_ra_proc
(
module_id_t
module_idP
,
int
CC_id
,
frame_t
frameP
);
void
set_msg3_subframe
(
module_id_t
Mod_id
,
int
CC_id
,
int
frame
,
...
...
openair2/LAYER2/MAC/rar_tools.c
View file @
5532bc37
...
...
@@ -89,6 +89,7 @@ fill_rar(const module_id_t module_idP,
ra
->
msg3_TPC
=
3
;
ra
->
msg3_ULdelay
=
0
;
ra
->
msg3_cqireq
=
0
;
ra
->
msg3_round
=
0
;
rar
[
2
]
|=
((
ra
->
msg3_mcs
&
0x8
)
>>
3
);
// mcs 10
rar
[
3
]
=
(((
ra
->
msg3_mcs
&
0x7
)
<<
5
))
|
((
ra
->
msg3_TPC
&
7
)
<<
2
)
|
...
...
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
View file @
5532bc37
...
...
@@ -550,8 +550,10 @@ rlc_am_mac_status_indication (
}
rlc
->
last_absolute_subframe_status_indication
=
PROTOCOL_CTXT_TIME_MILLI_SECONDS
(
ctxt_pP
);
if
(
tb_sizeP
>
0
)
rlc
->
nb_bytes_requested_by_mac
=
tb_sizeP
;
if
(
tb_sizeP
>
0
)
{
rlc
->
nb_bytes_requested_by_mac
=
tb_sizeP
;
}
status_resp
.
buffer_occupancy_in_bytes
=
rlc_am_get_buffer_occupancy_in_bytes
(
ctxt_pP
,
rlc
);
...
...
openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c
View file @
5532bc37
...
...
@@ -396,14 +396,20 @@ rlc_am_receive_process_data_pdu (
}
if
(
pdu_info_p
->
sn
==
rlc_pP
->
vr_r
)
{
mem_block_t
*
cursor_p
=
rlc_pP
->
receiver_buffer
.
head
;
rlc_am_rx_pdu_management_t
*
pdu_cursor_mgnt_p
=
(
rlc_am_rx_pdu_management_t
*
)
(
cursor_p
->
data
);
if
(
(((
rlc_am_rx_pdu_management_t
*
)(
tb_pP
->
data
))
->
all_segments_received
)
==
(
pdu_cursor_mgnt_p
->
all_segments_received
)){
if
(((
rlc_am_rx_pdu_management_t
*
)(
tb_pP
->
data
))
->
all_segments_received
)
{
rlc_am_rx_update_vr_r
(
ctxt_pP
,
rlc_pP
,
tb_pP
);
rlc_pP
->
vr_mr
=
(
rlc_pP
->
vr_r
+
RLC_AM_WINDOW_SIZE
)
&
RLC_AM_SN_MASK
;
}
reassemble
=
rlc_am_rx_check_vr_reassemble
(
ctxt_pP
,
rlc_pP
);
//TODO : optimization : check whether a reassembly is needed by looking at LI, FI, SO, etc...
}
else
{
LOG_E
(
RLC
,
"BAD all_segments_received!!! discard buffer!!!
\n
"
);
/* Discard received block if out of window, duplicate or header error */
free_mem_block
(
tb_pP
,
__func__
);
}
}
//FNA: fix check VrX out of receiving window
...
...
openair2/RRC/LITE/rrc_common.c
View file @
5532bc37
...
...
@@ -348,7 +348,7 @@ rrc_rx_tx(
}
if
(
ue_context_p
->
ue_context
.
ul_failure_timer
>
0
)
{
ue_context_p
->
ue_context
.
ul_failure_timer
++
;
if
(
ue_context_p
->
ue_context
.
ul_failure_timer
>=
8
)
{
if
(
ue_context_p
->
ue_context
.
ul_failure_timer
>=
20000
)
{
// remove UE after 20 seconds after MAC has indicated UL failure
LOG_I
(
RRC
,
"Removing UE %x instance
\n
"
,
ue_context_p
->
ue_context
.
rnti
);
ue_to_be_removed
=
ue_context_p
;
...
...
@@ -513,14 +513,14 @@ rrc_rx_tx(
}
}
if
(
ue_to_be_removed
)
{
if
(
ue_to_be_removed
->
ue_context
.
ul_failure_timer
>=
8
)
{
if
(
ue_to_be_removed
->
ue_context
.
ul_failure_timer
>=
20000
)
{
ue_to_be_removed
->
ue_context
.
ue_release_timer_s1
=
1
;
ue_to_be_removed
->
ue_context
.
ue_release_timer_thres_s1
=
200
;
ue_to_be_removed
->
ue_context
.
ue_release_timer
=
0
;
ue_to_be_removed
->
ue_context
.
ue_reestablishment_timer
=
0
;
}
rrc_eNB_free_UE
(
ctxt_pP
->
module_id
,
ue_to_be_removed
);
if
(
ue_to_be_removed
->
ue_context
.
ul_failure_timer
>=
8
){
if
(
ue_to_be_removed
->
ue_context
.
ul_failure_timer
>=
20000
){
ue_to_be_removed
->
ue_context
.
ul_failure_timer
=
0
;
}
}
...
...
openair2/RRC/LITE/rrc_eNB.c
View file @
5532bc37
This diff is collapsed.
Click to expand it.
targets/RT/USER/lte-ru.c
View file @
5532bc37
...
...
@@ -1527,8 +1527,10 @@ static void* ru_thread( void* param ) {
// the thread can now be woken up
AssertFatal
(
pthread_cond_signal
(
&
ru
->
proc
.
cond_phy_tx
)
==
0
,
"ERROR pthread_cond_signal for phy_tx thread
\n
"
);
}
else
{
LOG_E
(
PHY
,
"phy tx thread busy, skipping
\n
"
);
++
ru
->
proc
.
instance_cnt_phy_tx
;
}
else
LOG_W
(
PHY
,
"phy tx thread busy, skipping
\n
"
);
pthread_mutex_unlock
(
&
ru
->
proc
.
mutex_phy_tx
);
}
else
{
phy_tx_end
=
1
;
...
...
@@ -1810,8 +1812,10 @@ static void* eNB_thread_phy_tx( void* param ) {
// the thread can now be woken up
AssertFatal
(
pthread_cond_signal
(
&
ru
->
proc
.
cond_rf_tx
)
==
0
,
"ERROR pthread_cond_signal for rf_tx thread
\n
"
);
}
else
{
LOG_E
(
PHY
,
"rf tx thread busy, skipping
\n
"
);
ru
->
proc
.
instance_cnt_rf_tx
++
;
}
else
LOG_W
(
PHY
,
"rf tx thread busy, skipping
\n
"
);
pthread_mutex_unlock
(
&
ru
->
proc
.
mutex_rf_tx
);
}
if
(
release_thread
(
&
proc
->
mutex_phy_tx
,
&
proc
->
instance_cnt_phy_tx
,
"eNB_thread_phy_tx"
)
<
0
)
break
;
...
...
@@ -1855,6 +1859,10 @@ static void* rf_tx( void* param ) {
if
(
ru
->
fh_north_out
)
ru
->
fh_north_out
(
ru
);
}
if
(
release_thread
(
&
proc
->
mutex_rf_tx
,
&
proc
->
instance_cnt_rf_tx
,
"rf_tx"
)
<
0
)
break
;
if
(
proc
->
instance_cnt_rf_tx
>=
0
){
late_control
=
STATE_BURST_TERMINATE
;
LOG_E
(
PHY
,
"detect rf tx busy change mode TX failsafe
\n
"
);
}
}
LOG_I
(
PHY
,
"Exiting rf TX
\n
"
);
...
...
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