diff options
author | Florin Coras <fcoras@cisco.com> | 2020-12-10 18:52:40 -0800 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2020-12-29 21:04:39 +0000 |
commit | 14f066e95100cfdcd5f0531e35ba84b7b859a00a (patch) | |
tree | 53118cd229784f7a38bc5a4d06f2f3591d43c996 /src/vcl | |
parent | b462418890240b2e38dbf522f9dd0196b79e0fa8 (diff) |
svm vcl: allow random offsets for fifo segments in apps
Type: improvement
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I1658a9c19d8eae4c9a42c0a111d4ad343b8eb8a4
Diffstat (limited to 'src/vcl')
-rw-r--r-- | src/vcl/vcl_private.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/vcl/vcl_private.c b/src/vcl/vcl_private.c index 5b412351c50..a140e5ea557 100644 --- a/src/vcl/vcl_private.c +++ b/src/vcl/vcl_private.c @@ -379,7 +379,6 @@ vcl_segment_attach_session (uword segment_handle, uword rxf_offset, uword txf_offset, uword mq_offset, u8 is_ct, vcl_session_t *s) { - svm_fifo_shared_t *rxsf, *txsf; u32 fs_index, eqs_index; svm_fifo_t *rxf, *txf; fifo_segment_t *fs; @@ -393,21 +392,18 @@ vcl_segment_attach_session (uword segment_handle, uword rxf_offset, return -1; } - if (mq_offset != (uword) ~0) + if (!is_ct && mq_offset != (uword) ~0) { eqs_handle = vcl_vpp_worker_segment_handle (0); eqs_index = vcl_segment_table_lookup (eqs_handle); ASSERT (eqs_index != VCL_INVALID_SEGMENT_INDEX); } - rxsf = uword_to_pointer (rxf_offset, svm_fifo_shared_t *); - txsf = uword_to_pointer (txf_offset, svm_fifo_shared_t *); - clib_rwlock_reader_lock (&vcm->segment_table_lock); fs = fifo_segment_get_segment (&vcm->segment_main, fs_index); - rxf = fifo_segment_alloc_fifo_w_shared (fs, rxsf); - txf = fifo_segment_alloc_fifo_w_shared (fs, txsf); + rxf = fifo_segment_alloc_fifo_w_offset (fs, rxf_offset); + txf = fifo_segment_alloc_fifo_w_offset (fs, txf_offset); if (!is_ct && mq_offset != (uword) ~0) { @@ -420,8 +416,8 @@ vcl_segment_attach_session (uword segment_handle, uword rxf_offset, if (!is_ct) { - rxsf->client_session_index = s->session_index; - txsf->client_session_index = s->session_index; + rxf->shr->client_session_index = s->session_index; + txf->shr->client_session_index = s->session_index; rxf->client_thread_index = vcl_get_worker_index (); txf->client_thread_index = vcl_get_worker_index (); s->rx_fifo = rxf; |