mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
fix: Dont directly use gtId as TileId
gtId is not same as tileId. instead use gtIdToTileId to retrieve tileId based on gtId. Related-To: NEO-11104 Signed-off-by: Jitendra Sharma <jitendra.sharma@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
1ce795c265
commit
8f5a0995e0
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2022-2024 Intel Corporation
|
||||
* Copyright (C) 2022-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@ -20,6 +20,11 @@ int DrmHelper::ioctl(Device *device, NEO::DrmIoctl request, void *arg) {
|
||||
return drm->getIoctlHelper()->ioctl(request, arg);
|
||||
}
|
||||
|
||||
int DrmHelper::getTileIdFromGtId(Device *device, int gtId) {
|
||||
auto drm = device->getOsInterface().getDriverModel()->as<NEO::Drm>();
|
||||
return drm->getIoctlHelper()->getTileIdFromGtId(gtId);
|
||||
}
|
||||
|
||||
std::string DrmHelper::getSysFsPciPath(Device *device) {
|
||||
auto drm = device->getOsInterface().getDriverModel()->as<NEO::Drm>();
|
||||
return drm->getSysFsPciPath();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2022-2024 Intel Corporation
|
||||
* Copyright (C) 2022-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@ -26,6 +26,7 @@ struct DrmHelper {
|
||||
static int getErrno(Device *device);
|
||||
static uint32_t getEngineTileIndex(Device *device, const NEO::EngineClassInstance &engine);
|
||||
static const NEO::EngineClassInstance *getEngineInstance(Device *device, uint32_t tile, aub_stream::EngineType engineType);
|
||||
static int getTileIdFromGtId(Device *device, int gtId);
|
||||
};
|
||||
|
||||
} // namespace L0
|
||||
|
@ -363,18 +363,19 @@ void DebugSessionLinuxXe::handleEvent(NEO::EuDebugEvent *event) {
|
||||
|
||||
UNRECOVERABLE_IF(execQueuePlacements->numPlacements == 0);
|
||||
auto engine = reinterpret_cast<NEO::XeEngineClassInstance *>(&(execQueuePlacements->instances[0]));
|
||||
auto tileIndex = engine->gtId;
|
||||
auto tileIndex = DrmHelper::getTileIdFromGtId(connectedDevice, engine->gtId);
|
||||
UNRECOVERABLE_IF(tileIndex < 0);
|
||||
|
||||
auto &vmToTile = clientHandleToConnection[execQueuePlacements->clientHandle]->vmToTile;
|
||||
if (vmToTile.find(execQueuePlacements->vmHandle) != vmToTile.end()) {
|
||||
if (vmToTile[execQueuePlacements->vmHandle] != tileIndex) {
|
||||
PRINT_DEBUGGER_ERROR_LOG("vmToTile map: For vm_handle = %lu tileIndex = %u already present. Attempt to overwrite with tileIndex = %u\n",
|
||||
if (vmToTile[execQueuePlacements->vmHandle] != static_cast<uint32_t>(tileIndex)) {
|
||||
PRINT_DEBUGGER_ERROR_LOG("vmToTile map: For vm_handle = %lu tileIndex = %u already present. Attempt to overwrite with tileIndex = %d\n",
|
||||
static_cast<uint64_t>(execQueuePlacements->vmHandle), vmToTile[execQueuePlacements->vmHandle], tileIndex);
|
||||
DEBUG_BREAK_IF(true);
|
||||
}
|
||||
} else {
|
||||
clientHandleToConnection[execQueuePlacements->clientHandle]->vmToTile[execQueuePlacements->vmHandle] = tileIndex;
|
||||
PRINT_DEBUGGER_INFO_LOG("clientHandleToConnection[%" SCNx64 "]->vmToTile[%" SCNx64 "] = %u\n",
|
||||
PRINT_DEBUGGER_INFO_LOG("clientHandleToConnection[%" SCNx64 "]->vmToTile[%" SCNx64 "] = %d\n",
|
||||
static_cast<uint64_t>(execQueuePlacements->clientHandle), static_cast<uint64_t>(execQueuePlacements->vmHandle), tileIndex);
|
||||
}
|
||||
} else if (type == euDebugInterface->getParamValue(NEO::EuDebugParam::eventTypePagefault)) {
|
||||
|
@ -1468,7 +1468,7 @@ TEST_F(DebugApiLinuxTestXe, GivenEventTypeExecQueuePlacementsAndClientHandleIsIn
|
||||
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;
|
||||
engineClassInstance[0].gt_id = 2;
|
||||
|
||||
auto memory = std::make_unique<uint64_t[]>(size / sizeof(uint64_t));
|
||||
memcpy(memory.get(), memoryExecQueuePlacements, size);
|
||||
@ -1515,7 +1515,7 @@ TEST_F(DebugApiLinuxTestXe, GivenEventTypeExecQueuePlacementsWhenHandleInternalE
|
||||
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;
|
||||
engineClassInstance[0].gt_id = 2;
|
||||
|
||||
auto memory = std::make_unique<uint64_t[]>(size / sizeof(uint64_t));
|
||||
memcpy(memory.get(), memoryExecQueuePlacements, size);
|
||||
@ -2864,7 +2864,7 @@ TEST_F(DebugApiLinuxTestXe, GivenExecQueuePlacementEventWhenHandlingThenVmToTile
|
||||
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;
|
||||
engineClassInstance[0].gt_id = 2;
|
||||
|
||||
session->handleEvent(&execQueuePlacements->base);
|
||||
alignedFree(memory);
|
||||
@ -2894,7 +2894,7 @@ TEST_F(DebugApiLinuxTestXe, GivenMultipleExecQueuePlacementEventForSameVmHandleW
|
||||
constexpr uint64_t vmHandle = 10;
|
||||
session->clientHandleToConnection[client1.clientHandle]->vmToTile[vmHandle] = 1;
|
||||
// Allocate memory for the structure including the flexible array member
|
||||
constexpr auto size = sizeof(NEO::EuDebugEventExecQueuePlacements) + sizeof(drm_xe_engine_class_instance) * 1;
|
||||
constexpr auto size = sizeof(NEO::EuDebugEventExecQueuePlacements) + sizeof(NEO::XeEngineClassInstance) * 1;
|
||||
auto memory = alignedMalloc(size, sizeof(NEO::EuDebugEventExecQueuePlacements));
|
||||
auto execQueuePlacements = static_cast<NEO::EuDebugEventExecQueuePlacements *>(memory);
|
||||
memset(execQueuePlacements, 0, size);
|
||||
@ -2906,10 +2906,10 @@ TEST_F(DebugApiLinuxTestXe, GivenMultipleExecQueuePlacementEventForSameVmHandleW
|
||||
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 = 0;
|
||||
auto engineClassInstance = reinterpret_cast<NEO::XeEngineClassInstance *>(&(execQueuePlacements->instances[0]));
|
||||
engineClassInstance[0].engineClass = 0;
|
||||
engineClassInstance[0].engineInstance = 1;
|
||||
engineClassInstance[0].gtId = 0;
|
||||
|
||||
::testing::internal::CaptureStderr();
|
||||
session->handleEvent(&execQueuePlacements->base);
|
||||
|
Reference in New Issue
Block a user