session: segment manager fixes 74/19474/4
authorFlorin Coras <fcoras@cisco.com>
Thu, 9 May 2019 19:08:06 +0000 (12:08 -0700)
committerDave Barach <openvpp@barachs.net>
Thu, 9 May 2019 20:36:14 +0000 (20:36 +0000)
- fix segment size rounding for 4GB segments
- fix initialization of first segment size
- cleanup fifo segment info retrieval

Change-Id: I5ebf20f71ea797087653e7e76fa2e37b2686ec40
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/svm/fifo_segment.c
src/svm/ssvm.c
src/vnet/session/application.c
src/vnet/session/segment_manager.c

index 758b264..fdbc810 100644 (file)
@@ -190,23 +190,8 @@ fifo_segment_get_segment (fifo_segment_main_t * sm, u32 segment_index)
 void
 fifo_segment_info (fifo_segment_t * seg, char **address, size_t * size)
 {
-  if (ssvm_type (&seg->ssvm) == SSVM_SEGMENT_PRIVATE)
-    {
-#if USE_DLMALLOC == 0
-      mheap_t *heap_header;
-
-      *address = pointer_to_uword (seg->ssvm.sh->heap);
-      heap_header = mheap_header (seg->ssvm.sh->heap);
-      *size = heap_header->max_size;
-#else
-      mspace_get_address_and_size (seg->ssvm.sh->heap, address, size);
-#endif
-    }
-  else
-    {
-      *address = (char *) seg->ssvm.sh->ssvm_va;
-      *size = seg->ssvm.ssvm_size;
-    }
+  *address = (char *) seg->ssvm.sh->ssvm_va;
+  *size = seg->ssvm.ssvm_size;
 }
 
 void
index 59a5d22..3e45175 100644 (file)
@@ -383,6 +383,7 @@ ssvm_master_init_private (ssvm_private_t * ssvm)
 
   clib_memset (sh, 0, sizeof (*sh));
   sh->heap = heap;
+  sh->ssvm_va = pointer_to_uword (heap);
   sh->type = SSVM_SEGMENT_PRIVATE;
 
   return 0;
index 69cc87c..4bae8db 100644 (file)
@@ -554,7 +554,7 @@ application_alloc_and_init (app_init_args_t * a)
 
   props = application_segment_manager_properties (app);
   segment_manager_props_init (props);
-  props->segment_size = options[APP_OPTIONS_ADD_SEGMENT_SIZE];
+  props->segment_size = options[APP_OPTIONS_SEGMENT_SIZE];
   props->prealloc_fifos = options[APP_OPTIONS_PREALLOC_FIFO_PAIRS];
   if (options[APP_OPTIONS_ADD_SEGMENT_SIZE])
     {
index 6213cd5..cbec493 100644 (file)
@@ -114,7 +114,9 @@ segment_manager_add_segment (segment_manager_t * sm, u32 segment_size)
    */
   segment_size = segment_size ? segment_size : props->add_segment_size;
   page_size = clib_mem_get_page_size ();
-  segment_size = (segment_size + page_size - 1) & ~(page_size - 1);
+  /* Protect against segment size u32 wrap */
+  segment_size = clib_max (segment_size + page_size - 1, segment_size);
+  segment_size = segment_size & ~(page_size - 1);
   if (props->segment_type != SSVM_SEGMENT_PRIVATE)
     {
       seg_name = format (0, "%d-%d%c", getpid (), smm->seg_name_counter++, 0);