Skip to content

Commit 4d6a2d0

Browse files
Enhance logs in EuThread
- do not overwrite memoryHandle in resumeThread() when thread is not stopped - add SIP Commands Signed-off-by: Mateusz Hoppe <[email protected]>
1 parent d9f47d6 commit 4d6a2d0

File tree

5 files changed

+71
-7
lines changed

5 files changed

+71
-7
lines changed

level_zero/tools/source/debug/eu_thread.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,13 @@ class EuThread {
7171
return false;
7272
}
7373
state = State::Stopped;
74+
PRINT_DEBUGGER_THREAD_LOG("Stopped thread: %s", toString().c_str());
7475
return true;
7576
}
7677

7778
bool verifyStopped(uint8_t newCounter) {
7879

79-
PRINT_DEBUGGER_INFO_LOG("EuThread::verifyStopped() Thread: %s newCounter == %d oldCounter == %d", toString().c_str(), (int32_t)newCounter, (int32_t)systemRoutineCounter);
80+
PRINT_DEBUGGER_THREAD_LOG("EuThread::verifyStopped() Thread: %s newCounter == %d oldCounter == %d", toString().c_str(), (int32_t)newCounter, (int32_t)systemRoutineCounter);
8081

8182
if (newCounter == systemRoutineCounter) {
8283
if (newCounter % 2 != 0) {
@@ -115,11 +116,13 @@ class EuThread {
115116
}
116117

117118
bool resumeThread() {
118-
memoryHandle = invalidHandle;
119119
if (state != State::Stopped) {
120+
PRINT_DEBUGGER_THREAD_LOG("Resuming already RUNNING thread: %s", toString().c_str());
120121
return false;
121122
}
123+
PRINT_DEBUGGER_THREAD_LOG("Resumed thread: %s", toString().c_str());
122124
state = State::Running;
125+
memoryHandle = invalidHandle;
123126
return true;
124127
}
125128

@@ -153,7 +156,7 @@ class EuThread {
153156

154157
protected:
155158
ThreadId threadId;
156-
State state = State::Unavailable;
159+
std::atomic<State> state = State::Unavailable;
157160
uint8_t systemRoutineCounter = 0;
158161
std::atomic<uint64_t> memoryHandle = invalidHandle;
159162
};

shared/source/built_ins/sip.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ class SipKernel {
4747
static const size_t maxDbgSurfaceSize;
4848
static SipClassType classType;
4949

50+
enum class COMMAND : uint32_t {
51+
RESUME,
52+
READY,
53+
SLM_READ,
54+
SLM_WRITE
55+
};
56+
5057
protected:
5158
static bool initSipKernelImpl(SipKernelType type, Device &device);
5259
static const SipKernel &getSipKernelImpl(Device &device);

shared/test/common/helpers/sip_init.cpp

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ void clearUseFlags() {
2727
called = false;
2828
}
2929

30-
std::vector<char> createStateSaveAreaHeader() {
30+
std::vector<char> createStateSaveAreaHeader(uint32_t version) {
3131
SIP::StateSaveAreaHeader stateSaveAreaHeader = {
3232
{
3333
// versionHeader
@@ -71,7 +71,56 @@ std::vector<char> createStateSaveAreaHeader() {
7171
},
7272
};
7373

74-
char *begin = reinterpret_cast<char *>(&stateSaveAreaHeader);
74+
SIP::StateSaveAreaHeader stateSaveAreaHeader2 = {
75+
{
76+
// versionHeader
77+
"tssarea", // magic
78+
0, // reserved1
79+
{ // version
80+
2, // major
81+
0, // minor
82+
0}, // patch
83+
40, // size
84+
{0, 0, 0}, // reserved2
85+
},
86+
{
87+
// regHeader
88+
1, // num_slices
89+
1, // num_subslices_per_slice
90+
8, // num_eus_per_subslice
91+
7, // num_threads_per_eu
92+
0, // state_area_offset
93+
6144, // state_save_size
94+
0, // slm_area_offset
95+
0, // slm_bank_size
96+
0, // slm_bank_valid
97+
4740, // sr_magic_offset
98+
{0, 128, 256, 32}, // grf
99+
{4096, 1, 256, 32}, // addr
100+
{4128, 2, 32, 4}, // flag
101+
{4156, 1, 32, 4}, // emask
102+
{4160, 2, 128, 16}, // sr
103+
{4192, 1, 128, 16}, // cr
104+
{4256, 1, 96, 12}, // notification
105+
{4288, 1, 128, 16}, // tdr
106+
{4320, 10, 256, 32}, // acc
107+
{0, 0, 0, 0}, // mme
108+
{4672, 1, 32, 4}, // ce
109+
{4704, 1, 128, 16}, // sp
110+
{4768, 1, 128 * 8, 128}, // cmd
111+
{4640, 1, 128, 16}, // tm
112+
{0, 0, 0, 0}, // fc
113+
{4736, 1, 32, 4}, // dbg
114+
},
115+
};
116+
117+
char *begin = nullptr;
118+
119+
if (version == 1) {
120+
begin = reinterpret_cast<char *>(&stateSaveAreaHeader);
121+
} else if (version == 2) {
122+
begin = reinterpret_cast<char *>(&stateSaveAreaHeader2);
123+
}
75124
return std::vector<char>(begin, begin + sizeof(stateSaveAreaHeader));
76125
}
77126
} // namespace MockSipData

shared/test/common/mocks/mock_sip.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,6 @@ extern bool returned;
4646
extern bool useMockSip;
4747

4848
void clearUseFlags();
49-
std::vector<char> createStateSaveAreaHeader();
49+
std::vector<char> createStateSaveAreaHeader(uint32_t version);
5050
} // namespace MockSipData
5151
} // namespace NEO

shared/test/unit_test/built_ins/sip_tests.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
#include "test.h"
1717

18+
#include "common/StateSaveAreaHeader.h"
19+
1820
using namespace NEO;
1921

2022
struct RawBinarySipFixture : public DeviceFixture {
@@ -348,8 +350,11 @@ TEST_F(StateSaveAreaSipTest, givenCorruptedStateSaveAreaHeaderWhenGetStateSaveAr
348350

349351
TEST_F(StateSaveAreaSipTest, givenCorrectStateSaveAreaHeaderWhenGetStateSaveAreaSizeCalledThenCorrectDbgSurfaceSizeIsReturned) {
350352
MockSipData::useMockSip = true;
351-
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader();
353+
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(1);
352354
EXPECT_EQ(0x3F1000u, SipKernel::getSipKernel(*pDevice).getStateSaveAreaSize());
355+
356+
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(2);
357+
EXPECT_EQ(0x1800u * 1 * 8 * 7 + alignUp(sizeof(SIP::StateSaveAreaHeader), MemoryConstants::pageSize), SipKernel::getSipKernel(*pDevice).getStateSaveAreaSize());
353358
}
354359
TEST(DebugBindlessSip, givenActiveDebuggerAndUseBindlessDebugSipWhenGettingSipTypeThenDebugBindlessTypeIsReturned) {
355360
DebugManagerStateRestore restorer;

0 commit comments

Comments
 (0)