11#include " MemoryPagesPool.h"
22
3- MemoryPagesPool::MemoryPagesPool (size_t vPageSize, size_t vNumberOfPages, void *vBaseAddress, size_t vBaseSize, ReleaseCallback vCallback, size_t pageAlign ) {
3+ MemoryPagesPool::MemoryPagesPool (size_t vPageSize, size_t vNumberOfPages, void *vBaseAddress, size_t vBaseSize, ReleaseCallback vCallback, size_t firstPageOffset ) {
44 // initialize members from parameters
55 pageSize=vPageSize;
66 numberOfPages=vNumberOfPages;
@@ -13,25 +13,21 @@ MemoryPagesPool::MemoryPagesPool(size_t vPageSize, size_t vNumberOfPages, void *
1313 baseBlockSize=pageSize * numberOfPages;
1414 }
1515
16- // compute offset of first page to ensure aligned as requested
17- size_t offsetFirstPage=0 ;
18- if (pageAlign) {
19- size_t bytesExcess=((size_t )vBaseAddress) % pageAlign;
20- if (bytesExcess) {
21- offsetFirstPage=pageAlign-bytesExcess;
22- }
16+ // check validity of parameters
17+ if ((firstPageOffset>=vBaseSize)||(vBaseSize==0 )||(vNumberOfPages==0 )||(vPageSize==0 )||(baseBlockSize==0 )) {
18+ throw __LINE__;
2319 }
24-
20+
2521 // if necessary, reduce number of pages to fit in available space
26- size_t sizeNeeded=pageSize * numberOfPages + offsetFirstPage ;
27- if (sizeNeeded>baseBlockSize) {
28- numberOfPages=(baseBlockSize-offsetFirstPage )/pageSize;
22+ size_t sizeNeeded=pageSize * numberOfPages + firstPageOffset ;
23+ if (sizeNeeded>baseBlockSize) {
24+ numberOfPages=(baseBlockSize-firstPageOffset )/pageSize;
2925 }
3026
3127 // create a fifo and store list of pages available
3228 pagesAvailable=std::make_unique<AliceO2::Common::Fifo<void *>>(numberOfPages);
3329 for (size_t i=0 ; i<numberOfPages; i++) {
34- void *ptr=&((char *)baseBlockAddress)[offsetFirstPage +i*pageSize];
30+ void *ptr=&((char *)baseBlockAddress)[firstPageOffset +i*pageSize];
3531 pagesAvailable->push (ptr);
3632 }
3733}
0 commit comments