u64
svm_get_global_region_base_va ()
{
+#ifdef CLIB_SANITIZE_ADDR
+ return 0x200000000000;
+#endif
+
#if __aarch64__
/* On AArch64 VA space can have different size, from 36 to 48 bits.
Here we are trying to detect VA bits by parsing /proc/self/maps
#endif
/* default value */
- return 0x30000000;
+ return 0x130000000ULL;
}
static void
}
}
}
- s = format (s, " rgn heap stats: %U", format_mheap,
- rp->region_heap, 0);
- if ((rp->flags & SVM_FLAGS_MHEAP) && rp->data_heap)
- {
- s = format (s, "\n data heap stats: %U", format_mheap,
- rp->data_heap, 1);
- }
- s = format (s, "\n");
}
return (s);
if (a->flags & SVM_FLAGS_MHEAP)
{
- mheap_t *heap_header;
- rp->data_heap =
- mheap_alloc_with_flags ((void *) (rp->data_base), map_size,
- MHEAP_FLAG_DISABLE_VM);
- heap_header = mheap_header (rp->data_heap);
- heap_header->flags |= MHEAP_FLAG_THREAD_SAFE;
+ rp->data_heap = create_mspace_with_base (rp->data_base,
+ map_size, 1 /* locked */ );
+ mspace_disable_expand (rp->data_heap);
rp->flags |= SVM_FLAGS_MHEAP;
}
u8 *
shm_name_from_svm_map_region_args (svm_map_region_args_t * a)
{
- u8 *path;
u8 *shm_name;
- u8 *split_point;
- u8 *mkdir_arg = 0;
int root_path_offset = 0;
int name_offset = 0;
if (a->root_path[0] == '/')
root_path_offset++;
- /* create the root_path under /dev/shm
- iterate through path creating directories */
-
- path = format (0, "/dev/shm/%s%c", &a->root_path[root_path_offset], 0);
- split_point = path + 1;
- vec_add1 (mkdir_arg, '-');
-
- while (*split_point)
- {
- while (*split_point && *split_point != '/')
- {
- vec_add1 (mkdir_arg, *split_point);
- split_point++;
- }
- vec_add1 (mkdir_arg, 0);
-
- /* ready to descend another level */
- mkdir_arg[vec_len (mkdir_arg) - 1] = '-';
- split_point++;
- }
- vec_free (mkdir_arg);
- vec_free (path);
-
if (a->name[0] == '/')
name_offset = 1;
ASSERT (rp);
int rv;
- memset (rp, 0, sizeof (*rp));
+ clib_memset (rp, 0, sizeof (*rp));
if (pthread_mutexattr_init (&attr))
clib_unix_warning ("mutexattr_init");
rp->virtual_base = a->baseva;
rp->virtual_size = a->size;
- rp->region_heap =
- mheap_alloc_with_flags (uword_to_pointer
- (a->baseva + MMAP_PAGESIZE, void *),
- (a->pvt_heap_size !=
- 0) ? a->pvt_heap_size : SVM_PVT_MHEAP_SIZE,
- MHEAP_FLAG_DISABLE_VM);
+ rp->region_heap = create_mspace_with_base
+ (uword_to_pointer (a->baseva + MMAP_PAGESIZE, void *),
+ (a->pvt_heap_size !=
+ 0) ? a->pvt_heap_size : SVM_PVT_MHEAP_SIZE, 1 /* locked */ );
+
+ mspace_disable_expand (rp->region_heap);
+
oldheap = svm_push_pvt_heap (rp);
rp->region_name = (char *) format (0, "%s%c", a->name, 0);
{
svm_map_region_args_t _a, *a = &_a;
- memset (a, 0, sizeof (*a));
+ clib_memset (a, 0, sizeof (*a));
a->root_path = 0;
a->name = SVM_GLOBAL_REGION_NAME;
a->baseva = svm_get_global_region_base_va ();
{
svm_map_region_args_t _a, *a = &_a;
- memset (a, 0, sizeof (*a));
+ clib_memset (a, 0, sizeof (*a));
a->root_path = root_path;
a->name = SVM_GLOBAL_REGION_NAME;
a->baseva = svm_get_global_region_base_va ();
{
svm_map_region_args_t _a, *a = &_a;
- memset (a, 0, sizeof (*a));
+ clib_memset (a, 0, sizeof (*a));
a->root_path = root_path;
a->name = SVM_GLOBAL_REGION_NAME;
a->baseva = svm_get_global_region_base_va ();