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 ==");
 }