mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-27 15:53:13 +08:00
L0 Debugger - DebugSession linux implementation
- new feature, enabled with PRELIM build - implementation of debug session for linux - move ResourceClass enum from Drm to drm_debug.h Resolves: NEO-6814 Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
4e4560fe91
commit
c021e2ec5e
@@ -175,26 +175,26 @@ void DrmAllocation::registerBOBindExtHandle(Drm *drm) {
|
||||
return;
|
||||
}
|
||||
|
||||
Drm::ResourceClass resourceClass = Drm::ResourceClass::MaxSize;
|
||||
DrmResourceClass resourceClass = DrmResourceClass::MaxSize;
|
||||
|
||||
switch (this->allocationType) {
|
||||
case AllocationType::DEBUG_CONTEXT_SAVE_AREA:
|
||||
resourceClass = Drm::ResourceClass::ContextSaveArea;
|
||||
resourceClass = DrmResourceClass::ContextSaveArea;
|
||||
break;
|
||||
case AllocationType::DEBUG_SBA_TRACKING_BUFFER:
|
||||
resourceClass = Drm::ResourceClass::SbaTrackingBuffer;
|
||||
resourceClass = DrmResourceClass::SbaTrackingBuffer;
|
||||
break;
|
||||
case AllocationType::KERNEL_ISA:
|
||||
resourceClass = Drm::ResourceClass::Isa;
|
||||
resourceClass = DrmResourceClass::Isa;
|
||||
break;
|
||||
case AllocationType::DEBUG_MODULE_AREA:
|
||||
resourceClass = Drm::ResourceClass::ModuleHeapDebugArea;
|
||||
resourceClass = DrmResourceClass::ModuleHeapDebugArea;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (resourceClass != Drm::ResourceClass::MaxSize) {
|
||||
if (resourceClass != DrmResourceClass::MaxSize) {
|
||||
uint64_t gpuAddress = getGpuAddress();
|
||||
auto handle = drm->registerResource(resourceClass, &gpuAddress, sizeof(gpuAddress));
|
||||
registeredBoBindHandles.push_back(handle);
|
||||
@@ -205,7 +205,7 @@ void DrmAllocation::registerBOBindExtHandle(Drm *drm) {
|
||||
if (bo) {
|
||||
bo->addBindExtHandle(handle);
|
||||
bo->markForCapture();
|
||||
if (resourceClass == Drm::ResourceClass::Isa) {
|
||||
if (resourceClass == DrmResourceClass::Isa) {
|
||||
auto cookieHandle = drm->registerIsaCookie(handle);
|
||||
bo->addBindExtHandle(cookieHandle);
|
||||
registeredBoBindHandles.push_back(cookieHandle);
|
||||
|
||||
@@ -30,13 +30,13 @@ bool Drm::registerResourceClasses() {
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t Drm::registerResource(ResourceClass classType, const void *data, size_t size) {
|
||||
uint32_t Drm::registerResource(DrmResourceClass classType, const void *data, size_t size) {
|
||||
if (classHandles.size() < static_cast<uint32_t>(classType)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string uuid;
|
||||
if (classType == NEO::Drm::ResourceClass::Elf) {
|
||||
if (classType == NEO::DrmResourceClass::Elf) {
|
||||
uuid = generateElfUUID(data);
|
||||
} else {
|
||||
uuid = generateUUID();
|
||||
@@ -85,7 +85,7 @@ std::string Drm::generateUUID() {
|
||||
}
|
||||
|
||||
std::string Drm::generateElfUUID(const void *data) {
|
||||
std::string elf_class_uuid = classNamesToUuid[static_cast<uint32_t>(Drm::ResourceClass::Elf)].second;
|
||||
std::string elf_class_uuid = classNamesToUuid[static_cast<uint32_t>(DrmResourceClass::Elf)].second;
|
||||
std::string UUID1st = elf_class_uuid.substr(0, 18);
|
||||
|
||||
const char uuidString[] = "%s-%04" SCNx64 "-%012" SCNx64;
|
||||
|
||||
@@ -5,12 +5,22 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/os_interface/linux/drm_neo.h"
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
namespace NEO {
|
||||
enum class DrmResourceClass : uint32_t {
|
||||
Elf,
|
||||
Isa,
|
||||
ModuleHeapDebugArea,
|
||||
ContextSaveArea,
|
||||
SbaTrackingBuffer,
|
||||
L0ZebinModule,
|
||||
MaxSize
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -44,7 +54,7 @@ UUID('285208b2-c5e0-5fcb-90bb-7576ed7a9697')
|
||||
|
||||
*/
|
||||
|
||||
using ClassNamesArray = std::array<std::pair<const char *, const std::string>, size_t(Drm::ResourceClass::MaxSize)>;
|
||||
using ClassNamesArray = std::array<std::pair<const char *, const std::string>, size_t(DrmResourceClass::MaxSize)>;
|
||||
const ClassNamesArray classNamesToUuid = {std::make_pair("I915_UUID_CLASS_ELF_BINARY", "31203221-8069-5a0a-9d43-94a4d3395ee1"),
|
||||
std::make_pair("I915_UUID_CLASS_ISA_BYTECODE", "53baed0a-12c3-5d19-aa69-ab9c51aa1039"),
|
||||
std::make_pair("I915_UUID_L0_MODULE_AREA", "a411e82e-16c9-58b7-bfb5-b209b8601d5f"),
|
||||
@@ -57,7 +67,7 @@ constexpr auto uuidL0CommandQueueHash = "285208b2-c5e0-5fcb-90bb-7576ed7a9697";
|
||||
|
||||
struct DrmUuid {
|
||||
static bool getClassUuidIndex(std::string uuid, uint32_t &index) {
|
||||
for (uint32_t i = 0; i < uint32_t(Drm::ResourceClass::MaxSize); i++) {
|
||||
for (uint32_t i = 0; i < uint32_t(DrmResourceClass::MaxSize); i++) {
|
||||
if (uuid == classNamesToUuid[i].second) {
|
||||
index = i;
|
||||
return true;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "shared/source/memory_manager/definitions/engine_limits.h"
|
||||
#include "shared/source/os_interface/driver_info.h"
|
||||
#include "shared/source/os_interface/linux/cache_info.h"
|
||||
#include "shared/source/os_interface/linux/drm_debug.h"
|
||||
#include "shared/source/os_interface/linux/engine_info.h"
|
||||
#include "shared/source/os_interface/linux/hw_device_id.h"
|
||||
#include "shared/source/os_interface/linux/memory_info.h"
|
||||
@@ -66,16 +67,6 @@ class Drm : public DriverModel {
|
||||
static constexpr DriverModelType driverModelType = DriverModelType::DRM;
|
||||
static constexpr size_t completionFenceOffset = 1024;
|
||||
|
||||
enum class ResourceClass : uint32_t {
|
||||
Elf,
|
||||
Isa,
|
||||
ModuleHeapDebugArea,
|
||||
ContextSaveArea,
|
||||
SbaTrackingBuffer,
|
||||
L0ZebinModule,
|
||||
MaxSize
|
||||
};
|
||||
|
||||
struct QueryTopologyData {
|
||||
int sliceCount;
|
||||
int subSliceCount;
|
||||
@@ -174,7 +165,7 @@ class Drm : public DriverModel {
|
||||
MOCKABLE_VIRTUAL void queryPageFaultSupport();
|
||||
MOCKABLE_VIRTUAL bool hasPageFaultSupport() const;
|
||||
|
||||
MOCKABLE_VIRTUAL uint32_t registerResource(ResourceClass classType, const void *data, size_t size);
|
||||
MOCKABLE_VIRTUAL uint32_t registerResource(DrmResourceClass classType, const void *data, size_t size);
|
||||
MOCKABLE_VIRTUAL void unregisterResource(uint32_t handle);
|
||||
MOCKABLE_VIRTUAL uint32_t registerIsaCookie(uint32_t isaHandle);
|
||||
|
||||
@@ -318,7 +309,7 @@ class Drm : public DriverModel {
|
||||
std::mutex bindFenceMutex;
|
||||
std::array<uint64_t, EngineLimits::maxHandleCount> pagingFence;
|
||||
std::array<uint64_t, EngineLimits::maxHandleCount> fenceVal;
|
||||
StackVec<uint32_t, size_t(ResourceClass::MaxSize)> classHandles;
|
||||
StackVec<uint32_t, size_t(DrmResourceClass::MaxSize)> classHandles;
|
||||
std::vector<uint32_t> virtualMemoryIds;
|
||||
|
||||
std::unique_ptr<HwDeviceIdDrm> hwDeviceId;
|
||||
|
||||
Reference in New Issue
Block a user