Enhance logs in EuThread

- do not overwrite memoryHandle in resumeThread() when thread is
not stopped
- add SIP Commands

Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
Mateusz Hoppe 2021-10-29 15:06:11 +00:00 committed by Compute-Runtime-Automation
parent d9f47d6d7d
commit 4d6a2d0a57
5 changed files with 71 additions and 7 deletions

View File

@ -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 = State::Unavailable;
uint8_t systemRoutineCounter = 0;
std::atomic<uint64_t> memoryHandle = invalidHandle;
};

View File

@ -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);

View File

@ -27,7 +27,7 @@ void clearUseFlags() {
called = false;
}
std::vector<char> createStateSaveAreaHeader() {
std::vector<char> createStateSaveAreaHeader(uint32_t version) {
SIP::StateSaveAreaHeader stateSaveAreaHeader = {
{
// versionHeader
@ -71,7 +71,56 @@ std::vector<char> createStateSaveAreaHeader() {
},
};
char *begin = reinterpret_cast<char *>(&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<char *>(&stateSaveAreaHeader);
} else if (version == 2) {
begin = reinterpret_cast<char *>(&stateSaveAreaHeader2);
}
return std::vector<char>(begin, begin + sizeof(stateSaveAreaHeader));
}
} // namespace MockSipData

View File

@ -46,6 +46,6 @@ extern bool returned;
extern bool useMockSip;
void clearUseFlags();
std::vector<char> createStateSaveAreaHeader();
std::vector<char> createStateSaveAreaHeader(uint32_t version);
} // namespace MockSipData
} // namespace NEO

View File

@ -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;