mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 09:09:04 +08:00
fix: Dont process vmBind if clientHandle is Invalid
Related-To: NEO-11104 Signed-off-by: Jitendra Sharma <jitendra.sharma@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
e95c7aac92
commit
cf8551ca06
@@ -234,6 +234,11 @@ struct MockDebugSessionLinuxXe : public L0::DebugSessionLinuxXe {
|
||||
return DebugSessionLinuxXe::processPendingVmBindEvents();
|
||||
}
|
||||
|
||||
bool handleVmBind(VmBindData &vmBindData) override {
|
||||
handleVmBindCallCount++;
|
||||
return DebugSessionLinuxXe::handleVmBind(vmBindData);
|
||||
}
|
||||
|
||||
int threadControl(const std::vector<EuThread::ThreadId> &threads, uint32_t tile, ThreadControlCmd threadCmd, std::unique_ptr<uint8_t[]> &bitmask, size_t &bitmaskSize) override {
|
||||
numThreadsPassedToThreadControl = threads.size();
|
||||
return L0::DebugSessionLinuxXe::threadControl(threads, tile, threadCmd, bitmask, bitmaskSize);
|
||||
@@ -307,6 +312,7 @@ struct MockDebugSessionLinuxXe : public L0::DebugSessionLinuxXe {
|
||||
|
||||
uint32_t readSystemRoutineIdentCallCount = 0;
|
||||
uint32_t processPendingVmBindEventsCallCount = 0;
|
||||
uint32_t handleVmBindCallCount = 0;
|
||||
uint32_t addThreadToNewlyStoppedFromRaisedAttentionCallCount = 0;
|
||||
uint32_t readSystemRoutineIdentFromMemoryCallCount = 0;
|
||||
size_t numThreadsPassedToThreadControl = 0;
|
||||
|
||||
@@ -1440,6 +1440,53 @@ TEST_F(DebugApiLinuxTestXe, GivenNoEventRelatedToVmBindHandlingWhenHandleInterna
|
||||
EXPECT_TRUE(session->handleInternalEvent());
|
||||
}
|
||||
|
||||
TEST_F(DebugApiLinuxTestXe, GivenEventTypeExecQueuePlacementsAndClientHandleIsInvalidWhenHandleInternalEventCalledThenHandleVmBindNotCalled) {
|
||||
zet_debug_config_t config = {};
|
||||
config.pid = 0x1234;
|
||||
|
||||
auto session = std::make_unique<MockDebugSessionLinuxXe>(config, device, 10);
|
||||
ASSERT_NE(nullptr, session);
|
||||
|
||||
auto &vmBindData = session->clientHandleToConnection[MockDebugSessionLinuxXe::mockClientHandle]->vmBindMap[1];
|
||||
vmBindData.pendingNumBinds = 1;
|
||||
|
||||
constexpr uint64_t vmHandle = 10;
|
||||
// Allocate memory for the structure including the flexible array member
|
||||
constexpr auto size = sizeof(NEO::EuDebugEventExecQueuePlacements) + sizeof(drm_xe_engine_class_instance) * 1;
|
||||
|
||||
uint8_t memoryExecQueuePlacements[size];
|
||||
auto execQueuePlacements = reinterpret_cast<NEO::EuDebugEventExecQueuePlacements *>(memoryExecQueuePlacements);
|
||||
memset(execQueuePlacements, 0, size);
|
||||
execQueuePlacements->base.type = static_cast<uint16_t>(NEO::EuDebugParam::eventTypeExecQueuePlacements);
|
||||
execQueuePlacements->base.len = sizeof(NEO::EuDebugEventExecQueuePlacements);
|
||||
execQueuePlacements->clientHandle = MockDebugSessionLinuxXe::mockClientHandle;
|
||||
execQueuePlacements->vmHandle = vmHandle;
|
||||
execQueuePlacements->execQueueHandle = 200;
|
||||
execQueuePlacements->lrcHandle = 10;
|
||||
execQueuePlacements->numPlacements = 1;
|
||||
|
||||
auto engineClassInstance = reinterpret_cast<drm_xe_engine_class_instance *>(&(execQueuePlacements->instances[0]));
|
||||
engineClassInstance[0].engine_class = 0;
|
||||
engineClassInstance[0].engine_instance = 1;
|
||||
engineClassInstance[0].gt_id = 1;
|
||||
|
||||
auto memory = std::make_unique<uint64_t[]>(size / sizeof(uint64_t));
|
||||
memcpy(memory.get(), memoryExecQueuePlacements, size);
|
||||
|
||||
// Clear the event queue before using it
|
||||
while (!session->internalEventQueue.empty()) {
|
||||
session->internalEventQueue.pop();
|
||||
}
|
||||
session->internalEventQueue.push(std::move(memory));
|
||||
|
||||
session->clientHandle = DebugSessionLinuxXe::invalidClientHandle;
|
||||
EXPECT_EQ(session->handleVmBindCallCount, 0u);
|
||||
|
||||
EXPECT_TRUE(session->handleInternalEvent());
|
||||
|
||||
EXPECT_EQ(session->handleVmBindCallCount, 0u);
|
||||
}
|
||||
|
||||
TEST_F(DebugApiLinuxTestXe, GivenEventTypeExecQueuePlacementsWhenHandleInternalEventCalledThenProcessPendingVmBindEventsCalled) {
|
||||
zet_debug_config_t config = {};
|
||||
config.pid = 0x1234;
|
||||
|
||||
Reference in New Issue
Block a user