Merge "mmap: Reinstate passing MADV_MERGEABLE on private anonymous maps"

This commit is contained in:
Rom Lemarchand 2013-06-03 19:40:21 +00:00 committed by Android (Google) Code Review
commit 8ea08d3ff9

View File

@ -34,10 +34,17 @@ extern void* __mmap2(void*, size_t, int, int, int, size_t);
#define MMAP2_SHIFT 12 #define MMAP2_SHIFT 12
void* mmap(void *addr, size_t size, int prot, int flags, int fd, long offset) void* mmap(void *addr, size_t size, int prot, int flags, int fd, long offset)
{ {
void *ret;
if (offset & ((1UL << MMAP2_SHIFT)-1)) { if (offset & ((1UL << MMAP2_SHIFT)-1)) {
errno = EINVAL; errno = EINVAL;
return MAP_FAILED; return MAP_FAILED;
} }
return __mmap2(addr, size, prot, flags, fd, (size_t)offset >> MMAP2_SHIFT); ret = __mmap2(addr, size, prot, flags, fd, (size_t)offset >> MMAP2_SHIFT);
if (ret && (flags & (MAP_PRIVATE | MAP_ANONYMOUS)))
madvise(ret, size, MADV_MERGEABLE);
return ret;
} }