summaryrefslogtreecommitdiffstats
path: root/build-data
AgeCommit message (Expand)AuthorFilesLines
2018-12-17Added CMake building system for libmemifmsardara1-1/+38
2018-11-13japi: Move Java API binding to cmakeMohsin Kazmi1-2/+40
2018-09-27Revert "japi: Move Java API binding to cmake"Damjan Marion1-40/+2
2018-09-27dpdk_plugin: fix mlx5 build and runtime issuesSirshak Das1-0/+5
2018-09-26japi: Move Java API binding to cmakeMohsin Kazmi1-2/+40
2018-09-25Enable verbose output during VPP cmake compilingLijian Zhang1-0/+3
2018-09-21add: nasm and ipsec-mb into vpp-ext-deps packagingDamjan Marion1-2/+2
2018-09-20rename vpp-dpdk-dev to vpp-ext-depsDamjan Marion3-5/+23
2018-09-13Fix: vppapigen make build fails on fresh installPaul Vinciguerra1-2/+2
2018-09-12cmake: create cmake VPP module, update sample-plugin so it uses itDamjan Marion1-0/+26
2018-09-12Always use 'lib' instead of 'lib64'Damjan Marion2-6/+2
2018-09-10cmake VOM: j factor chosen based on number of coresNeale Ranns1-1/+2
2018-09-09cmake: Move VOM to cmakeMohsin Kazmi2-2/+40
2018-09-07post move-to-cmake cleanupDamjan Marion4-71/+0
2018-09-02Switch to cmakeDamjan Marion3-47/+0
2018-09-01cmake: pass linker flags, use devtoolset on centos 7Damjan Marion1-8/+21
2018-08-17CMake as an alternative to autotools (experimental)Damjan Marion2-0/+19
2018-08-01Move java api to extras/Damjan Marion3-2/+8
2018-07-27-DCLIB_DEBUG => turn on extra checks in dlmallocDave Barach1-1/+2
2018-07-18Add config option to use dlmalloc instead of mheapDave Barach1-1/+3
2018-06-04Enable Position Independent Executable for production VPPNeale Ranns1-1/+1
2018-05-28VPP-1284: Fix for TLS corruption on ARM platformsSachin Saxena1-2/+2
2018-05-16Fix broken compilation for non-numa aware platformsSachin Saxena2-1/+2
2018-05-12dpdk: Add build related keywords for failsafe PMDRui Cai3-0/+9
2018-05-04build-data: Common makefile for NXP DPAA1/DPAA2 platformsSachin Saxena2-66/+87
2018-04-27Move VOM to extras/vomDamjan Marion2-5/+7
2018-03-28Build libmemif as part of verify jobDamjan Marion2-0/+4
2018-03-15use system provided ccache linksDamjan Marion1-0/+1
2018-03-12License text cleanupDave Barach9-0/+114
2018-01-30VPP-899: Run VPP under SELinuxBilly McFall1-0/+4
2018-01-23VPPAPIGEN: vppapigen replacement in Python PLY.Ole Troan1-0/+4
2018-01-10makefile set CXXFLAGS so they are propageted to sub-buildsNeale Ranns1-0/+3
2018-01-08Fix Debian Packaging on AARCH64Nitin Saxena1-1/+1
2017-11-11Handle CPU flags from autotools projectDamjan Marion1-31/+13
2017-11-06Add --disable-vom config optionDave Barach1-1/+7
2017-09-01The build system still builds the DPDK plugin when the optionMarco Varlese1-0/+2
2017-08-14dpdk: cleanup unused build option *_uses_dpdk_cryptodev_swSergio Gonzalez Monroy3-9/+0
2017-07-17Fix unlinking of /dev/shm files.Dave Wallace1-1/+1
2017-05-09Fix remaining 32-bit compile issuesDamjan Marion1-0/+5
2017-05-03Fix vnet unit testsFilip Tehlar1-0/+4
2017-04-25Add support for 32-bit x86 compilation in MakefilesDamjan Marion1-2/+5
2017-04-20Extend ebuild to specify "configure" subdir, enable verify for sample-pluginDamjan Marion1-0/+5
2017-04-19Fix "make dist" to include version number, docouple it from rpm packagingDamjan Marion1-17/+0
2017-03-27Python API: Fixup of debian package after cFFI changes.Ole Troan1-4/+0
2017-03-10Retire vpp_liteDamjan Marion2-55/+0
2017-02-07Multiple platofrm support for dpdk/Makefile, fix optimizationsDamjan Marion3-51/+0
2017-01-31Prep work for Coverity upload processing via JenkinsDave Barach1-0/+6
2017-01-27dpdk: rework cryptodev ipsec build and setupSergio Gonzalez Monroy3-6/+6
2017-01-20Add dpdk development packagingDamjan Marion3-8/+5
2017-01-16Add --without-libssl configure parameterDamjan Marion4-10/+10
lass="k">if (pthread_condattr_setpshared (&cattr, PTHREAD_PROCESS_SHARED)) clib_unix_warning ("condattr_setpshared"); if (pthread_cond_init (&q->condvar, &cattr)) clib_unix_warning ("cond_init1"); if (pthread_condattr_destroy (&cattr)) clib_unix_warning ("cond_init2"); return (q); } svm_queue_t * svm_queue_alloc_and_init (int nels, int elsize, int consumer_pid) { svm_queue_t *q; q = clib_mem_alloc_aligned (sizeof (svm_queue_t) + nels * elsize, CLIB_CACHE_LINE_BYTES); clib_memset (q, 0, sizeof (*q)); q = svm_queue_init (q, nels, elsize); q->consumer_pid = consumer_pid; return q; } /* * svm_queue_free */ void svm_queue_free (svm_queue_t * q) { (void) pthread_mutex_destroy (&q->mutex); (void) pthread_cond_destroy (&q->condvar); clib_mem_free (q); } void svm_queue_lock (svm_queue_t * q) { pthread_mutex_lock (&q->mutex); } void svm_queue_unlock (svm_queue_t * q) { pthread_mutex_unlock (&q->mutex); } int svm_queue_is_full (svm_queue_t * q) { return q->cursize == q->maxsize; } static inline void svm_queue_send_signal (svm_queue_t * q, u8 is_prod) { if (q->producer_evtfd == -1) { (void) pthread_cond_broadcast (&q->condvar); } else { int __clib_unused rv, fd; u64 data = 1; ASSERT (q->consumer_evtfd > 0 && q->producer_evtfd > 0); fd = is_prod ? q->producer_evtfd : q->consumer_evtfd; rv = write (fd, &data, sizeof (data)); } } static inline void svm_queue_wait_inline (svm_queue_t * q) { if (q->producer_evtfd == -1) { pthread_cond_wait (&q->condvar, &q->mutex); } else { /* Fake a wait for event. We could use epoll but that would mean * using yet another fd. Should do for now */ u32 cursize = q->cursize; svm_queue_unlock (q); while (q->cursize == cursize) CLIB_PAUSE (); svm_queue_lock (q); } } void svm_queue_wait (svm_queue_t * q) { svm_queue_wait_inline (q); } static inline int svm_queue_timedwait_inline (svm_queue_t * q, double timeout) { struct timespec ts; ts.tv_sec = unix_time_now () + (u32) timeout; ts.tv_nsec = (timeout - (u32) timeout) * 1e9; if (q->producer_evtfd == -1) { return pthread_cond_timedwait (&q->condvar, &q->mutex, &ts); } else { double max_time = unix_time_now () + timeout; u32 cursize = q->cursize; int rv; svm_queue_unlock (q); while (q->cursize == cursize && unix_time_now () < max_time) CLIB_PAUSE (); rv = unix_time_now () < max_time ? 0 : ETIMEDOUT; svm_queue_lock (q); return rv; } } int svm_queue_timedwait (svm_queue_t * q, double timeout) { return svm_queue_timedwait_inline (q, timeout); } /* * svm_queue_add_nolock */ int svm_queue_add_nolock (svm_queue_t * q, u8 * elem) { i8 *tailp; int need_broadcast = 0; if (PREDICT_FALSE (q->cursize == q->maxsize)) { while (q->cursize == q->maxsize) svm_queue_wait_inline (q); } tailp = (i8 *) (&q->data[0] + q->elsize * q->tail); clib_memcpy_fast (tailp, elem, q->elsize); q->tail++; q->cursize++; need_broadcast = (q->cursize == 1); if (q->tail == q->maxsize) q->tail = 0; if (need_broadcast) svm_queue_send_signal (q, 1); return 0; } void svm_queue_add_raw (svm_queue_t * q, u8 * elem) { i8 *tailp; tailp = (i8 *) (&q->data[0] + q->elsize * q->tail); clib_memcpy_fast (tailp, elem, q->elsize); q->tail = (q->tail + 1) % q->maxsize; q->cursize++; if (q->cursize == 1) svm_queue_send_signal (q, 1); } /* * svm_queue_add */ int svm_queue_add (svm_queue_t * q, u8 * elem, int nowait) { i8 *tailp; int need_broadcast = 0; if (nowait) { /* zero on success */ if (pthread_mutex_trylock (&q->mutex)) { return (-1); } } else svm_queue_lock (q); if (PREDICT_FALSE (q->cursize == q->maxsize)) { if (nowait) { svm_queue_unlock (q); return (-2); } while (q->cursize == q->maxsize) svm_queue_wait_inline (q); } tailp = (i8 *) (&q->data[0] + q->elsize * q->tail); clib_memcpy_fast (tailp, elem, q->elsize); q->tail++; q->cursize++; need_broadcast = (q->cursize == 1); if (q->tail == q->maxsize) q->tail = 0; if (need_broadcast) svm_queue_send_signal (q, 1); svm_queue_unlock (q); return 0; } /* * svm_queue_add2 */ int svm_queue_add2 (svm_queue_t * q, u8 * elem, u8 * elem2, int nowait) { i8 *tailp; int need_broadcast = 0; if (nowait) { /* zero on success */ if (pthread_mutex_trylock (&q->mutex)) { return (-1); } } else svm_queue_lock (q); if (PREDICT_FALSE (q->cursize + 1 == q->maxsize)) { if (nowait) { svm_queue_unlock (q); return (-2); } while (q->cursize + 1 == q->maxsize) svm_queue_wait_inline (q); } tailp = (i8 *) (&q->data[0] + q->elsize * q->tail); clib_memcpy_fast (tailp, elem, q->elsize); q->tail++; q->cursize++; if (q->tail == q->maxsize) q->tail = 0; need_broadcast = (q->cursize == 1); tailp = (i8 *) (&q->data[0] + q->elsize * q->tail); clib_memcpy_fast (tailp, elem2, q->elsize); q->tail++; q->cursize++; if (q->tail == q->maxsize) q->tail = 0; if (need_broadcast) svm_queue_send_signal (q, 1); svm_queue_unlock (q); return 0; } /* * svm_queue_sub */ int svm_queue_sub (svm_queue_t * q, u8 * elem, svm_q_conditional_wait_t cond, u32 time) { i8 *headp; int need_broadcast = 0; int rc = 0; if (cond == SVM_Q_NOWAIT) { /* zero on success */ if (pthread_mutex_trylock (&q->mutex)) { return (-1); } } else svm_queue_lock (q); if (PREDICT_FALSE (q->cursize == 0)) { if (cond == SVM_Q_NOWAIT) { svm_queue_unlock (q); return (-2); } else if (cond == SVM_Q_TIMEDWAIT) { while (q->cursize == 0 && rc == 0) rc = svm_queue_timedwait_inline (q, time); if (rc == ETIMEDOUT) { svm_queue_unlock (q); return ETIMEDOUT; } } else { while (q->cursize == 0) svm_queue_wait_inline (q); } } headp = (i8 *) (&q->data[0] + q->elsize * q->head); clib_memcpy_fast (elem, headp, q->elsize); q->head++; /* $$$$ JFC shouldn't this be == 0? */ if (q->cursize == q->maxsize) need_broadcast = 1; q->cursize--; if (q->head == q->maxsize) q->head = 0; if (need_broadcast) svm_queue_send_signal (q, 0); svm_queue_unlock (q); return 0; } int svm_queue_sub2 (svm_queue_t * q, u8 * elem) { int need_broadcast; i8 *headp; svm_queue_lock (q); if (q->cursize == 0) { svm_queue_unlock (q); return -1; } headp = (i8 *) (&q->data[0] + q->elsize * q->head); clib_memcpy_fast (elem, headp, q->elsize); q->head++; need_broadcast = (q->cursize == q->maxsize / 2); q->cursize--; if (PREDICT_FALSE (q->head == q->maxsize)) q->head = 0; svm_queue_unlock (q); if (need_broadcast) svm_queue_send_signal (q, 0); return 0; } int svm_queue_sub_raw (svm_queue_t * q, u8 * elem) { i8 *headp; if (PREDICT_FALSE (q->cursize == 0)) { while (q->cursize == 0) ; } headp = (i8 *) (&q->data[0] + q->elsize * q->head); clib_memcpy_fast (elem, headp, q->elsize); q->head = (q->head + 1) % q->maxsize; q->cursize--; return 0; } void svm_queue_set_producer_event_fd (svm_queue_t * q, int fd) { q->producer_evtfd = fd; } void svm_queue_set_consumer_event_fd (svm_queue_t * q, int fd) { q->consumer_evtfd = fd; } /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */