mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 08:53:55 +08:00
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:
committed by
Compute-Runtime-Automation
parent
4b7e2d5064
commit
e204d27190
@@ -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
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user