Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
oai
openairinterface5G
Commits
0fe08538
Commit
0fe08538
authored
Mar 21, 2016
by
Cedric Roux
Browse files
add __synch_synchronize for the T_cache
it probably makes things zillion times slower but it seems to be necessary
parent
7c7d5cae
Changes
3
Hide whitespace changes
Inline
Side-by-side
T.c
View file @
0fe08538
...
...
@@ -54,9 +54,16 @@ static void *T_send_thread(void *_)
{
while
(
1
)
{
usleep
(
5000
);
__sync_synchronize
();
while
(
T_cache
[
T_busylist_head
].
busy
)
{
char
*
b
=
T_cache
[
T_busylist_head
].
buffer
;
int
l
=
T_cache
[
T_busylist_head
].
length
;
char
*
b
;
int
l
;
/* TODO: be sure about those memory barriers - in doubt one is
* put here too
*/
__sync_synchronize
();
b
=
T_cache
[
T_busylist_head
].
buffer
;
l
=
T_cache
[
T_busylist_head
].
length
;
while
(
l
)
{
int
done
=
write
(
T_socket
,
b
,
l
);
if
(
done
<=
0
)
{
...
...
@@ -123,7 +130,7 @@ void T_connect_to_tracer(char *addr, int port)
#ifdef T_USE_SHARED_MEMORY
/* setup shared memory */
T_shm_fd
=
shm_open
(
T_SHM_FILENAME
,
O_RDWR
,
0666
);
T_shm_fd
=
shm_open
(
T_SHM_FILENAME
,
O_RDWR
/*| O_SYNC*/
,
0666
);
shm_unlink
(
T_SHM_FILENAME
);
if
(
T_shm_fd
==
-
1
)
{
perror
(
T_SHM_FILENAME
);
abort
();
}
T_cache
=
mmap
(
NULL
,
T_CACHE_SIZE
*
sizeof
(
T_cache_t
),
...
...
T.h
View file @
0fe08538
...
...
@@ -118,16 +118,18 @@ extern T_cache_t *T_cache;
#ifdef T_USE_SHARED_MEMORY
#define T_SEND() \
T_cache[T_LOCAL_slot].busy = 1; \
T_cache[T_LOCAL_slot].length = T_LOCAL_size; \
__sync_synchronize(); \
T_cache[T_LOCAL_slot].busy = 1; \
T_send(T_LOCAL_buf, T_LOCAL_size)
#else
/* T_USE_SHARED_MEMORY */
/* when not using shared memory, wait for send to finish */
#define T_SEND() \
T_cache[T_LOCAL_slot].busy = 1; \
T_cache[T_LOCAL_slot].length = T_LOCAL_size; \
__sync_synchronize(); \
T_cache[T_LOCAL_slot].busy = 1; \
T_send(T_LOCAL_buf, T_LOCAL_size); \
while (T_cache[T_LOCAL_slot].busy) usleep(1*1000)
...
...
tracer/main.c
View file @
0fe08538
...
...
@@ -356,7 +356,8 @@ void wait_message(void)
void
init_shm
(
void
)
{
int
s
=
shm_open
(
T_SHM_FILENAME
,
O_RDWR
|
O_CREAT
,
0666
);
int
i
;
int
s
=
shm_open
(
T_SHM_FILENAME
,
O_RDWR
|
O_CREAT
/*| O_SYNC*/
,
0666
);
if
(
s
==
-
1
)
{
perror
(
T_SHM_FILENAME
);
abort
();
}
if
(
ftruncate
(
s
,
T_CACHE_SIZE
*
sizeof
(
T_cache_t
)))
{
perror
(
T_SHM_FILENAME
);
abort
();
}
...
...
@@ -365,6 +366,12 @@ void init_shm(void)
if
(
T_cache
==
NULL
)
{
perror
(
T_SHM_FILENAME
);
abort
();
}
close
(
s
);
/* let's garbage the memory to catch some potential problems
* (think multiprocessor sync issues, barriers, etc.)
*/
memset
(
T_cache
,
0x55
,
T_CACHE_SIZE
*
sizeof
(
T_cache_t
));
for
(
i
=
0
;
i
<
T_CACHE_SIZE
;
i
++
)
T_cache
[
i
].
busy
=
0
;
}
#endif
/* T_USE_SHARED_MEMORY */
...
...
@@ -555,6 +562,7 @@ no_init_message:
while
(
1
)
{
#ifdef T_USE_SHARED_MEMORY
wait_message
();
__sync_synchronize
();
#endif
#ifdef T_USE_SHARED_MEMORY
...
...
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