Revert "fix: Crash on over memory allocation"

This reverts commit 212ccb8bd4.

Signed-off-by: Compute-Runtime-Validation <compute-runtime-validation@intel.com>
This commit is contained in:
Compute-Runtime-Validation
2025-01-24 20:53:43 +01:00
committed by Compute-Runtime-Automation
parent fcb584299f
commit 83af0b77ff
7 changed files with 4 additions and 53 deletions

View File

@@ -1518,17 +1518,8 @@ void *DrmMemoryManager::lockResourceImpl(GraphicsAllocation &graphicsAllocation)
return cpuPtr; return cpuPtr;
} }
auto rootDeviceIndex = graphicsAllocation.getRootDeviceIndex();
auto ioctlHelper = this->getDrm(rootDeviceIndex).getIoctlHelper();
if (ioctlHelper->makeResidentBeforeLockNeeded()) {
auto memoryOperationsInterface = static_cast<DrmMemoryOperationsHandler *>(executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->memoryOperationsInterface.get());
auto graphicsAllocationPtr = &graphicsAllocation;
[[maybe_unused]] auto ret = memoryOperationsInterface->makeResidentWithinOsContext(getDefaultOsContext(rootDeviceIndex), ArrayRef<NEO::GraphicsAllocation *>(&graphicsAllocationPtr, 1), false) == MemoryOperationsStatus::success;
DEBUG_BREAK_IF(!ret);
}
auto bo = static_cast<DrmAllocation &>(graphicsAllocation).getBO(); auto bo = static_cast<DrmAllocation &>(graphicsAllocation).getBO();
if (graphicsAllocation.getAllocationType() == AllocationType::writeCombined) { if (graphicsAllocation.getAllocationType() == AllocationType::writeCombined) {
auto addr = lockBufferObject(bo); auto addr = lockBufferObject(bo);
auto alignedAddr = alignUp(addr, MemoryConstants::pageSize64k); auto alignedAddr = alignUp(addr, MemoryConstants::pageSize64k);

View File

@@ -236,8 +236,6 @@ class IoctlHelper {
virtual bool isTimestampsRefreshEnabled() { return false; } virtual bool isTimestampsRefreshEnabled() { return false; }
virtual bool makeResidentBeforeLockNeeded() { return false; }
protected: protected:
Drm &drm; Drm &drm;
ExternalCtx *externalCtx = nullptr; ExternalCtx *externalCtx = nullptr;

View File

@@ -665,7 +665,6 @@ int IoctlHelperXe::createGemExt(const MemRegionsVec &memClassInstances, size_t a
} }
create.placement = static_cast<uint32_t>(memoryInstances.to_ulong()); create.placement = static_cast<uint32_t>(memoryInstances.to_ulong());
create.cpu_caching = this->getCpuCachingMode(isCoherent, isSysMemOnly); create.cpu_caching = this->getCpuCachingMode(isCoherent, isSysMemOnly);
create.flags |= DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING;
printDebugString(debugManager.flags.PrintBOCreateDestroyResult.get(), stdout, "Performing DRM_IOCTL_XE_GEM_CREATE with {vmid=0x%x size=0x%lx flags=0x%x placement=0x%x caching=%hu }", printDebugString(debugManager.flags.PrintBOCreateDestroyResult.get(), stdout, "Performing DRM_IOCTL_XE_GEM_CREATE with {vmid=0x%x size=0x%lx flags=0x%x placement=0x%x caching=%hu }",
create.vm_id, create.size, create.flags, create.placement, create.cpu_caching); create.vm_id, create.size, create.flags, create.placement, create.cpu_caching);
@@ -708,7 +707,6 @@ uint32_t IoctlHelperXe::createGem(uint64_t size, uint32_t memoryBanks, std::opti
} }
create.placement = static_cast<uint32_t>(memoryInstances.to_ulong()); create.placement = static_cast<uint32_t>(memoryInstances.to_ulong());
create.cpu_caching = this->getCpuCachingMode(isCoherent, isSysMemOnly); create.cpu_caching = this->getCpuCachingMode(isCoherent, isSysMemOnly);
create.flags |= DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING;
printDebugString(debugManager.flags.PrintBOCreateDestroyResult.get(), stdout, "Performing DRM_IOCTL_XE_GEM_CREATE with {vmid=0x%x size=0x%lx flags=0x%x placement=0x%x caching=%hu }", printDebugString(debugManager.flags.PrintBOCreateDestroyResult.get(), stdout, "Performing DRM_IOCTL_XE_GEM_CREATE with {vmid=0x%x size=0x%lx flags=0x%x placement=0x%x caching=%hu }",
create.vm_id, create.size, create.flags, create.placement, create.cpu_caching); create.vm_id, create.size, create.flags, create.placement, create.cpu_caching);

View File

@@ -136,7 +136,6 @@ class IoctlHelperXe : public IoctlHelper {
int getTileIdFromGtId(int gtId) const override { int getTileIdFromGtId(int gtId) const override {
return gtIdToTileId[gtId]; return gtIdToTileId[gtId];
} }
bool makeResidentBeforeLockNeeded() override { return true; }
protected: protected:
static constexpr uint32_t maxContextSetProperties = 4; static constexpr uint32_t maxContextSetProperties = 4;

View File

@@ -40,7 +40,6 @@ class MockIoctlHelper : public IoctlHelperPrelim20 {
ADDMETHOD_CONST_NOBASE(getNumMediaDecoders, uint32_t, 0, ()); ADDMETHOD_CONST_NOBASE(getNumMediaDecoders, uint32_t, 0, ());
ADDMETHOD_CONST_NOBASE(getNumMediaEncoders, uint32_t, 0, ()); ADDMETHOD_CONST_NOBASE(getNumMediaEncoders, uint32_t, 0, ());
ADDMETHOD_NOBASE(queryDeviceParams, bool, true, (uint32_t *, uint16_t *)); ADDMETHOD_NOBASE(queryDeviceParams, bool, true, (uint32_t *, uint16_t *));
ADDMETHOD_NOBASE(makeResidentBeforeLockNeeded, bool, false, ());
int getDrmParamValue(DrmParam drmParam) const override { int getDrmParamValue(DrmParam drmParam) const override {
if (drmParam == DrmParam::memoryClassSystem) { if (drmParam == DrmParam::memoryClassSystem) {

View File

@@ -15,7 +15,6 @@
#include "shared/source/indirect_heap/indirect_heap.h" #include "shared/source/indirect_heap/indirect_heap.h"
#include "shared/source/memory_manager/memory_banks.h" #include "shared/source/memory_manager/memory_banks.h"
#include "shared/source/os_interface/linux/drm_memory_operations_handler.h" #include "shared/source/os_interface/linux/drm_memory_operations_handler.h"
#include "shared/source/os_interface/linux/drm_memory_operations_handler_bind.h"
#include "shared/source/os_interface/linux/i915.h" #include "shared/source/os_interface/linux/i915.h"
#include "shared/source/os_interface/linux/os_context_linux.h" #include "shared/source/os_interface/linux/os_context_linux.h"
#include "shared/test/common/helpers/engine_descriptor_helper.h" #include "shared/test/common/helpers/engine_descriptor_helper.h"
@@ -2571,32 +2570,6 @@ TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhenLockUnlockIsCalledThenRetu
memoryManager->freeGraphicsMemory(allocation); memoryManager->freeGraphicsMemory(allocation);
} }
TEST_F(DrmMemoryManagerWithLocalMemoryTest, givenDrmMemoryManagerAndResidentNeededbeforeLockWhenLockIsCalledThenverifyAllocationIsResident) {
mock->ioctlExpected.gemWait = 1;
mock->ioctlExpected.gemClose = 1;
mock->ioctlExpected.gemMmapOffset = 1;
mock->ioctlExpected.gemCreateExt = 1;
auto mockIoctlHelper = new MockIoctlHelper(*mock);
mockIoctlHelper->makeResidentBeforeLockNeededResult = true;
auto &drm = static_cast<DrmMockCustom &>(memoryManager->getDrm(rootDeviceIndex));
drm.ioctlHelper.reset(mockIoctlHelper);
executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->memoryOperationsInterface.reset(new DrmMemoryOperationsHandlerBind(*executionEnvironment->rootDeviceEnvironments[rootDeviceIndex].get(), 0));
auto allocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{rootDeviceIndex, true, MemoryConstants::pageSize, AllocationType::buffer});
ASSERT_NE(nullptr, allocation);
auto ptr = memoryManager->lockResource(allocation);
EXPECT_NE(nullptr, ptr);
auto osContext = device->getDefaultEngine().osContext;
EXPECT_TRUE(allocation->isAlwaysResident(osContext->getContextId()));
memoryManager->unlockResource(allocation);
memoryManager->freeGraphicsMemory(allocation);
}
TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhenLockUnlockIsCalledOnAllocationWithCpuPtrThenReturnCpuPtrAndSetCpuDomain) { TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhenLockUnlockIsCalledOnAllocationWithCpuPtrThenReturnCpuPtrAndSetCpuDomain) {
mock->ioctlExpected.gemUserptr = 1; mock->ioctlExpected.gemUserptr = 1;
mock->ioctlExpected.gemSetDomain = 1; mock->ioctlExpected.gemSetDomain = 1;

View File

@@ -140,7 +140,7 @@ TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndNoLocalMemoryThe
EXPECT_TRUE(xeIoctlHelper->bindInfo.empty()); EXPECT_TRUE(xeIoctlHelper->bindInfo.empty());
EXPECT_EQ(size, drm->createParamsSize); EXPECT_EQ(size, drm->createParamsSize);
EXPECT_EQ(static_cast<uint32_t>(DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING), (drm->createParamsFlags & DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING)); EXPECT_EQ(0u, drm->createParamsFlags);
EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching); EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching);
EXPECT_EQ(1u, drm->createParamsPlacement); EXPECT_EQ(1u, drm->createParamsPlacement);
@@ -171,7 +171,7 @@ TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateWhenMemoryBanksZero
EXPECT_EQ(size, drm->createParamsSize); EXPECT_EQ(size, drm->createParamsSize);
EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching); EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching);
EXPECT_EQ(static_cast<uint32_t>(DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING), (drm->createParamsFlags & DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING)); EXPECT_EQ(0u, drm->createParamsFlags);
EXPECT_EQ(1u, drm->createParamsPlacement); EXPECT_EQ(1u, drm->createParamsPlacement);
// dummy mock handle // dummy mock handle
@@ -201,7 +201,7 @@ TEST_F(IoctlHelperXeTest, givenIoctlHelperXeWhenCallGemCreateAndLocalMemoryThenP
EXPECT_EQ(size, drm->createParamsSize); EXPECT_EQ(size, drm->createParamsSize);
EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching); EXPECT_EQ(DRM_XE_GEM_CPU_CACHING_WC, drm->createParamsCpuCaching);
EXPECT_EQ(static_cast<uint32_t>(DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING), (drm->createParamsFlags & DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING)); EXPECT_EQ(0u, drm->createParamsFlags);
EXPECT_EQ(6u, drm->createParamsPlacement); EXPECT_EQ(6u, drm->createParamsPlacement);
// dummy mock handle // dummy mock handle
@@ -2515,13 +2515,6 @@ TEST_F(IoctlHelperXeTest, givenXeIoctlHelperWhenIsTimestampsRefreshEnabledCalled
EXPECT_TRUE(xeIoctlHelper->isTimestampsRefreshEnabled()); EXPECT_TRUE(xeIoctlHelper->isTimestampsRefreshEnabled());
} }
TEST_F(IoctlHelperXeTest, givenXeIoctlHelperWhenMakeResidentBeforeLockNeededIsCalledThenVerifyTrueIsReturned) {
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]};
auto xeIoctlHelper = std::make_unique<IoctlHelperXe>(drm);
EXPECT_TRUE(xeIoctlHelper->makeResidentBeforeLockNeeded());
}
TEST_F(IoctlHelperXeTest, whenIoctlFailsOnQueryConfigSizeThenQueryDeviceIdAndRevisionFails) { TEST_F(IoctlHelperXeTest, whenIoctlFailsOnQueryConfigSizeThenQueryDeviceIdAndRevisionFails) {
MockExecutionEnvironment executionEnvironment{}; MockExecutionEnvironment executionEnvironment{};
std::unique_ptr<Drm> drm{Drm::create(std::make_unique<HwDeviceIdDrm>(0, ""), *executionEnvironment.rootDeviceEnvironments[0])}; std::unique_ptr<Drm> drm{Drm::create(std::make_unique<HwDeviceIdDrm>(0, ""), *executionEnvironment.rootDeviceEnvironments[0])};