172bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris/* 272bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * Copyright (C) 2014 The Android Open Source Project 372bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * 472bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * Licensed under the Apache License, Version 2.0 (the "License"); 572bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * you may not use this file except in compliance with the License. 672bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * You may obtain a copy of the License at 772bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * 872bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * http://www.apache.org/licenses/LICENSE-2.0 972bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * 1072bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * Unless required by applicable law or agreed to in writing, software 1172bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * distributed under the License is distributed on an "AS IS" BASIS, 1272bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1372bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * See the License for the specific language governing permissions and 1472bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris * limitations under the License. 1572bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris */ 1672bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris 1703eebcb6e8762e668a0d3af6bb303cccb88c5b81Christopher Ferris#include <sys/param.h> 1872bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris#include <unistd.h> 1972bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris 2072bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris#include "jemalloc.h" 2103eebcb6e8762e668a0d3af6bb303cccb88c5b81Christopher Ferris#include "private/bionic_macros.h" 2272bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris 2372bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferrisvoid* je_pvalloc(size_t bytes) { 2491570ce987ef93f9ba2fa663a5fee1bd2525a2baElliott Hughes size_t pagesize = getpagesize(); 2503eebcb6e8762e668a0d3af6bb303cccb88c5b81Christopher Ferris size_t size = BIONIC_ALIGN(bytes, pagesize); 2603eebcb6e8762e668a0d3af6bb303cccb88c5b81Christopher Ferris if (size < bytes) { 2703eebcb6e8762e668a0d3af6bb303cccb88c5b81Christopher Ferris return NULL; 2803eebcb6e8762e668a0d3af6bb303cccb88c5b81Christopher Ferris } 2903eebcb6e8762e668a0d3af6bb303cccb88c5b81Christopher Ferris return je_memalign(pagesize, size); 3072bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris} 3172bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris 3272bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris#ifdef je_memalign 3372bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris#undef je_memalign 3472bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris#endif 3572bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris 3672bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris// The man page for memalign says it fails if boundary is not a power of 2, 3772bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris// but this is not true. Both glibc and dlmalloc round up to the next power 3872bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris// of 2, so we'll do the same. 3972bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferrisvoid* je_memalign_round_up_boundary(size_t boundary, size_t size) { 4003eebcb6e8762e668a0d3af6bb303cccb88c5b81Christopher Ferris if (boundary != 0) { 4103eebcb6e8762e668a0d3af6bb303cccb88c5b81Christopher Ferris if (!powerof2(boundary)) { 4203eebcb6e8762e668a0d3af6bb303cccb88c5b81Christopher Ferris boundary = BIONIC_ROUND_UP_POWER_OF_2(boundary); 4372bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris } 4472bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris } else { 4572bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris boundary = 1; 4672bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris } 4772bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris return je_memalign(boundary, size); 4872bbd423579bb971dc06cdd3c06201faf3fe95e6Christopher Ferris} 49