- if (fstat (pr->fd, &st))
- {
- error = clib_error_return_unix (0, "fstat");
- goto error;
- }
-
- pr->log2_page_size = min_log2 (st.st_blksize);
- pr->n_pages = ((size - 1) >> pr->log2_page_size) + 1;
- size = pr->n_pages * (1 << pr->log2_page_size);
-
- if ((ftruncate (pr->fd, size)) == -1)
- {
- error = clib_error_return_unix (0, "ftruncate length: %d", size);
- goto error;
- }
-
- if ((flags & VLIB_PHYSMEM_F_FAKE) == 0)
- {
- error = vlib_sysfs_prealloc_hugepages (numa_node,
- 1 << (pr->log2_page_size - 10),
- pr->n_pages);
- if (error)
- goto error;
- }
-
- if (old_mpol != -1)
- numa_set_preferred (numa_node);
-
- pr->mem = mmap (0, size, (PROT_READ | PROT_WRITE), mmap_flags, pr->fd, 0);
-
- if (pr->mem == MAP_FAILED)
- {
- pr->mem = 0;
- error = clib_error_return_unix (0, "mmap");
- goto error;
- }
-
- if (old_mpol != -1 &&
- set_mempolicy (old_mpol, old_mask->maskp, old_mask->size + 1) == -1)
- {
- error = clib_error_return_unix (0, "set_mempolicy");
- goto error;
- }