From 184112e2287a17fa90b8250d521b178a874e4c99 Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Fri, 31 Jan 2020 16:10:03 +0100 Subject: [PATCH] Debug flag to print get param ioctls. Change-Id: I39be4dea6d49f99a18fab8e50980f8a8b501f16f Signed-off-by: Dunajski, Bartosz --- core/os_interface/linux/drm_neo.cpp | 36 ++++++++++++++++++- .../linux/hw_info_config_linux_tests.cpp | 30 ++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/core/os_interface/linux/drm_neo.cpp b/core/os_interface/linux/drm_neo.cpp index 74f67edc8f..0d3606f4c5 100644 --- a/core/os_interface/linux/drm_neo.cpp +++ b/core/os_interface/linux/drm_neo.cpp @@ -24,6 +24,34 @@ const char *Drm::sysFsDefaultGpuPath = "/drm/card0"; const char *Drm::maxGpuFrequencyFile = "/gt_max_freq_mhz"; const char *Drm::configFileName = "/config"; +namespace IoctlHelper { +constexpr const char *getIoctlParamString(int param) { + switch (param) { + case I915_PARAM_CHIPSET_ID: + return "I915_PARAM_CHIPSET_ID"; + case I915_PARAM_REVISION: + return "I915_PARAM_REVISION"; + case I915_PARAM_HAS_EXEC_SOFTPIN: + return "I915_PARAM_HAS_EXEC_SOFTPIN"; + case I915_PARAM_HAS_POOLED_EU: + return "I915_PARAM_HAS_POOLED_EU"; + case I915_PARAM_HAS_SCHEDULER: + return "I915_PARAM_HAS_SCHEDULER"; + case I915_PARAM_EU_TOTAL: + return "I915_PARAM_EU_TOTAL"; + case I915_PARAM_SUBSLICE_TOTAL: + return "I915_PARAM_SUBSLICE_TOTAL"; + case I915_PARAM_MIN_EU_IN_POOL: + return "I915_PARAM_MIN_EU_IN_POOL"; + default: + break; + } + + return "UNKNOWN"; +} + +} // namespace IoctlHelper + int Drm::ioctl(unsigned long request, void *arg) { int ret; SYSTEM_ENTER(); @@ -39,7 +67,13 @@ int Drm::getParamIoctl(int param, int *dstValue) { getParam.param = param; getParam.value = dstValue; - return ioctl(DRM_IOCTL_I915_GETPARAM, &getParam); + int retVal = ioctl(DRM_IOCTL_I915_GETPARAM, &getParam); + + printDebugString(DebugManager.flags.PrintDebugMessages.get(), stdout, + "\nDRM_IOCTL_I915_GETPARAM: param: %s, output value: %d, retCode: %d\n", + IoctlHelper::getIoctlParamString(param), *getParam.value, retVal); + + return retVal; } int Drm::getDeviceID(int &devId) { diff --git a/unit_tests/os_interface/linux/hw_info_config_linux_tests.cpp b/unit_tests/os_interface/linux/hw_info_config_linux_tests.cpp index c3eb5bef2c..620286fb36 100644 --- a/unit_tests/os_interface/linux/hw_info_config_linux_tests.cpp +++ b/unit_tests/os_interface/linux/hw_info_config_linux_tests.cpp @@ -10,6 +10,7 @@ #include "core/helpers/hw_helper.h" #include "core/helpers/options.h" #include "core/os_interface/linux/os_interface.h" +#include "core/unit_tests/helpers/debug_manager_state_restore.h" #include @@ -305,6 +306,35 @@ TEST_F(HwInfoConfigTestLinuxDummy, dummyConfigPreemptionDrmEnabledThreadGroupOn) EXPECT_TRUE(drm->isPreemptionSupported()); } +TEST_F(HwInfoConfigTestLinuxDummy, givenDebugFlagSetWhenConfiguringHwInfoThenPrintGetParamIoctlsOutput) { + DebugManagerStateRestore restore; + DebugManager.flags.PrintDebugMessages.set(true); + + testing::internal::CaptureStdout(); // start capturing + int ret = hwConfig.configureHwInfo(&pInHwInfo, &outHwInfo, osInterface); + EXPECT_EQ(0, ret); + + std::string euCount = std::to_string(outHwInfo.gtSystemInfo.EUCount); + std::string subSliceCount = std::to_string(outHwInfo.gtSystemInfo.SubSliceCount); + + std::array expectedStrings = {{"DRM_IOCTL_I915_GETPARAM: param: I915_PARAM_CHIPSET_ID, output value: 1, retCode: 0", + "DRM_IOCTL_I915_GETPARAM: param: I915_PARAM_REVISION, output value: 0, retCode: 0", + "DRM_IOCTL_I915_GETPARAM: param: I915_PARAM_EU_TOTAL, output value: " + euCount + ", retCode: 0", + "DRM_IOCTL_I915_GETPARAM: param: I915_PARAM_SUBSLICE_TOTAL, output value: " + subSliceCount + ", retCode: 0", + "DRM_IOCTL_I915_GETPARAM: param: I915_PARAM_CHIPSET_ID, output value: 1, retCode: 0", + "DRM_IOCTL_I915_GETPARAM: param: I915_PARAM_HAS_SCHEDULER, output value: 7, retCode: 0" + + }}; + + std::string output = testing::internal::GetCapturedStdout(); // stop capturing + + for (const auto &expectedString : expectedStrings) { + EXPECT_NE(std::string::npos, output.find(expectedString)); + } + + EXPECT_EQ(std::string::npos, output.find("UNKNOWN")); +} + TEST_F(HwInfoConfigTestLinuxDummy, dummyConfigPreemptionDrmEnabledMidBatchOn) { pInHwInfo.capabilityTable.defaultPreemptionMode = PreemptionMode::MidThread; drm->StoredPreemptionSupport =