X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvcl%2Fvcl_private.c;fp=src%2Fvcl%2Fvcl_private.c;h=721416b045a0760da636941d31883e2d8e7cc6f4;hb=4ac258497303c1cbca539e04ef5f732eed24a5c4;hp=ba54c91f5cdfe5342c11959592a67fa86ac84204;hpb=5cfe45211ac7977ab9bf07b817fe9a5d00226eb3;p=vpp.git diff --git a/src/vcl/vcl_private.c b/src/vcl/vcl_private.c index ba54c91f5cd..721416b045a 100644 --- a/src/vcl/vcl_private.c +++ b/src/vcl/vcl_private.c @@ -519,6 +519,32 @@ vcl_segment_discover_mqs (uword segment_handle, int *fds, u32 n_fds) return 0; } +svm_fifo_chunk_t * +vcl_segment_alloc_chunk (uword segment_handle, u32 slice_index, u32 size, + uword *offset) +{ + svm_fifo_chunk_t *c; + fifo_segment_t *fs; + u32 fs_index; + + fs_index = vcl_segment_table_lookup (segment_handle); + if (fs_index == VCL_INVALID_SEGMENT_INDEX) + { + VDBG (0, "ERROR: mq segment %lx for is not attached!", segment_handle); + return 0; + } + + clib_rwlock_reader_lock (&vcm->segment_table_lock); + + fs = fifo_segment_get_segment (&vcm->segment_main, fs_index); + c = fifo_segment_alloc_chunk_w_slice (fs, slice_index, size); + *offset = fifo_segment_chunk_offset (fs, c); + + clib_rwlock_reader_unlock (&vcm->segment_table_lock); + + return c; +} + /* * fd.io coding-style-patch-verification: ON *