fix: print to stdout for disable scratch page

Modified to print out error messages to stdout when disable scratch page
is used.

Related-To: GSD-7611
Signed-off-by: Young Jin Yoon <young.jin.yoon@intel.com>
This commit is contained in:
Young Jin Yoon
2024-05-11 07:43:42 +00:00
committed by Compute-Runtime-Automation
parent 4b7e2d5064
commit e204d27190
7 changed files with 214 additions and 13 deletions

View File

@@ -1,5 +1,5 @@
#
# Copyright (C) 2018-2023 Intel Corporation
# Copyright (C) 2018-2024 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
@@ -32,6 +32,7 @@ target_sources(neo_shared_tests PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/hw_aot_config_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/gfx_core_helper_default_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/gfx_core_helper_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/gpu_page_fault_helper_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/local_id_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/l3_range_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/kernel_helpers_tests.cpp

View File

@@ -0,0 +1,34 @@
/*
* Copyright (C) 2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/helpers/gpu_page_fault_helper.h"
#include "shared/test/common/test_macros/test.h"
using namespace NEO;
TEST(GpuPageFaultHelperTest, givenValidAndInvalidFaultTypesWhenGettingStringRepresentationThenItIsCorrect) {
EXPECT_EQ(std::string{"NotPresent"}, GpuPageFaultHelpers::faultTypeToString(FaultType::notPresent));
EXPECT_EQ(std::string{"WriteAccessViolation"}, GpuPageFaultHelpers::faultTypeToString(FaultType::writeAccessViolation));
EXPECT_EQ(std::string{"AtomicAccessViolation"}, GpuPageFaultHelpers::faultTypeToString(FaultType::atomicAccessViolation));
EXPECT_EQ(std::string{"Unknown"}, GpuPageFaultHelpers::faultTypeToString(static_cast<FaultType>(0xcc)));
}
TEST(GpuPageFaultHelperTest, givenValidAndInvalidFaultAccessesWhenGettingStringRepresentationThenItIsCorrect) {
EXPECT_EQ(std::string{"Read"}, GpuPageFaultHelpers::faultAccessToString(FaultAccess::read));
EXPECT_EQ(std::string{"Write"}, GpuPageFaultHelpers::faultAccessToString(FaultAccess::write));
EXPECT_EQ(std::string{"Atomic"}, GpuPageFaultHelpers::faultAccessToString(FaultAccess::atomic));
EXPECT_EQ(std::string{"Unknown"}, GpuPageFaultHelpers::faultAccessToString(static_cast<FaultAccess>(0xcc)));
}
TEST(GpuPageFaultHelperTest, givenValidAndInvalidFaultLevelWhenGettingStringRepresentationThenItIsCorrect) {
EXPECT_EQ(std::string{"PTE"}, GpuPageFaultHelpers::faultLevelToString(FaultLevel::pte));
EXPECT_EQ(std::string{"PDE"}, GpuPageFaultHelpers::faultLevelToString(FaultLevel::pde));
EXPECT_EQ(std::string{"PDP"}, GpuPageFaultHelpers::faultLevelToString(FaultLevel::pdp));
EXPECT_EQ(std::string{"PML4"}, GpuPageFaultHelpers::faultLevelToString(FaultLevel::pml4));
EXPECT_EQ(std::string{"PML5"}, GpuPageFaultHelpers::faultLevelToString(FaultLevel::pml5));
EXPECT_EQ(std::string{"Unknown"}, GpuPageFaultHelpers::faultLevelToString(static_cast<FaultLevel>(0xcc)));
}

View File

@@ -7,6 +7,7 @@
#include "shared/source/command_stream/submission_status.h"
#include "shared/source/helpers/file_io.h"
#include "shared/source/helpers/gpu_page_fault_helper.h"
#include "shared/source/helpers/hw_info.h"
#include "shared/source/os_interface/device_factory.h"
#include "shared/source/os_interface/driver_info.h"
@@ -1414,14 +1415,31 @@ TEST(DrmTest, GivenBatchPendingGreaterThanZeroResetStatsWhenIsGpuHangIsCalledThe
class MockIoctlHelperResetStats : public MockIoctlHelper {
public:
using MockIoctlHelper::MockIoctlHelper;
int getResetStats(ResetStats &resetStats, uint32_t *status, ResetStatsFault *resetStatsFault) override {
int ret = MockIoctlHelper::getResetStats(resetStats, status, resetStatsFault);
if (status) {
*status = statusReturnValue;
}
if (resetStatsFault) {
*resetStatsFault = resetStatsFaultReturnValue;
}
return ret;
}
bool validPageFault(uint16_t flags) override {
return validPageFaultReturnValue;
return true;
}
uint32_t getStatusForResetStats(bool banned) override {
return getStatusForResetStatsReturnValue;
if (banned) {
return statusReturnValue;
} else {
return 0u;
}
}
bool validPageFaultReturnValue = 0;
uint32_t getStatusForResetStatsReturnValue = 0;
uint32_t statusReturnValue = 0;
ResetStatsFault resetStatsFaultReturnValue{};
};
TEST(DrmDeathTest, GivenResetStatsWithValidFaultWhenIsGpuHangIsCalledThenProcessTerminated) {
@@ -1439,15 +1457,50 @@ TEST(DrmDeathTest, GivenResetStatsWithValidFaultWhenIsGpuHangIsCalledThenProcess
MockOsContextLinux mockOsContextLinux{drm, 0, contextId, engineDescriptor};
mockOsContextLinux.drmContextIds.push_back(0);
ResetStats resetStats{};
resetStats.contextId = 0;
drm.resetStatsToReturn.push_back(resetStats);
ResetStats resetStatsExpected{};
ResetStatsFault resetStatsFaultExpected{};
resetStatsExpected.contextId = 0;
drm.resetStatsToReturn.push_back(resetStatsExpected);
resetStatsFaultExpected.flags = 1;
resetStatsFaultExpected.addr = 0x1234;
resetStatsFaultExpected.type = 2;
resetStatsFaultExpected.level = 3;
ioctlHelper->statusReturnValue = 2u;
ioctlHelper->resetStatsFaultReturnValue = resetStatsFaultExpected;
ioctlHelper->getStatusForResetStatsReturnValue = 1;
ioctlHelper->validPageFaultReturnValue = true;
drm.ioctlHelper = std::move(ioctlHelper);
int strSize = std::snprintf(nullptr, 0, "FATAL: Unexpected page fault from GPU at 0x%lx, ctx_id: %u (%s) type: %d (%s), level: %d (%s), access: %d (%s), banned: %d, aborting.\n",
resetStatsFaultExpected.addr,
resetStatsExpected.contextId,
EngineHelpers::engineTypeToString(aub_stream::ENGINE_BCS).c_str(),
resetStatsFaultExpected.type, GpuPageFaultHelpers::faultTypeToString(static_cast<FaultType>(resetStatsFaultExpected.type)).c_str(),
resetStatsFaultExpected.level, GpuPageFaultHelpers::faultLevelToString(static_cast<FaultLevel>(resetStatsFaultExpected.level)).c_str(),
resetStatsFaultExpected.access, GpuPageFaultHelpers::faultAccessToString(static_cast<FaultAccess>(resetStatsFaultExpected.access)).c_str(),
true) +
1;
std::unique_ptr<char[]> buf(new char[strSize]);
std::snprintf(buf.get(), strSize, "FATAL: Unexpected page fault from GPU at 0x%lx, ctx_id: %u (%s) type: %d (%s), level: %d (%s), access: %d (%s), banned: %d, aborting.\n",
resetStatsFaultExpected.addr,
resetStatsExpected.contextId,
EngineHelpers::engineTypeToString(aub_stream::ENGINE_BCS).c_str(),
resetStatsFaultExpected.type, GpuPageFaultHelpers::faultTypeToString(static_cast<FaultType>(resetStatsFaultExpected.type)).c_str(),
resetStatsFaultExpected.level, GpuPageFaultHelpers::faultLevelToString(static_cast<FaultLevel>(resetStatsFaultExpected.level)).c_str(),
resetStatsFaultExpected.access, GpuPageFaultHelpers::faultAccessToString(static_cast<FaultAccess>(resetStatsFaultExpected.access)).c_str(),
true);
std::string expectedString = std::string(buf.get());
::testing::internal::CaptureStderr();
::testing::internal::CaptureStdout();
EXPECT_THROW(drm.isGpuHangDetected(mockOsContextLinux), std::runtime_error);
auto stderrString = ::testing::internal::GetCapturedStderr();
auto stdoutString = ::testing::internal::GetCapturedStdout();
EXPECT_EQ(expectedString, stderrString);
EXPECT_EQ(expectedString, stdoutString);
}
struct DrmMockCheckPageFault : public DrmMock {