fix: Reset builtins pointer after its resources are freed

Add resetBuiltins helper function to MockRootDeviceEnvironment.
Update tests to use the new function whenever builtins unique pointer
is reset to ensure that sip kernels are properly freed.

Related-To: HSD-18038645398, HSD-18038819112

Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
Filip Hazubski
2024-06-19 11:04:27 +00:00
committed by Compute-Runtime-Automation
parent cd3219d092
commit 0d61860af6
37 changed files with 97 additions and 79 deletions

View File

@@ -39,6 +39,7 @@ void ExecutionEnvironment::releaseRootDeviceEnvironmentResources(RootDeviceEnvir
SipKernel::freeSipKernels(rootDeviceEnvironment, memoryManager.get());
if (rootDeviceEnvironment->builtins.get()) {
rootDeviceEnvironment->builtins->freeSipKernels(memoryManager.get());
rootDeviceEnvironment->builtins.reset();
}
rootDeviceEnvironment->releaseDummyAllocation();
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2022-2023 Intel Corporation
* Copyright (C) 2022-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -7,6 +7,7 @@
#include "shared/test/common/mocks/mock_execution_environment.h"
#include "shared/source/built_ins/built_ins.h"
#include "shared/test/common/fixtures/mock_aub_center_fixture.h"
#include "shared/test/common/helpers/default_hw_info.h"
@@ -50,6 +51,13 @@ MockRootDeviceEnvironment::~MockRootDeviceEnvironment() {
}
}
void MockRootDeviceEnvironment::resetBuiltins(RootDeviceEnvironment *rootDeviceEnvironment, BuiltIns *newValue) {
if (rootDeviceEnvironment->builtins) {
rootDeviceEnvironment->builtins->freeSipKernels(rootDeviceEnvironment->executionEnvironment.memoryManager.get());
}
rootDeviceEnvironment->builtins.reset(newValue);
}
MockExecutionEnvironment::MockExecutionEnvironment() : MockExecutionEnvironment(defaultHwInfo.get()) {}
MockExecutionEnvironment::MockExecutionEnvironment(const HardwareInfo *hwInfo) : MockExecutionEnvironment(hwInfo, true, 1u) {
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2018-2023 Intel Corporation
* Copyright (C) 2018-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -14,6 +14,8 @@
namespace NEO {
class BuiltIns;
struct MockRootDeviceEnvironment : public RootDeviceEnvironment {
using BaseClass = RootDeviceEnvironment;
using RootDeviceEnvironment::hwInfo;
@@ -26,6 +28,8 @@ struct MockRootDeviceEnvironment : public RootDeviceEnvironment {
bool initOsInterface(std::unique_ptr<HwDeviceId> &&hwDeviceId, uint32_t rootDeviceIndex) override;
bool initAilConfiguration() override;
static void resetBuiltins(RootDeviceEnvironment *rootDeviceEnvironment, BuiltIns *newValue);
std::vector<bool> initOsInterfaceResults;
uint32_t initOsInterfaceCalled = 0u;
std::optional<uint32_t> initOsInterfaceExpectedCallCount;

View File

@@ -52,7 +52,7 @@ void DrmMemoryManagerFixture::setUp(DrmMockCustom *mock, bool localMemoryEnabled
rootDeviceEnvironment->osInterface = std::make_unique<OSInterface>();
rootDeviceEnvironment->osInterface->setDriverModel(std::unique_ptr<DriverModel>(new DrmMockCustom(*rootDeviceEnvironment)));
rootDeviceEnvironment->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*rootDeviceEnvironment->osInterface->getDriverModel()->as<Drm>(), i, false);
rootDeviceEnvironment->builtins.reset(new MockBuiltins);
MockRootDeviceEnvironment::resetBuiltins(rootDeviceEnvironment, new MockBuiltins);
rootDeviceEnvironment->initGmm();
}

View File

@@ -474,7 +474,7 @@ TEST(DebugBindlessSip, givenContextWhenBindlessDebugSipIsRequestedThenCorrectSip
auto executionEnvironment = mockDevice->getExecutionEnvironment();
auto builtIns = new NEO::MockBuiltins();
builtIns->callBaseGetSipKernel = true;
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0].get(), builtIns);
const uint32_t contextId = 0u;
std::unique_ptr<OsContext> osContext(OsContext::create(executionEnvironment->rootDeviceEnvironments[0]->osInterface.get(),
@@ -503,7 +503,7 @@ TEST(DebugBindlessSip, givenOfflineDebuggingModeWhenGettingSipForContextThenCorr
auto executionEnvironment = mockDevice->getExecutionEnvironment();
auto builtIns = new NEO::MockBuiltins();
builtIns->callBaseGetSipKernel = true;
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0].get(), builtIns);
executionEnvironment->setDebuggingMode(DebuggingMode::offline);
const uint32_t contextId = 0u;
@@ -533,7 +533,7 @@ TEST(DebugBindlessSip, givenTwoContextsWhenBindlessDebugSipIsRequestedThenEachSi
auto executionEnvironment = mockDevice->getExecutionEnvironment();
auto builtIns = new NEO::MockBuiltins();
builtIns->callBaseGetSipKernel = true;
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0].get(), builtIns);
const uint32_t context0Id = 0u;
std::unique_ptr<OsContext> osContext0(OsContext::create(executionEnvironment->rootDeviceEnvironments[0]->osInterface.get(),
@@ -571,7 +571,7 @@ TEST(DebugBindlessSip, givenFailingSipAllocationWhenBindlessDebugSipWithContextI
auto builtIns = new NEO::MockBuiltins();
builtIns->callBaseGetSipKernel = true;
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0].get(), builtIns);
const uint32_t contextId = 0u;
std::unique_ptr<OsContext> osContext(OsContext::create(executionEnvironment->rootDeviceEnvironments[0]->osInterface.get(),
@@ -600,7 +600,7 @@ TEST(DebugBindlessSip, givenCorrectSipKernelWhenReleasingAllocationManuallyThenF
auto executionEnvironment = mockDevice->getExecutionEnvironment();
auto builtIns = new NEO::MockBuiltins();
builtIns->callBaseGetSipKernel = true;
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0].get(), builtIns);
const uint32_t contextId = 0u;
std::unique_ptr<OsContext> osContext(OsContext::create(executionEnvironment->rootDeviceEnvironments[0]->osInterface.get(),
@@ -633,7 +633,7 @@ TEST(DebugBindlessSip, givenOfflineDebuggingModeWhenSipIsInitializedThenBinaryIs
auto executionEnvironment = mockDevice->getExecutionEnvironment();
auto builtIns = new NEO::MockBuiltins();
builtIns->callBaseGetSipKernel = true;
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0].get(), builtIns);
executionEnvironment->setDebuggingMode(DebuggingMode::offline);
auto osContext = std::make_unique<OsContextMock>(0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::regular}));
@@ -670,7 +670,7 @@ TEST(DebugBindlessSip, givenOfflineDebuggingModeAndInvalidSipWhenSipIsInitialize
auto executionEnvironment = mockDevice->getExecutionEnvironment();
auto builtIns = new NEO::MockBuiltins();
builtIns->callBaseGetSipKernel = true;
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0].get(), builtIns);
executionEnvironment->setDebuggingMode(DebuggingMode::offline);
auto osContext = std::make_unique<OsContextMock>(0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::regular}));
@@ -707,7 +707,7 @@ TEST(DebugBindlessSip, givenOfflineDebuggingModeWhenDebugSipForContextIsCreatedT
auto executionEnvironment = mockDevice->getExecutionEnvironment();
auto builtIns = new NEO::MockBuiltins();
builtIns->callBaseGetSipKernel = true;
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0].get(), builtIns);
executionEnvironment->setDebuggingMode(DebuggingMode::offline);
auto osContext = std::make_unique<OsContextMock>(0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::regular}));

View File

@@ -56,7 +56,7 @@ TEST(Debugger, givenL0DebuggerOFFWhenGettingStateSaveAreaHeaderThenValidSipTypeI
auto isHexadecimalArrayPreferred = gfxCoreHelper.isSipKernelAsHexadecimalArrayPreferred();
if (!isHexadecimalArrayPreferred) {
auto mockBuiltIns = new NEO::MockBuiltins();
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0].get(), mockBuiltIns);
}
executionEnvironment->rootDeviceEnvironments[0]->initGmm();

View File

@@ -448,7 +448,7 @@ TEST_F(DeviceGetCapsTest, givenDeviceWithMidThreadPreemptionWhenDeviceIsCreatedT
auto executionEnvironment = new ExecutionEnvironment();
executionEnvironment->prepareRootDeviceEnvironments(1);
executionEnvironment->rootDeviceEnvironments[0u]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0u].get(), builtIns);
auto device = std::unique_ptr<Device>(MockDevice::createWithExecutionEnvironment<MockDevice>(defaultHwInfo.get(), executionEnvironment, 0u));
ASSERT_EQ(builtIns, device->getBuiltIns());
EXPECT_FALSE(MockSipData::called);

View File

@@ -302,7 +302,7 @@ HWTEST_P(PreemptionHwTest, GivenPreemptionModeIsNotChangingWhenGettingRequiredCm
{
auto builtIns = new MockBuiltins();
mockDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(mockDevice->getExecutionEnvironment()->rootDeviceEnvironments[0].get(), builtIns);
PreemptionHelper::programCmdStream<FamilyType>(cmdStream, mode, mode, nullptr);
}
EXPECT_EQ(0U, cmdStream.getUsed());

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2021-2023 Intel Corporation
* Copyright (C) 2021-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -135,7 +135,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterPreemptionTests, GivenOfflineModeDebugg
auto executionEnvironment = device->getExecutionEnvironment();
auto builtIns = new NEO::MockBuiltins();
builtIns->callBaseGetSipKernel = true;
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(builtIns);
MockRootDeviceEnvironment::resetBuiltins(executionEnvironment->rootDeviceEnvironments[0].get(), builtIns);
executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(new MockDebugger);
device->executionEnvironment->setDebuggingMode(DebuggingMode::offline);
device->setPreemptionMode(MidThread);