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;
 }