Merge "overlay: maintain client requested size and aligned buffer size"
diff --git a/liboverlay/overlayMem.h b/liboverlay/overlayMem.h
index 5e0db6f..f0a1922 100644
--- a/liboverlay/overlayMem.h
+++ b/liboverlay/overlayMem.h
@@ -88,7 +88,7 @@
/* allocated buffer type determined by gralloc (ashmem, ion, etc) */
int mAllocType;
- /* holds buf size */
+ /* holds buf size sent down by the client */
uint32_t mBufSz;
/* num of bufs */
@@ -96,6 +96,9 @@
/* gralloc alloc controller */
gralloc::IAllocController* mAlloc;
+
+ /*Holds the aligned buffer size used for actual allocation*/
+ uint32_t mBufSzAligned;
};
//-------------------Inlines-----------------------------------
@@ -121,14 +124,15 @@
int allocFlags = GRALLOC_USAGE_PRIVATE_IOMMU_HEAP;
int err = 0;
OVASSERT(numbufs && bufSz, "numbufs=%d bufSz=%d", numbufs, bufSz);
+ mBufSz = bufSz;
if(isSecure) {
allocFlags = GRALLOC_USAGE_PRIVATE_MM_HEAP;
allocFlags |= GRALLOC_USAGE_PROTECTED;
- mBufSz = utils::align(bufSz, SIZE_1M);
+ mBufSzAligned = utils::align(bufSz, SIZE_1M);
data.align = SIZE_1M;
} else {
- mBufSz = bufSz;
+ mBufSzAligned = bufSz;
data.align = getpagesize();
}
@@ -140,7 +144,7 @@
data.base = 0;
data.fd = -1;
data.offset = 0;
- data.size = mBufSz * mNumBuffers;
+ data.size = mBufSzAligned * mNumBuffers;
data.uncached = true;
err = mAlloc->allocate(data, allocFlags);
@@ -165,7 +169,7 @@
}
IMemAlloc* memalloc = mAlloc->getAllocator(mAllocType);
- ret = memalloc->free_buffer(mBaseAddr, mBufSz * mNumBuffers, 0, mFd);
+ ret = memalloc->free_buffer(mBaseAddr, mBufSzAligned * mNumBuffers, 0, mFd);
if (ret != 0) {
ALOGE("OvMem: error freeing buffer");
return false;
@@ -175,6 +179,7 @@
mBaseAddr = MAP_FAILED;
mAllocType = 0;
mBufSz = 0;
+ mBufSzAligned = 0;
mNumBuffers = 0;
return true;
}
@@ -207,7 +212,8 @@
inline void OvMem::dump() const
{
ALOGE("== Dump OvMem start ==");
- ALOGE("fd=%d addr=%p type=%d bufsz=%u", mFd, mBaseAddr, mAllocType, mBufSz);
+ ALOGE("fd=%d addr=%p type=%d bufsz=%u AlignedBufSz=%u",
+ mFd, mBaseAddr, mAllocType, mBufSz, mBufSzAligned);
ALOGE("== Dump OvMem end ==");
}