Merge "Simplify heap bitmap allocation." into dalvik-dev
diff --git a/vm/alloc/HeapBitmap.c b/vm/alloc/HeapBitmap.c
index 4b5c0a3..016ea4a 100644
--- a/vm/alloc/HeapBitmap.c
+++ b/vm/alloc/HeapBitmap.c
@@ -21,11 +21,6 @@
#include <sys/mman.h> // for madvise(), mmap()
#include <cutils/ashmem.h>
-#define HB_ASHMEM_NAME "dalvik-heap-bitmap"
-
-#define ALIGN_UP_TO_PAGE_SIZE(p) \
- (((size_t)(p) + (SYSTEM_PAGE_SIZE - 1)) & ~(SYSTEM_PAGE_SIZE - 1))
-
#define LIKELY(exp) (__builtin_expect((exp) != 0, true))
#define UNLIKELY(exp) (__builtin_expect((exp) != 0, false))
@@ -40,40 +35,19 @@
{
void *bits;
size_t bitsLen;
- size_t allocLen;
- int fd;
- char nameBuf[ASHMEM_NAME_LEN] = HB_ASHMEM_NAME;
assert(hb != NULL);
-
+ assert(name != NULL);
bitsLen = HB_OFFSET_TO_INDEX(maxSize) * sizeof(*hb->bits);
- allocLen = ALIGN_UP_TO_PAGE_SIZE(bitsLen); // required by ashmem
-
- if (name != NULL) {
- snprintf(nameBuf, sizeof(nameBuf), HB_ASHMEM_NAME "/%s", name);
- }
- fd = ashmem_create_region(nameBuf, allocLen);
- if (fd < 0) {
- LOGE("Could not create %zu-byte ashmem region \"%s\" to cover "
- "%zu-byte heap (%d)\n",
- allocLen, nameBuf, maxSize, fd);
+ bits = dvmAllocRegion(bitsLen, PROT_READ | PROT_WRITE, name);
+ if (bits == NULL) {
+ LOGE("Could not mmap %zd-byte ashmem region '%s'", bitsLen, name);
return false;
}
-
- bits = mmap(NULL, bitsLen, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
- close(fd);
- if (bits == MAP_FAILED) {
- LOGE("Could not mmap %d-byte ashmem region \"%s\"\n",
- bitsLen, nameBuf);
- return false;
- }
-
- memset(hb, 0, sizeof(*hb));
hb->bits = bits;
hb->bitsLen = hb->allocLen = bitsLen;
hb->base = (uintptr_t)base;
hb->max = hb->base - 1;
-
return true;
}