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
Michael Black
OpenXG UE
Commits
faee5824
Commit
faee5824
authored
Mar 09, 2018
by
Cedric Roux
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/bugfixes-2018-w10' into develop_integration_2018_w10
parents
ea08ed37
2f991143
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
275 additions
and
179 deletions
+275
-179
common/utils/itti/intertask_interface.c
common/utils/itti/intertask_interface.c
+97
-0
common/utils/itti/intertask_interface.h
common/utils/itti/intertask_interface.h
+12
-0
openair1/PHY/defs.h
openair1/PHY/defs.h
+2
-0
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+116
-157
openair2/LAYER2/MAC/proto.h
openair2/LAYER2/MAC/proto.h
+9
-9
openair2/LAYER2/RLC/rlc.c
openair2/LAYER2/RLC/rlc.c
+9
-0
openair3/UDP/udp_eNB_task.c
openair3/UDP/udp_eNB_task.c
+12
-1
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+0
-7
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+16
-1
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+2
-4
No files found.
common/utils/itti/intertask_interface.c
View file @
faee5824
...
...
@@ -391,6 +391,103 @@ int itti_send_msg_to_task(task_id_t destination_task_id, instance_t instance, Me
return
0
;
}
/* same as itti_send_msg_to_task but returns -1 in case of failure instead of crashing */
/* TODO: this is a hack - the whole logic needs a proper rework. */
/* look for HACK_RLC_UM_LIMIT for others places related to the hack. Please do not remove this comment. */
int
itti_try_send_msg_to_task
(
task_id_t
destination_task_id
,
instance_t
instance
,
MessageDef
*
message
)
{
thread_id_t
destination_thread_id
;
task_id_t
origin_task_id
;
message_list_t
*
new
;
uint32_t
priority
;
message_number_t
message_number
;
uint32_t
message_id
;
AssertFatal
(
message
!=
NULL
,
"Message is NULL!
\n
"
);
AssertFatal
(
destination_task_id
<
itti_desc
.
task_max
,
"Destination task id (%d) is out of range (%d)
\n
"
,
destination_task_id
,
itti_desc
.
task_max
);
destination_thread_id
=
TASK_GET_THREAD_ID
(
destination_task_id
);
message
->
ittiMsgHeader
.
destinationTaskId
=
destination_task_id
;
message
->
ittiMsgHeader
.
instance
=
instance
;
message
->
ittiMsgHeader
.
lte_time
.
frame
=
itti_desc
.
lte_time
.
frame
;
message
->
ittiMsgHeader
.
lte_time
.
slot
=
itti_desc
.
lte_time
.
slot
;
message_id
=
message
->
ittiMsgHeader
.
messageId
;
AssertFatal
(
message_id
<
itti_desc
.
messages_id_max
,
"Message id (%d) is out of range (%d)!
\n
"
,
message_id
,
itti_desc
.
messages_id_max
);
origin_task_id
=
ITTI_MSG_ORIGIN_ID
(
message
);
priority
=
itti_get_message_priority
(
message_id
);
/* Increment the global message number */
message_number
=
itti_increment_message_number
();
itti_dump_queue_message
(
origin_task_id
,
message_number
,
message
,
itti_desc
.
messages_info
[
message_id
].
name
,
sizeof
(
MessageHeader
)
+
message
->
ittiMsgHeader
.
ittiMsgSize
);
if
(
destination_task_id
!=
TASK_UNKNOWN
)
{
if
(
itti_desc
.
threads
[
destination_thread_id
].
task_state
==
TASK_STATE_ENDED
)
{
ITTI_DEBUG
(
ITTI_DEBUG_ISSUES
,
" Message %s, number %lu with priority %d can not be sent from %s to queue (%u:%s), ended destination task!
\n
"
,
itti_desc
.
messages_info
[
message_id
].
name
,
message_number
,
priority
,
itti_get_task_name
(
origin_task_id
),
destination_task_id
,
itti_get_task_name
(
destination_task_id
));
}
else
{
/* We cannot send a message if the task is not running */
AssertFatal
(
itti_desc
.
threads
[
destination_thread_id
].
task_state
==
TASK_STATE_READY
,
"Task %s Cannot send message %s (%d) to thread %d, it is not in ready state (%d)!
\n
"
,
itti_get_task_name
(
origin_task_id
),
itti_desc
.
messages_info
[
message_id
].
name
,
message_id
,
destination_thread_id
,
itti_desc
.
threads
[
destination_thread_id
].
task_state
);
/* Allocate new list element */
new
=
(
message_list_t
*
)
itti_malloc
(
origin_task_id
,
destination_task_id
,
sizeof
(
struct
message_list_s
));
/* Fill in members */
new
->
msg
=
message
;
new
->
message_number
=
message_number
;
new
->
message_priority
=
priority
;
/* Enqueue message in destination task queue */
if
(
lfds611_queue_enqueue
(
itti_desc
.
tasks
[
destination_task_id
].
message_queue
,
new
)
==
0
)
{
itti_free
(
origin_task_id
,
new
);
return
-
1
;
}
{
/* Only use event fd for tasks, subtasks will pool the queue */
if
(
TASK_GET_PARENT_TASK_ID
(
destination_task_id
)
==
TASK_UNKNOWN
)
{
ssize_t
write_ret
;
eventfd_t
sem_counter
=
1
;
/* Call to write for an event fd must be of 8 bytes */
write_ret
=
write
(
itti_desc
.
threads
[
destination_thread_id
].
task_event_fd
,
&
sem_counter
,
sizeof
(
sem_counter
));
AssertFatal
(
write_ret
==
sizeof
(
sem_counter
),
"Write to task message FD (%d) failed (%d/%d)
\n
"
,
destination_thread_id
,
(
int
)
write_ret
,
(
int
)
sizeof
(
sem_counter
));
}
}
ITTI_DEBUG
(
ITTI_DEBUG_SEND
,
" Message %s, number %lu with priority %d successfully sent from %s to queue (%u:%s)
\n
"
,
itti_desc
.
messages_info
[
message_id
].
name
,
message_number
,
priority
,
itti_get_task_name
(
origin_task_id
),
destination_task_id
,
itti_get_task_name
(
destination_task_id
));
}
}
else
{
/* This is a debug message to TASK_UNKNOWN, we can release safely release it */
int
result
=
itti_free
(
origin_task_id
,
message
);
AssertFatal
(
result
==
EXIT_SUCCESS
,
"Failed to free memory (%d)!
\n
"
,
result
);
}
return
0
;
}
void
itti_subscribe_event_fd
(
task_id_t
task_id
,
int
fd
)
{
thread_id_t
thread_id
;
...
...
common/utils/itti/intertask_interface.h
View file @
faee5824
...
...
@@ -108,6 +108,18 @@ int itti_send_broadcast_message(MessageDef *message_p);
**/
int
itti_send_msg_to_task
(
task_id_t
task_id
,
instance_t
instance
,
MessageDef
*
message
);
/* TODO: this is a hack. Almost no caller of itti_send_msg_to_task checks
* the return value so it has been changed to crash the program in case
* of failure instead of returning -1 as the documentation above says.
* The RLC UM code may receive too much data when doing UDP at a higher
* throughput than the link allows and so for this specific case we need
* a version that actually returns -1 on failure.
*
* This needs to be cleaned at some point.
*/
/* look for HACK_RLC_UM_LIMIT for others places related to the hack. Please do not remove this comment. */
int
itti_try_send_msg_to_task
(
task_id_t
task_id
,
instance_t
instance
,
MessageDef
*
message
);
/** \brief Add a new fd to monitor.
* NOTE: it is up to the user to read data associated with the fd
* \param task_id Task ID of the receiving task
...
...
openair1/PHY/defs.h
View file @
faee5824
...
...
@@ -738,6 +738,8 @@ typedef struct RU_t_s{
void
(
*
fh_south_asynch_in
)(
struct
RU_t_s
*
ru
,
int
*
frame
,
int
*
subframe
);
/// function pointer to initialization function for radio interface
int
(
*
start_rf
)(
struct
RU_t_s
*
ru
);
/// function pointer to release function for radio interface
int
(
*
stop_rf
)(
struct
RU_t_s
*
ru
);
/// function pointer to initialization function for radio interface
int
(
*
start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_eNB_s
*
eNB
);
/// function pointer to RX front-end processing routine (DFTs/prefix removal or NULL)
...
...
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
View file @
faee5824
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/proto.h
View file @
faee5824
...
...
@@ -855,15 +855,15 @@ in the DLSCH buffer.
@param post_padding number of bytes for padding at the end of MAC PDU
@returns Number of bytes used for header
*/
unsigned
char
generate_dlsch_header
(
unsigned
char
*
mac_header
,
unsigned
char
num_sdus
,
unsigned
short
*
sdu_lengths
,
unsigned
char
*
sdu_lcids
,
unsigned
char
drx_cmd
,
unsigned
short
timing_advance_cmd
,
unsigned
char
*
ue_cont_res_id
,
unsigned
char
short_padding
,
unsigned
short
post_padding
);
int
generate_dlsch_header
(
unsigned
char
*
mac_header
,
unsigned
char
num_sdus
,
unsigned
short
*
sdu_lengths
,
unsigned
char
*
sdu_lcids
,
unsigned
char
drx_cmd
,
unsigned
short
timing_advance_cmd
,
unsigned
char
*
ue_cont_res_id
,
unsigned
char
short_padding
,
unsigned
short
post_padding
);
/** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI), RRCConnectionSetup and RRCConnectionReconfiguration messages.
@param Mod_id Instance ID of eNB
...
...
openair2/LAYER2/RLC/rlc.c
View file @
faee5824
...
...
@@ -437,6 +437,15 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP,
break
;
case
RLC_MODE_UM
:
/* TODO: this is a hack, needs better solution. Let's not use too
* much memory and store at maximum 5 millions bytes.
*/
/* look for HACK_RLC_UM_LIMIT for others places related to the hack. Please do not remove this comment. */
if
(
rlc_um_get_buffer_occupancy
(
&
rlc_union_p
->
rlc
.
um
)
>
5000000
)
{
free_mem_block
(
sdu_pP
,
__func__
);
return
RLC_OP_STATUS_OUT_OF_RESSOURCES
;
}
new_sdu_p
=
get_free_mem_block
(
sdu_sizeP
+
sizeof
(
struct
rlc_um_data_req_alloc
),
__func__
);
if
(
new_sdu_p
!=
NULL
)
{
...
...
openair3/UDP/udp_eNB_task.c
View file @
faee5824
...
...
@@ -270,10 +270,21 @@ void udp_eNB_receiver(struct udp_socket_desc_s *udp_sock_pP)
n
,
inet_ntoa
(
addr
.
sin_addr
),
ntohs
(
addr
.
sin_port
));
#endif
if
(
itti_send_msg_to_task
(
udp_sock_pP
->
task_id
,
INSTANCE_DEFAULT
,
message_p
)
<
0
)
{
/* TODO: this is a hack. Let's accept failures and do nothing when
* it happens. Since itti_send_msg_to_task crashes when the message
* queue is full we wrote itti_try_send_msg_to_task that returns -1
* if the queue is full.
*/
/* look for HACK_RLC_UM_LIMIT for others places related to the hack. Please do not remove this comment. */
//if (itti_send_msg_to_task(udp_sock_pP->task_id, INSTANCE_DEFAULT, message_p) < 0) {
if
(
itti_try_send_msg_to_task
(
udp_sock_pP
->
task_id
,
INSTANCE_DEFAULT
,
message_p
)
<
0
)
{
#if 0
LOG_I(UDP_, "Failed to send message %d to task %d\n",
UDP_DATA_IND,
udp_sock_pP->task_id);
#endif
itti_free
(
TASK_UDP
,
message_p
);
itti_free
(
TASK_UDP
,
forwarded_buffer
);
return
;
}
}
...
...
targets/RT/USER/lte-enb.c
View file @
faee5824
...
...
@@ -163,13 +163,6 @@ extern void add_subframe(uint16_t *frameP, uint16_t *subframeP, int offset);
static
inline
int
rxtx
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
char
*
thread_name
)
{
static
double
cpu_freq_GHz
=
0
.
0
;
if
(
cpu_freq_GHz
==
0
.
0
)
cpu_freq_GHz
=
get_cpu_freq_GHz
();
start_meas
(
&
softmodem_stats_rxtx_sf
);
// *******************************************************************
...
...
targets/RT/USER/lte-ru.c
View file @
faee5824
...
...
@@ -1523,7 +1523,13 @@ static void* ru_thread( void* param ) {
printf
(
"Exiting ru_thread
\n
"
);
if
(
ru
->
stop_rf
!=
NULL
)
{
if
(
ru
->
stop_rf
(
ru
)
!=
0
)
LOG_E
(
HW
,
"Could not stop the RF device
\n
"
);
else
LOG_I
(
PHY
,
"RU %d rf device stopped
\n
"
,
ru
->
idx
);
}
ru_thread_status
=
0
;
return
&
ru_thread_status
;
...
...
@@ -1617,6 +1623,12 @@ int start_rf(RU_t *ru) {
return
(
ru
->
rfdevice
.
trx_start_func
(
&
ru
->
rfdevice
));
}
int
stop_rf
(
RU_t
*
ru
)
{
ru
->
rfdevice
.
trx_end_func
(
&
ru
->
rfdevice
);
return
0
;
}
extern
void
fep_full
(
RU_t
*
ru
);
extern
void
ru_fep_full_2thread
(
RU_t
*
ru
);
extern
void
feptx_ofdm
(
RU_t
*
ru
);
...
...
@@ -2082,6 +2094,7 @@ void set_function_spec_param(RU_t *ru)
ru
->
fh_south_in
=
rx_rf
;
// local synchronous RF RX
ru
->
fh_south_out
=
tx_rf
;
// local synchronous RF TX
ru
->
start_rf
=
start_rf
;
// need to start the local RF interface
ru
->
stop_rf
=
stop_rf
;
printf
(
"configuring ru_id %d (start_rf %p)
\n
"
,
ru
->
idx
,
start_rf
);
/*
if (ru->function == eNodeB_3GPP) { // configure RF parameters only for 3GPP eNodeB, we need to get them from RAU otherwise
...
...
@@ -2113,6 +2126,7 @@ void set_function_spec_param(RU_t *ru)
ru
->
fh_south_asynch_in
=
NULL
;
// no asynchronous UL
}
ru
->
start_rf
=
NULL
;
// no local RF
ru
->
stop_rf
=
NULL
;
ru
->
start_if
=
start_if
;
// need to start if interface for IF5
ru
->
ifdevice
.
host_type
=
RAU_HOST
;
ru
->
ifdevice
.
eth_params
=
&
ru
->
eth_params
;
...
...
@@ -2137,6 +2151,7 @@ void set_function_spec_param(RU_t *ru)
ru
->
fh_north_out
=
NULL
;
ru
->
fh_north_asynch_in
=
NULL
;
ru
->
start_rf
=
NULL
;
// no local RF
ru
->
stop_rf
=
NULL
;
ru
->
start_if
=
start_if
;
// need to start if interface for IF4p5
ru
->
ifdevice
.
host_type
=
RAU_HOST
;
ru
->
ifdevice
.
eth_params
=
&
ru
->
eth_params
;
...
...
targets/RT/USER/lte-softmodem.c
View file @
faee5824
...
...
@@ -1005,10 +1005,8 @@ int main( int argc, char **argv )
printf
(
"Runtime table
\n
"
);
fill_modeled_runtime_table
(
runtime_phy_rx
,
runtime_phy_tx
);
cpuf
=
get_cpu_freq_GHz
();
#ifndef DEADLINE_SCHEDULER
printf
(
"NO deadline scheduler
\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