diff --git a/level_zero/tools/source/debug/eu_thread.h b/level_zero/tools/source/debug/eu_thread.h index bb7385a50b..78396f8bf1 100644 --- a/level_zero/tools/source/debug/eu_thread.h +++ b/level_zero/tools/source/debug/eu_thread.h @@ -71,12 +71,13 @@ class EuThread { return false; } state = State::Stopped; + PRINT_DEBUGGER_THREAD_LOG("Stopped thread: %s", toString().c_str()); return true; } bool verifyStopped(uint8_t newCounter) { - PRINT_DEBUGGER_INFO_LOG("EuThread::verifyStopped() Thread: %s newCounter == %d oldCounter == %d", toString().c_str(), (int32_t)newCounter, (int32_t)systemRoutineCounter); + PRINT_DEBUGGER_THREAD_LOG("EuThread::verifyStopped() Thread: %s newCounter == %d oldCounter == %d", toString().c_str(), (int32_t)newCounter, (int32_t)systemRoutineCounter); if (newCounter == systemRoutineCounter) { if (newCounter % 2 != 0) { @@ -115,11 +116,13 @@ class EuThread { } bool resumeThread() { - memoryHandle = invalidHandle; if (state != State::Stopped) { + PRINT_DEBUGGER_THREAD_LOG("Resuming already RUNNING thread: %s", toString().c_str()); return false; } + PRINT_DEBUGGER_THREAD_LOG("Resumed thread: %s", toString().c_str()); state = State::Running; + memoryHandle = invalidHandle; return true; } @@ -153,7 +156,7 @@ class EuThread { protected: ThreadId threadId; - State state = State::Unavailable; + std::atomic state = State::Unavailable; uint8_t systemRoutineCounter = 0; std::atomic memoryHandle = invalidHandle; }; diff --git a/shared/source/built_ins/sip.h b/shared/source/built_ins/sip.h index 5c5d21e5ba..82ee958f66 100644 --- a/shared/source/built_ins/sip.h +++ b/shared/source/built_ins/sip.h @@ -47,6 +47,13 @@ class SipKernel { static const size_t maxDbgSurfaceSize; static SipClassType classType; + enum class COMMAND : uint32_t { + RESUME, + READY, + SLM_READ, + SLM_WRITE + }; + protected: static bool initSipKernelImpl(SipKernelType type, Device &device); static const SipKernel &getSipKernelImpl(Device &device); diff --git a/shared/test/common/helpers/sip_init.cpp b/shared/test/common/helpers/sip_init.cpp index 7d987eeb0b..ac330d5a65 100644 --- a/shared/test/common/helpers/sip_init.cpp +++ b/shared/test/common/helpers/sip_init.cpp @@ -27,7 +27,7 @@ void clearUseFlags() { called = false; } -std::vector createStateSaveAreaHeader() { +std::vector createStateSaveAreaHeader(uint32_t version) { SIP::StateSaveAreaHeader stateSaveAreaHeader = { { // versionHeader @@ -71,7 +71,56 @@ std::vector createStateSaveAreaHeader() { }, }; - char *begin = reinterpret_cast(&stateSaveAreaHeader); + SIP::StateSaveAreaHeader stateSaveAreaHeader2 = { + { + // versionHeader + "tssarea", // magic + 0, // reserved1 + { // version + 2, // major + 0, // minor + 0}, // patch + 40, // size + {0, 0, 0}, // reserved2 + }, + { + // regHeader + 1, // num_slices + 1, // num_subslices_per_slice + 8, // num_eus_per_subslice + 7, // num_threads_per_eu + 0, // state_area_offset + 6144, // state_save_size + 0, // slm_area_offset + 0, // slm_bank_size + 0, // slm_bank_valid + 4740, // sr_magic_offset + {0, 128, 256, 32}, // grf + {4096, 1, 256, 32}, // addr + {4128, 2, 32, 4}, // flag + {4156, 1, 32, 4}, // emask + {4160, 2, 128, 16}, // sr + {4192, 1, 128, 16}, // cr + {4256, 1, 96, 12}, // notification + {4288, 1, 128, 16}, // tdr + {4320, 10, 256, 32}, // acc + {0, 0, 0, 0}, // mme + {4672, 1, 32, 4}, // ce + {4704, 1, 128, 16}, // sp + {4768, 1, 128 * 8, 128}, // cmd + {4640, 1, 128, 16}, // tm + {0, 0, 0, 0}, // fc + {4736, 1, 32, 4}, // dbg + }, + }; + + char *begin = nullptr; + + if (version == 1) { + begin = reinterpret_cast(&stateSaveAreaHeader); + } else if (version == 2) { + begin = reinterpret_cast(&stateSaveAreaHeader2); + } return std::vector(begin, begin + sizeof(stateSaveAreaHeader)); } } // namespace MockSipData diff --git a/shared/test/common/mocks/mock_sip.h b/shared/test/common/mocks/mock_sip.h index be5cdef017..bead1c08e9 100644 --- a/shared/test/common/mocks/mock_sip.h +++ b/shared/test/common/mocks/mock_sip.h @@ -46,6 +46,6 @@ extern bool returned; extern bool useMockSip; void clearUseFlags(); -std::vector createStateSaveAreaHeader(); +std::vector createStateSaveAreaHeader(uint32_t version); } // namespace MockSipData } // namespace NEO diff --git a/shared/test/unit_test/built_ins/sip_tests.cpp b/shared/test/unit_test/built_ins/sip_tests.cpp index 8f1a3a9728..a332248c31 100644 --- a/shared/test/unit_test/built_ins/sip_tests.cpp +++ b/shared/test/unit_test/built_ins/sip_tests.cpp @@ -15,6 +15,8 @@ #include "test.h" +#include "common/StateSaveAreaHeader.h" + using namespace NEO; struct RawBinarySipFixture : public DeviceFixture { @@ -348,8 +350,11 @@ TEST_F(StateSaveAreaSipTest, givenCorruptedStateSaveAreaHeaderWhenGetStateSaveAr TEST_F(StateSaveAreaSipTest, givenCorrectStateSaveAreaHeaderWhenGetStateSaveAreaSizeCalledThenCorrectDbgSurfaceSizeIsReturned) { MockSipData::useMockSip = true; - MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(); + MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(1); EXPECT_EQ(0x3F1000u, SipKernel::getSipKernel(*pDevice).getStateSaveAreaSize()); + + MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(2); + EXPECT_EQ(0x1800u * 1 * 8 * 7 + alignUp(sizeof(SIP::StateSaveAreaHeader), MemoryConstants::pageSize), SipKernel::getSipKernel(*pDevice).getStateSaveAreaSize()); } TEST(DebugBindlessSip, givenActiveDebuggerAndUseBindlessDebugSipWhenGettingSipTypeThenDebugBindlessTypeIsReturned) { DebugManagerStateRestore restorer;