diff options
Diffstat (limited to 'stacks/vpp/patch/vpp.patch')
-rw-r--r-- | stacks/vpp/patch/vpp.patch | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/stacks/vpp/patch/vpp.patch b/stacks/vpp/patch/vpp.patch new file mode 100644 index 0000000..a9b5427 --- /dev/null +++ b/stacks/vpp/patch/vpp.patch @@ -0,0 +1,104 @@ +diff --git a/src/vcl/CMakeLists.txt b/src/vcl/CMakeLists.txt +index 2578a37..21245e4 100644 +--- a/src/vcl/CMakeLists.txt ++++ b/src/vcl/CMakeLists.txt +@@ -38,6 +38,19 @@ add_vpp_library(vcl_ldpreload + vppinfra svm vlibmemoryclient rt pthread vppcom dl + ) + ++set(DMM_HEADERS_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../../release/include/) ++include_directories(${DMM_HEADERS_DIR}) ++ ++add_vpp_library(dmm_vcl ++ SOURCES ++ dmm_vcl_adpt.c ++ ldp_socket_wrapper.c ++ ldp.c ++ ++ LINK_LIBRARIES ++ vppinfra svm vlibmemoryclient vppcom vcl_ldpreload pthread rt dl ++) ++ + add_vpp_headers(vcl + ldp.h + sock_test.h +diff --git a/src/vcl/ldp.c b/src/vcl/ldp.c +index 9e00d7e..2ba1099 100644 +--- a/src/vcl/ldp.c ++++ b/src/vcl/ldp.c +@@ -26,6 +26,7 @@ + #include <vcl/ldp.h> + #include <sys/time.h> + ++#include <vcl/vcl_private.h> + #include <vcl/vcl_locked.h> + #include <vppinfra/time.h> + #include <vppinfra/bitmap.h> +@@ -672,6 +673,7 @@ ldp_pselect (int nfds, fd_set * __restrict readfds, + const __sigset_t * __restrict sigmask) + { + u32 minbits = clib_max (nfds, BITS (uword)), n_bytes; ++ vcl_set_worker_index(0); + ldp_worker_ctx_t *ldpw = ldp_worker_get_current (); + struct timespec libc_tspec = { 0 }; + f64 time_out, vcl_timeout = 0; +@@ -2170,6 +2172,7 @@ static inline int + ldp_epoll_pwait (int epfd, struct epoll_event *events, int maxevents, + int timeout, const sigset_t * sigmask) + { ++ vcl_set_worker_index(0); + ldp_worker_ctx_t *ldpw = ldp_worker_get_current (); + double time_to_wait = (double) 0, max_time; + int libc_epfd, rv = 0; +diff --git a/src/vcl/vcl_locked.c b/src/vcl/vcl_locked.c +index 5539191..528e331 100644 +--- a/src/vcl/vcl_locked.c ++++ b/src/vcl/vcl_locked.c +@@ -468,7 +468,7 @@ vls_mt_rel_locks (int locks_acq) + + #define vls_mt_guard(_vls, _op) \ + int _locks_acq = 0; \ +- if (PREDICT_FALSE (vcl_get_worker_index () == ~0)) \ ++ if (PREDICT_FALSE (vcl_get_worker_index () == ~0)); \ + vls_mt_add (); \ + if (PREDICT_FALSE (vlsl->vls_mt_n_threads > 1)) \ + vls_mt_acq_locks (_vls, _op, &_locks_acq); \ +@@ -779,8 +779,10 @@ vls_epoll_ctl (vls_handle_t ep_vlsh, int op, vls_handle_t vlsh, + vls_table_rlock (); + ep_vls = vls_get_and_lock (ep_vlsh); + vls = vls_get_and_lock (vlsh); ++ vls_mt_guard (0, VLS_MT_OP_XPOLL); + ep_sh = vls_to_sh (ep_vls); + sh = vls_to_sh (vls); ++ vls_mt_unguard (); + + if (PREDICT_FALSE (!vlsl->epoll_mp_check)) + vls_epoll_ctl_mp_checks (vls, op); +@@ -886,6 +888,7 @@ vls_unshare_vcl_worker_sessions (vcl_worker_t * wrk) + vls_table_wunlock (); + } + ++#if 0 + static void + vls_cleanup_vcl_worker (vcl_worker_t * wrk) + { +@@ -1043,7 +1046,7 @@ vls_app_fork_parent_handler (void) + while (vcm->forking) + ; + } +- ++#endif + void + vls_app_exit (void) + { +@@ -1061,8 +1064,8 @@ vls_app_create (char *app_name) + vlsm = clib_mem_alloc (sizeof (vls_main_t)); + clib_memset (vlsm, 0, sizeof (*vlsm)); + clib_rwlock_init (&vlsm->vls_table_lock); +- pthread_atfork (vls_app_pre_fork, vls_app_fork_parent_handler, +- vls_app_fork_child_handler); ++ /* pthread_atfork (vls_app_pre_fork, vls_app_fork_parent_handler, ++ vls_app_fork_child_handler);*/ + atexit (vls_app_exit); + vlsl->vls_wrk_index = vcl_get_worker_index (); + vls_mt_locks_init (); |