mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 09:14:47 +08:00
fix: correct page alignment calculation in getPageAlignedSizeRequired
In the current implementation, for some data the result is incorrect. For example for: size=131073 (64 kB * 2 + 1), pageSize=65536 (64 kB), the result should be 196608 (64 kB * 3) instead of 131073. Related-To: GSD-8948 Signed-off-by: Jaroslaw Warchulski <jaroslaw.warchulski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
c94e38f74d
commit
56c5c78961
@@ -1105,7 +1105,7 @@ size_t ContextImp::getPageAlignedSizeRequired(size_t size, NEO::HeapIndex *heapR
|
||||
// Given a size larger than the pageSize, then round the size up to the next pageSize alignment if unaligned
|
||||
if (size > pageSize) {
|
||||
if (size % pageSize > 0) {
|
||||
return ((size + pageSize) & (~pageSize));
|
||||
return ((size + pageSize - 1) & ~(pageSize - 1));
|
||||
} else {
|
||||
return size;
|
||||
}
|
||||
|
||||
@@ -1705,14 +1705,19 @@ TEST_F(ContextTest, whenCallingVirtualMemoryReservationWithInvalidMultiPageSizeI
|
||||
|
||||
res = contextImp->queryVirtualMemPageSize(device, size, &pagesize);
|
||||
|
||||
size = pagesize * 3 + 10;
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
|
||||
NEO::MemoryManager *failingReserveMemoryManager = new ReserveMemoryManagerMock(*neoDevice->executionEnvironment);
|
||||
auto memoryManager = driverHandle->getMemoryManager();
|
||||
driverHandle->setMemoryManager(failingReserveMemoryManager);
|
||||
|
||||
size = pagesize * 3 + 10;
|
||||
res = contextImp->reserveVirtualMem(pStart, size, &ptr);
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_SIZE, res);
|
||||
|
||||
size = pagesize * 2 + 1;
|
||||
res = contextImp->reserveVirtualMem(pStart, size, &ptr);
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_SIZE, res);
|
||||
|
||||
driverHandle->setMemoryManager(memoryManager);
|
||||
delete failingReserveMemoryManager;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user