X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Flinux%2Fphysmem.c;h=6c6b072f70a287afa676beb6a0675b175e0e499c;hb=6a5adc369591fcac2447e9809deaa22f56b53911;hp=cf2961b4cf971180be6cde63293bec98d59da099;hpb=8db943000763499764c0fefbf0c237b8345ffe36;p=vpp.git diff --git a/src/vlib/linux/physmem.c b/src/vlib/linux/physmem.c old mode 100644 new mode 100755 index cf2961b4cf9..6c6b072f70a --- a/src/vlib/linux/physmem.c +++ b/src/vlib/linux/physmem.c @@ -69,10 +69,18 @@ unix_physmem_alloc_aligned (vlib_main_t * vm, vlib_physmem_region_index_t idx, while (1) { +#if USE_DLMALLOC == 0 + mheap_get_aligned (pr->heap, n_bytes, /* align */ alignment, /* align offset */ 0, &lo_offset); +#else + lo_offset = (uword) mspace_get_aligned (pr->heap, n_bytes, + alignment, ~0ULL /* offset */ ); + if (lo_offset == 0) + lo_offset = ~0ULL; +#endif /* Allocation failed? */ if (lo_offset == ~0) @@ -94,7 +102,13 @@ unix_physmem_alloc_aligned (vlib_main_t * vm, vlib_physmem_region_index_t idx, { uword i; for (i = 0; i < vec_len (to_free); i++) - mheap_put (pr->heap, to_free[i]); + { +#if USE_DLMALLOC == 0 + mheap_put (pr->heap, to_free[i]); +#else + mspace_put_no_offset (pr->heap, (void *) to_free[i]); +#endif + } vec_free (to_free); } @@ -106,7 +120,11 @@ unix_physmem_free (vlib_main_t * vm, vlib_physmem_region_index_t idx, void *x) { vlib_physmem_region_t *pr = vlib_physmem_get_region (vm, idx); /* Return object to region's heap. */ +#if USE_DLMALLOC == 0 mheap_put (pr->heap, x - pr->heap); +#else + mspace_put_no_offset (pr->heap, x); +#endif } static clib_error_t * @@ -159,11 +177,11 @@ unix_physmem_region_alloc (vlib_main_t * vm, char *name, u32 size, pr->size = (u64) pr->n_pages << (u64) pr->log2_page_size; pr->page_mask = (1 << pr->log2_page_size) - 1; pr->numa_node = numa_node; - pr->name = format (0, "%s", name); + pr->name = format (0, "%s%c", name, 0); for (i = 0; i < pr->n_pages; i++) { - void *ptr = pr->mem + (i << pr->log2_page_size); + void *ptr = pr->mem + ((u64) i << pr->log2_page_size); int node; if ((move_pages (0, 1, &ptr, 0, &node, 0) == 0) && (numa_node != node)) { @@ -174,25 +192,22 @@ unix_physmem_region_alloc (vlib_main_t * vm, char *name, u32 size, } } -#if 0 - if ((vpm->flags & VLIB_PHYSMEM_MAIN_F_HAVE_IOMMU) || - (vpm->flags & VLIB_PHYSMEM_MAIN_F_HAVE_PAGEMAP) == 0) - for (i = 0; i < pr->n_pages; i++) - vec_add1 (pr->page_table, pointer_to_uword (pr->mem) + - i * (1 << pr->log2_page_size)); - else -#endif - pr->page_table = clib_mem_vm_get_paddr (pr->mem, pr->log2_page_size, - pr->n_pages); + pr->page_table = clib_mem_vm_get_paddr (pr->mem, pr->log2_page_size, + pr->n_pages); linux_vfio_dma_map_regions (vm); if (flags & VLIB_PHYSMEM_F_INIT_MHEAP) { +#if USE_DLMALLOC == 0 pr->heap = mheap_alloc_with_flags (pr->mem, pr->size, /* Don't want mheap mmap/munmap with IO memory. */ MHEAP_FLAG_DISABLE_VM | MHEAP_FLAG_THREAD_SAFE); +#else + pr->heap = create_mspace_with_base (pr->mem, pr->size, 1 /* locked */ ); + mspace_disable_expand (pr->heap); +#endif } *idx = pr->index; @@ -224,7 +239,6 @@ clib_error_t * unix_physmem_init (vlib_main_t * vm) { vlib_physmem_main_t *vpm = &physmem_main; - linux_vfio_main_t *lvm = &vfio_main; clib_error_t *error = 0; u64 *pt = 0; @@ -241,9 +255,6 @@ unix_physmem_init (vlib_main_t * vm) if ((error = linux_vfio_init (vm))) return error; - if (lvm->flags & LINUX_VFIO_F_HAVE_IOMMU) - vpm->flags |= VLIB_PHYSMEM_MAIN_F_HAVE_IOMMU; - vm->os_physmem_alloc_aligned = unix_physmem_alloc_aligned; vm->os_physmem_free = unix_physmem_free; vm->os_physmem_region_alloc = unix_physmem_region_alloc;