Skip to content

Commit dbf9e7f

Browse files
JemaleCompute-Runtime-Automation
authored andcommitted
refactor: Add conditions for metadata and vmbind handling
Resolves: NEO-16089 Signed-off-by: Jemale Lockett <[email protected]>
1 parent 71cec32 commit dbf9e7f

File tree

4 files changed

+45
-5
lines changed

4 files changed

+45
-5
lines changed

shared/source/os_interface/linux/xe/ioctl_helper_xe_debugger.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ int IoctlHelperXe::getEuDebugSysFsEnable() {
6666
}
6767

6868
uint32_t IoctlHelperXe::registerResource(DrmResourceClass classType, const void *data, size_t size) {
69+
if (euDebugInterface->getInterfaceType() != EuDebugInterfaceType::prelim) {
70+
return 0;
71+
}
72+
6973
DebugMetadataCreate metadata = {};
7074
if (classType == DrmResourceClass::elf) {
7175
metadata.type = euDebugInterface->getParamValue(EuDebugParam::metadataElfBinary);
@@ -98,6 +102,9 @@ uint32_t IoctlHelperXe::registerResource(DrmResourceClass classType, const void
98102
}
99103

100104
void IoctlHelperXe::unregisterResource(uint32_t handle) {
105+
if (euDebugInterface->getInterfaceType() != EuDebugInterfaceType::prelim) {
106+
return;
107+
}
101108
DebugMetadataDestroy metadata = {};
102109
metadata.metadataId = handle;
103110
[[maybe_unused]] auto retVal = IoctlHelperXe::ioctl(DrmIoctl::metadataDestroy, &metadata);
@@ -106,6 +113,9 @@ void IoctlHelperXe::unregisterResource(uint32_t handle) {
106113
}
107114

108115
std::unique_ptr<uint8_t[]> IoctlHelperXe::prepareVmBindExt(const StackVec<uint32_t, 2> &bindExtHandles, uint64_t cookie) {
116+
if (euDebugInterface->getInterfaceType() != EuDebugInterfaceType::prelim) {
117+
return nullptr;
118+
}
109119

110120
static_assert(std::is_trivially_destructible_v<VmBindOpExtAttachDebug>,
111121
"Storage must be allowed to be reused without calling the destructor!");

shared/test/common/os_interface/linux/xe/eudebug/mock_eudebug_interface.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,5 +243,5 @@ std::unique_ptr<void, void (*)(void *)> MockEuDebugInterface::toDrmEuDebugAckEve
243243
}
244244

245245
char MockEuDebugInterface::sysFsContent = '1';
246-
[[maybe_unused]] static EnableEuDebugInterface enableMockEuDebug(MockEuDebugInterface::euDebugInterfaceType, MockEuDebugInterface::sysFsXeEuDebugFile, []() -> std::unique_ptr<EuDebugInterface> { return std::make_unique<MockEuDebugInterface>(); });
246+
[[maybe_unused]] static EnableEuDebugInterface enableMockEuDebug(EuDebugInterfaceType::upstream, MockEuDebugInterface::sysFsXeEuDebugFile, []() -> std::unique_ptr<EuDebugInterface> { return std::make_unique<MockEuDebugInterface>(); });
247247
} // namespace NEO

shared/test/common/os_interface/linux/xe/eudebug/mock_eudebug_interface.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ class MockEuDebugInterface : public EuDebugInterface {
1414
static char sysFsContent;
1515
static constexpr const char *sysFsXeEuDebugFile = "/mock_eudebug";
1616
static constexpr uintptr_t sysFsFd = 0xE0DEB0;
17-
static constexpr EuDebugInterfaceType euDebugInterfaceType = EuDebugInterfaceType::upstream;
1817
bool isExecQueuePageFaultEnableSupported() override { return pageFaultEnableSupported; };
1918
uint32_t getParamValue(EuDebugParam param) const override;
20-
EuDebugInterfaceType getInterfaceType() const override { return euDebugInterfaceType; };
19+
EuDebugInterfaceType getInterfaceType() const override { return currentInterfaceType; };
2120
uint64_t getDefaultClientHandle() const override {
2221
return 1; // EuDebugInterfaceUpstream::defaultClientHandle
2322
};
@@ -42,6 +41,11 @@ class MockEuDebugInterface : public EuDebugInterface {
4241
std::unique_ptr<void, void (*)(void *)> toDrmEuDebugAckEvent(const EuDebugAckEvent &ackEvent) override;
4342

4443
bool pageFaultEnableSupported = false;
44+
45+
EuDebugInterfaceType currentInterfaceType = EuDebugInterfaceType::upstream;
46+
void setCurrentInterfaceType(EuDebugInterfaceType newType) {
47+
currentInterfaceType = newType;
48+
}
4549
};
4650

4751
} // namespace NEO

shared/test/unit_test/os_interface/linux/xe/ioctl_helper_xe_debugger_tests.cpp

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ TEST_F(IoctlHelperXeTest, givenInvalidPathWhenCreateEuDebugInterfaceThenReturnNu
242242
auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]);
243243

244244
VariableBackup<size_t> mockFreadReturnBackup(&IoFunctions::mockFreadReturn, 0);
245-
VariableBackup<const char *> eudebugSysFsEntryBackup(&eudebugSysfsEntry[static_cast<uint32_t>(MockEuDebugInterface::euDebugInterfaceType)], "invalidEntry");
245+
VariableBackup<const char *> eudebugSysFsEntryBackup(&eudebugSysfsEntry[static_cast<uint32_t>(EuDebugInterfaceType::upstream)], "invalidEntry");
246246

247247
auto euDebugInterface = EuDebugInterface::create(drm->getSysFsPciPath());
248248
EXPECT_EQ(nullptr, euDebugInterface);
@@ -263,6 +263,8 @@ TEST_F(IoctlHelperXeTest, givenXeRegisterResourceThenCorrectIoctlCalled) {
263263
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
264264
auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]);
265265
auto xeIoctlHelper = static_cast<MockIoctlHelperXeDebug *>(drm->ioctlHelper.get());
266+
auto &eudebugInterface = xeIoctlHelper->euDebugInterface;
267+
static_cast<MockEuDebugInterface *>(eudebugInterface.get())->setCurrentInterfaceType(EuDebugInterfaceType::prelim);
266268
constexpr size_t bufferSize = 20;
267269
uint8_t buffer[bufferSize];
268270

@@ -298,7 +300,6 @@ TEST_F(IoctlHelperXeTest, givenXeRegisterResourceThenCorrectIoctlCalled) {
298300
EXPECT_EQ(drm->metadataAddr, buffer);
299301
EXPECT_EQ(drm->metadataSize, bufferSize);
300302
EXPECT_EQ(drm->metadataType, static_cast<uint64_t>(EuDebugParam::metadataSbaArea));
301-
302303
drm->metadataID = 0;
303304
drm->metadataAddr = nullptr;
304305
drm->metadataSize = 0;
@@ -313,6 +314,9 @@ TEST_F(IoctlHelperXeTest, givenXeunregisterResourceThenCorrectIoctlCalled) {
313314
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
314315
auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]);
315316
auto xeIoctlHelper = static_cast<MockIoctlHelperXeDebug *>(drm->ioctlHelper.get());
317+
auto &eudebugInterface = xeIoctlHelper->euDebugInterface;
318+
static_cast<MockEuDebugInterface *>(eudebugInterface.get())->setCurrentInterfaceType(EuDebugInterfaceType::prelim);
319+
316320
xeIoctlHelper->unregisterResource(0x1234);
317321
EXPECT_EQ(drm->metadataID, 0x1234u);
318322
}
@@ -321,6 +325,8 @@ TEST_F(IoctlHelperXeTest, whenGettingVmBindExtFromHandlesThenProperStructsAreRet
321325
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
322326
auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]);
323327
auto xeIoctlHelper = static_cast<MockIoctlHelperXeDebug *>(drm->ioctlHelper.get());
328+
auto &eudebugInterface = xeIoctlHelper->euDebugInterface;
329+
static_cast<MockEuDebugInterface *>(eudebugInterface.get())->setCurrentInterfaceType(EuDebugInterfaceType::prelim);
324330

325331
StackVec<uint32_t, 2> bindExtHandles;
326332
bindExtHandles.push_back(1u);
@@ -340,6 +346,26 @@ TEST_F(IoctlHelperXeTest, whenGettingVmBindExtFromHandlesThenProperStructsAreRet
340346
EXPECT_EQ(reinterpret_cast<uintptr_t>(&vmBindExt[2]), vmBindExt[1].base.nextExtension);
341347
}
342348

349+
TEST_F(IoctlHelperXeTest, givenUpstreamEuDebugInterfaceThenRegisterAndUnregisterResourceAndPrepareVmBindExtReturnEarly) {
350+
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
351+
auto drm = DrmMockXeDebug::create(*executionEnvironment->rootDeviceEnvironments[0]);
352+
auto xeIoctlHelper = static_cast<MockIoctlHelperXeDebug *>(drm->ioctlHelper.get());
353+
354+
constexpr size_t bufferSize = 20;
355+
uint8_t buffer[bufferSize];
356+
357+
auto id = xeIoctlHelper->registerResource(DrmResourceClass::elf, buffer, bufferSize);
358+
EXPECT_EQ(id, 0u);
359+
360+
drm->metadataID = 0x6789u;
361+
xeIoctlHelper->unregisterResource(0x1234);
362+
EXPECT_EQ(drm->metadataID, 0x6789u);
363+
364+
StackVec<uint32_t, 2> bindExtHandles;
365+
auto retVal = xeIoctlHelper->prepareVmBindExt(bindExtHandles, 1);
366+
EXPECT_EQ(retVal, nullptr);
367+
}
368+
343369
TEST_F(IoctlHelperXeTest, givenRegisterIsaHandleWhenIsaIsTileInstancedThenBOCookieSet) {
344370
const uint32_t rootDeviceIndex = 0u;
345371
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();

0 commit comments

Comments
 (0)