refactor: Add conditions for metadata and vmbind handling

Resolves: NEO-16089

Signed-off-by: Jemale Lockett <jemale.lockett@intel.com>
This commit is contained in:
Jemale Lockett
2025-11-18 17:18:15 +00:00
committed by Compute-Runtime-Automation
parent 71cec32d50
commit dbf9e7ff63
4 changed files with 45 additions and 5 deletions

View File

@@ -243,5 +243,5 @@ std::unique_ptr<void, void (*)(void *)> MockEuDebugInterface::toDrmEuDebugAckEve
}
char MockEuDebugInterface::sysFsContent = '1';
[[maybe_unused]] static EnableEuDebugInterface enableMockEuDebug(MockEuDebugInterface::euDebugInterfaceType, MockEuDebugInterface::sysFsXeEuDebugFile, []() -> std::unique_ptr<EuDebugInterface> { return std::make_unique<MockEuDebugInterface>(); });
[[maybe_unused]] static EnableEuDebugInterface enableMockEuDebug(EuDebugInterfaceType::upstream, MockEuDebugInterface::sysFsXeEuDebugFile, []() -> std::unique_ptr<EuDebugInterface> { return std::make_unique<MockEuDebugInterface>(); });
} // namespace NEO

View File

@@ -14,10 +14,9 @@ class MockEuDebugInterface : public EuDebugInterface {
static char sysFsContent;
static constexpr const char *sysFsXeEuDebugFile = "/mock_eudebug";
static constexpr uintptr_t sysFsFd = 0xE0DEB0;
static constexpr EuDebugInterfaceType euDebugInterfaceType = EuDebugInterfaceType::upstream;
bool isExecQueuePageFaultEnableSupported() override { return pageFaultEnableSupported; };
uint32_t getParamValue(EuDebugParam param) const override;
EuDebugInterfaceType getInterfaceType() const override { return euDebugInterfaceType; };
EuDebugInterfaceType getInterfaceType() const override { return currentInterfaceType; };
uint64_t getDefaultClientHandle() const override {
return 1; // EuDebugInterfaceUpstream::defaultClientHandle
};
@@ -42,6 +41,11 @@ class MockEuDebugInterface : public EuDebugInterface {
std::unique_ptr<void, void (*)(void *)> toDrmEuDebugAckEvent(const EuDebugAckEvent &ackEvent) override;
bool pageFaultEnableSupported = false;
EuDebugInterfaceType currentInterfaceType = EuDebugInterfaceType::upstream;
void setCurrentInterfaceType(EuDebugInterfaceType newType) {
currentInterfaceType = newType;
}
};
} // namespace NEO

View File

@@ -242,7 +242,7 @@ TEST_F(IoctlHelperXeTest, givenInvalidPathWhenCreateEuDebugInterfaceThenReturnNu
auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]);
VariableBackup<size_t> mockFreadReturnBackup(&IoFunctions::mockFreadReturn, 0);
VariableBackup<const char *> eudebugSysFsEntryBackup(&eudebugSysfsEntry[static_cast<uint32_t>(MockEuDebugInterface::euDebugInterfaceType)], "invalidEntry");
VariableBackup<const char *> eudebugSysFsEntryBackup(&eudebugSysfsEntry[static_cast<uint32_t>(EuDebugInterfaceType::upstream)], "invalidEntry");
auto euDebugInterface = EuDebugInterface::create(drm->getSysFsPciPath());
EXPECT_EQ(nullptr, euDebugInterface);
@@ -263,6 +263,8 @@ TEST_F(IoctlHelperXeTest, givenXeRegisterResourceThenCorrectIoctlCalled) {
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]);
auto xeIoctlHelper = static_cast<MockIoctlHelperXeDebug *>(drm->ioctlHelper.get());
auto &eudebugInterface = xeIoctlHelper->euDebugInterface;
static_cast<MockEuDebugInterface *>(eudebugInterface.get())->setCurrentInterfaceType(EuDebugInterfaceType::prelim);
constexpr size_t bufferSize = 20;
uint8_t buffer[bufferSize];
@@ -298,7 +300,6 @@ TEST_F(IoctlHelperXeTest, givenXeRegisterResourceThenCorrectIoctlCalled) {
EXPECT_EQ(drm->metadataAddr, buffer);
EXPECT_EQ(drm->metadataSize, bufferSize);
EXPECT_EQ(drm->metadataType, static_cast<uint64_t>(EuDebugParam::metadataSbaArea));
drm->metadataID = 0;
drm->metadataAddr = nullptr;
drm->metadataSize = 0;
@@ -313,6 +314,9 @@ TEST_F(IoctlHelperXeTest, givenXeunregisterResourceThenCorrectIoctlCalled) {
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]);
auto xeIoctlHelper = static_cast<MockIoctlHelperXeDebug *>(drm->ioctlHelper.get());
auto &eudebugInterface = xeIoctlHelper->euDebugInterface;
static_cast<MockEuDebugInterface *>(eudebugInterface.get())->setCurrentInterfaceType(EuDebugInterfaceType::prelim);
xeIoctlHelper->unregisterResource(0x1234);
EXPECT_EQ(drm->metadataID, 0x1234u);
}
@@ -321,6 +325,8 @@ TEST_F(IoctlHelperXeTest, whenGettingVmBindExtFromHandlesThenProperStructsAreRet
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]);
auto xeIoctlHelper = static_cast<MockIoctlHelperXeDebug *>(drm->ioctlHelper.get());
auto &eudebugInterface = xeIoctlHelper->euDebugInterface;
static_cast<MockEuDebugInterface *>(eudebugInterface.get())->setCurrentInterfaceType(EuDebugInterfaceType::prelim);
StackVec<uint32_t, 2> bindExtHandles;
bindExtHandles.push_back(1u);
@@ -340,6 +346,26 @@ TEST_F(IoctlHelperXeTest, whenGettingVmBindExtFromHandlesThenProperStructsAreRet
EXPECT_EQ(reinterpret_cast<uintptr_t>(&vmBindExt[2]), vmBindExt[1].base.nextExtension);
}
TEST_F(IoctlHelperXeTest, givenUpstreamEuDebugInterfaceThenRegisterAndUnregisterResourceAndPrepareVmBindExtReturnEarly) {
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]);
auto xeIoctlHelper = static_cast<MockIoctlHelperXeDebug *>(drm->ioctlHelper.get());
constexpr size_t bufferSize = 20;
uint8_t buffer[bufferSize];
auto id = xeIoctlHelper->registerResource(DrmResourceClass::elf, buffer, bufferSize);
EXPECT_EQ(id, 0u);
drm->metadataID = 0x6789u;
xeIoctlHelper->unregisterResource(0x1234);
EXPECT_EQ(drm->metadataID, 0x6789u);
StackVec<uint32_t, 2> bindExtHandles;
auto retVal = xeIoctlHelper->prepareVmBindExt(bindExtHandles, 1);
EXPECT_EQ(retVal, nullptr);
}
TEST_F(IoctlHelperXeTest, givenRegisterIsaHandleWhenIsaIsTileInstancedThenBOCookieSet) {
const uint32_t rootDeviceIndex = 0u;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();