From 4440c55725a9c180a2403df4f7ed8de46caa32f8 Mon Sep 17 00:00:00 2001 From: Lukasz Jobczyk Date: Tue, 11 May 2021 12:56:07 +0000 Subject: [PATCH] Add ioctl to string decoder Signed-off-by: Lukasz Jobczyk --- shared/source/os_interface/linux/drm_neo.cpp | 127 +++++++++++++++++- shared/source/os_interface/linux/drm_neo.h | 2 + .../source/os_interface/linux/drm_query.cpp | 4 + .../os_interface/linux/drm_query_dg1.cpp | 4 + 4 files changed, 134 insertions(+), 3 deletions(-) diff --git a/shared/source/os_interface/linux/drm_neo.cpp b/shared/source/os_interface/linux/drm_neo.cpp index 5cf4333bd9..2f5f2b46ff 100644 --- a/shared/source/os_interface/linux/drm_neo.cpp +++ b/shared/source/os_interface/linux/drm_neo.cpp @@ -488,14 +488,135 @@ void Drm::printIoctlStatistics() { return; } - printf("\n --- Ioctls statistics ---\n"); - printf(" Request Total time(ns) Count Avg time per ioctl\n"); + printf("\n--- Ioctls statistics ---\n"); + printf("%40s %15s %10s %20s", "Request", "Total time(ns)", "Count", "Avg time per ioctl\n"); for (const auto &ioctlData : this->ioctlStatistics) { - printf("%15lu %15llu %10lu %20f\n", ioctlData.first, ioctlData.second.first, static_cast(ioctlData.second.second), ioctlData.second.first / static_cast(ioctlData.second.second)); + printf("%40s %15llu %10lu %20f\n", this->ioctlToString(ioctlData.first).c_str(), ioctlData.second.first, static_cast(ioctlData.second.second), ioctlData.second.first / static_cast(ioctlData.second.second)); } printf("\n"); } +std::string Drm::ioctlToString(unsigned long request) { + switch (request) { + case DRM_IOCTL_I915_GEM_EXECBUFFER2: + return "DRM_IOCTL_I915_GEM_EXECBUFFER2"; + case DRM_IOCTL_I915_GEM_WAIT: + return "DRM_IOCTL_I915_GEM_WAIT"; + case DRM_IOCTL_GEM_CLOSE: + return "DRM_IOCTL_GEM_CLOSE"; + case DRM_IOCTL_I915_GEM_USERPTR: + return "DRM_IOCTL_I915_GEM_USERPTR"; + case DRM_IOCTL_I915_INIT: + return "DRM_IOCTL_I915_INIT"; + case DRM_IOCTL_I915_FLUSH: + return "DRM_IOCTL_I915_FLUSH"; + case DRM_IOCTL_I915_FLIP: + return "DRM_IOCTL_I915_FLIP"; + case DRM_IOCTL_I915_BATCHBUFFER: + return "DRM_IOCTL_I915_BATCHBUFFER"; + case DRM_IOCTL_I915_IRQ_EMIT: + return "DRM_IOCTL_I915_IRQ_EMIT"; + case DRM_IOCTL_I915_IRQ_WAIT: + return "DRM_IOCTL_I915_IRQ_WAIT"; + case DRM_IOCTL_I915_GETPARAM: + return "DRM_IOCTL_I915_GETPARAM"; + case DRM_IOCTL_I915_SETPARAM: + return "DRM_IOCTL_I915_SETPARAM"; + case DRM_IOCTL_I915_ALLOC: + return "DRM_IOCTL_I915_ALLOC"; + case DRM_IOCTL_I915_FREE: + return "DRM_IOCTL_I915_FREE"; + case DRM_IOCTL_I915_INIT_HEAP: + return "DRM_IOCTL_I915_INIT_HEAP"; + case DRM_IOCTL_I915_CMDBUFFER: + return "DRM_IOCTL_I915_CMDBUFFER"; + case DRM_IOCTL_I915_DESTROY_HEAP: + return "DRM_IOCTL_I915_DESTROY_HEAP"; + case DRM_IOCTL_I915_SET_VBLANK_PIPE: + return "DRM_IOCTL_I915_SET_VBLANK_PIPE"; + case DRM_IOCTL_I915_GET_VBLANK_PIPE: + return "DRM_IOCTL_I915_GET_VBLANK_PIPE"; + case DRM_IOCTL_I915_VBLANK_SWAP: + return "DRM_IOCTL_I915_VBLANK_SWAP"; + case DRM_IOCTL_I915_HWS_ADDR: + return "DRM_IOCTL_I915_HWS_ADDR"; + case DRM_IOCTL_I915_GEM_INIT: + return "DRM_IOCTL_I915_GEM_INIT"; + case DRM_IOCTL_I915_GEM_EXECBUFFER: + return "DRM_IOCTL_I915_GEM_EXECBUFFER"; + case DRM_IOCTL_I915_GEM_EXECBUFFER2_WR: + return "DRM_IOCTL_I915_GEM_EXECBUFFER2_WR"; + case DRM_IOCTL_I915_GEM_PIN: + return "DRM_IOCTL_I915_GEM_PIN"; + case DRM_IOCTL_I915_GEM_UNPIN: + return "DRM_IOCTL_I915_GEM_UNPIN"; + case DRM_IOCTL_I915_GEM_BUSY: + return "DRM_IOCTL_I915_GEM_BUSY"; + case DRM_IOCTL_I915_GEM_SET_CACHING: + return "DRM_IOCTL_I915_GEM_SET_CACHING"; + case DRM_IOCTL_I915_GEM_GET_CACHING: + return "DRM_IOCTL_I915_GEM_GET_CACHING"; + case DRM_IOCTL_I915_GEM_THROTTLE: + return "DRM_IOCTL_I915_GEM_THROTTLE"; + case DRM_IOCTL_I915_GEM_ENTERVT: + return "DRM_IOCTL_I915_GEM_ENTERVT"; + case DRM_IOCTL_I915_GEM_LEAVEVT: + return "DRM_IOCTL_I915_GEM_LEAVEVT"; + case DRM_IOCTL_I915_GEM_CREATE: + return "DRM_IOCTL_I915_GEM_CREATE"; + case DRM_IOCTL_I915_GEM_PREAD: + return "DRM_IOCTL_I915_GEM_PREAD"; + case DRM_IOCTL_I915_GEM_PWRITE: + return "DRM_IOCTL_I915_GEM_PWRITE"; + case DRM_IOCTL_I915_GEM_SET_DOMAIN: + return "DRM_IOCTL_I915_GEM_SET_DOMAIN"; + case DRM_IOCTL_I915_GEM_SW_FINISH: + return "DRM_IOCTL_I915_GEM_SW_FINISH"; + case DRM_IOCTL_I915_GEM_SET_TILING: + return "DRM_IOCTL_I915_GEM_SET_TILING"; + case DRM_IOCTL_I915_GEM_GET_TILING: + return "DRM_IOCTL_I915_GEM_GET_TILING"; + case DRM_IOCTL_I915_GEM_GET_APERTURE: + return "DRM_IOCTL_I915_GEM_GET_APERTURE"; + case DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID: + return "DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID"; + case DRM_IOCTL_I915_GEM_MADVISE: + return "DRM_IOCTL_I915_GEM_MADVISE"; + case DRM_IOCTL_I915_OVERLAY_PUT_IMAGE: + return "DRM_IOCTL_I915_OVERLAY_PUT_IMAGE"; + case DRM_IOCTL_I915_OVERLAY_ATTRS: + return "DRM_IOCTL_I915_OVERLAY_ATTRS"; + case DRM_IOCTL_I915_SET_SPRITE_COLORKEY: + return "DRM_IOCTL_I915_SET_SPRITE_COLORKEY"; + case DRM_IOCTL_I915_GET_SPRITE_COLORKEY: + return "DRM_IOCTL_I915_GET_SPRITE_COLORKEY"; + case DRM_IOCTL_I915_GEM_CONTEXT_CREATE: + return "DRM_IOCTL_I915_GEM_CONTEXT_CREATE"; + case DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT: + return "DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT"; + case DRM_IOCTL_I915_GEM_CONTEXT_DESTROY: + return "DRM_IOCTL_I915_GEM_CONTEXT_DESTROY"; + case DRM_IOCTL_I915_REG_READ: + return "DRM_IOCTL_I915_REG_READ"; + case DRM_IOCTL_I915_GET_RESET_STATS: + return "DRM_IOCTL_I915_GET_RESET_STATS"; + case DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM: + return "DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM"; + case DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM: + return "DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM"; + case DRM_IOCTL_I915_PERF_OPEN: + return "DRM_IOCTL_I915_PERF_OPEN"; + case DRM_IOCTL_I915_PERF_ADD_CONFIG: + return "DRM_IOCTL_I915_PERF_ADD_CONFIG"; + case DRM_IOCTL_I915_PERF_REMOVE_CONFIG: + return "DRM_IOCTL_I915_PERF_REMOVE_CONFIG"; + case DRM_IOCTL_I915_QUERY: + return "DRM_IOCTL_I915_QUERY"; + default: + return ioctlToStringImpl(request); + } +} + bool Drm::createVirtualMemoryAddressSpace(uint32_t vmCount) { for (auto i = 0u; i < vmCount; i++) { uint32_t id = i; diff --git a/shared/source/os_interface/linux/drm_neo.h b/shared/source/os_interface/linux/drm_neo.h index 2f0d529190..162773a248 100644 --- a/shared/source/os_interface/linux/drm_neo.h +++ b/shared/source/os_interface/linux/drm_neo.h @@ -236,6 +236,8 @@ class Drm { std::unordered_map> ioctlStatistics; void printIoctlStatistics(); + std::string ioctlToString(unsigned long request); + std::string ioctlToStringImpl(unsigned long request); #pragma pack(1) struct PCIConfig { diff --git a/shared/source/os_interface/linux/drm_query.cpp b/shared/source/os_interface/linux/drm_query.cpp index 20c1b9aa7c..a17d7a4228 100644 --- a/shared/source/os_interface/linux/drm_query.cpp +++ b/shared/source/os_interface/linux/drm_query.cpp @@ -74,6 +74,10 @@ bool Drm::isVmBindAvailable() { void Drm::appendDrmContextFlags(drm_i915_gem_context_create_ext &gcc, bool isSpecialContextRequested) { } +std::string Drm::ioctlToStringImpl(unsigned long request) { + return std::to_string(request); +} + void Drm::setupCacheInfo(const HardwareInfo &hwInfo) { this->cacheInfo.reset(new CacheInfoImpl()); } diff --git a/shared/source/os_interface/linux/drm_query_dg1.cpp b/shared/source/os_interface/linux/drm_query_dg1.cpp index 22f1a90e00..c844caa410 100644 --- a/shared/source/os_interface/linux/drm_query_dg1.cpp +++ b/shared/source/os_interface/linux/drm_query_dg1.cpp @@ -83,6 +83,10 @@ bool Drm::isVmBindAvailable() { void Drm::appendDrmContextFlags(drm_i915_gem_context_create_ext &gcc, bool isSpecialContextRequested) { } +std::string Drm::ioctlToStringImpl(unsigned long request) { + return std::to_string(request); +} + void Drm::setupCacheInfo(const HardwareInfo &hwInfo) { this->cacheInfo.reset(new CacheInfoImpl()); }