feature: add support for state save area header v4

Related-To: NEO-8188
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2024-08-26 14:24:54 +00:00
committed by Compute-Runtime-Automation
parent 856616d311
commit da6a83faa2
6 changed files with 32 additions and 3 deletions

View File

@@ -296,7 +296,7 @@ TEST(L0DeviceTest, givenMidThreadPreemptionAndIncorrectStateSaveAreaHeaderWhenCr
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(1);
auto header = reinterpret_cast<SIP::StateSaveAreaHeader *>(MockSipData::mockSipKernel->mockStateSaveAreaHeader.data());
header->versionHeader.version.major = 4u;
header->versionHeader.version.major = 5u;
std::unique_ptr<DriverHandleImp> driverHandle(new DriverHandleImp);
auto hwInfo = *NEO::defaultHwInfo;

View File

@@ -98,7 +98,9 @@ size_t SipKernel::getStateSaveAreaSize(Device *device) const {
auto numSlices = NEO::GfxCoreHelper::getHighestEnabledSlice(hwInfo);
size_t stateSaveAreaSize = 0;
if (hdr->versionHeader.version.major == 3) {
if (hdr->versionHeader.version.major == 4) {
stateSaveAreaSize = static_cast<size_t>(hdr->totalWmtpDataSize);
} else if (hdr->versionHeader.version.major == 3) {
stateSaveAreaSize = numSlices *
hdr->regHeaderV3.num_subslices_per_slice *
hdr->regHeaderV3.num_eus_per_subslice *

View File

@@ -29,6 +29,7 @@ struct StateSaveAreaHeader {
union {
struct SIP::intelgt_state_save_area regHeader;
struct SIP::intelgt_state_save_area_V3 regHeaderV3;
uint64_t totalWmtpDataSize;
};
};

View File

@@ -24,6 +24,7 @@ bool called = false;
bool returned = true;
bool useMockSip = false;
bool uninitializedSipRequested = false;
uint64_t totalWmtpDataSize = 32 * MemoryConstants::megaByte;
void clearUseFlags() {
calledType = SipKernelType::count;
@@ -182,6 +183,20 @@ std::vector<char> createStateSaveAreaHeader(uint32_t version, uint16_t grfNum, u
stateSaveAreaHeader3.versionHeader = versionHeader;
stateSaveAreaHeader3.regHeaderV3 = regHeaderV3;
NEO::StateSaveAreaHeader stateSaveAreaHeader4 = {
{
// versionHeader
"tssarea", // magic
0, // reserved1
{ // version
4, // major
0, // minor
0}, // patch
8, // size
{0, 0, 0}, // reserved2
}};
stateSaveAreaHeader4.totalWmtpDataSize = totalWmtpDataSize;
char *begin = nullptr;
unsigned long sizeOfHeader = 0u;
if (version == 1) {
@@ -201,6 +216,9 @@ std::vector<char> createStateSaveAreaHeader(uint32_t version, uint16_t grfNum, u
stateSaveAreaHeader3.regHeaderV3.num_threads_per_eu *
stateSaveAreaHeader3.regHeaderV3.state_save_size);
sizeOfHeader = offsetof(NEO::StateSaveAreaHeader, regHeaderV3.msg) + sizeof(NEO::StateSaveAreaHeader::regHeaderV3.msg);
} else if (version == 4) {
begin = reinterpret_cast<char *>(&stateSaveAreaHeader4);
sizeOfHeader = offsetof(NEO::StateSaveAreaHeader, totalWmtpDataSize) + sizeof(stateSaveAreaHeader4.totalWmtpDataSize);
}
return std::vector<char>(begin, begin + sizeOfHeader);

View File

@@ -45,6 +45,7 @@ extern bool called;
extern bool returned;
extern bool useMockSip;
extern bool uninitializedSipRequested;
extern uint64_t totalWmtpDataSize;
void clearUseFlags();
std::vector<char> createStateSaveAreaHeader(uint32_t version);

View File

@@ -406,12 +406,19 @@ TEST_F(StateSaveAreaSipTest, givenCorrectStateSaveAreaHeaderWhenGetStateSaveArea
auto stateSaveSize = 0x1800u * numSlices * 8 * 7 + sizeof(NEO::StateSaveAreaHeader);
EXPECT_EQ(alignUp(fifoSize + stateSaveSize, MemoryConstants::pageSize), SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice));
}
TEST_F(StateSaveAreaSipTest, givenStateSaveAreaHeaderVersion4WhenGetStateSaveAreaSizeCalledThenTotalWmtpDataSizeIsReturned) {
VariableBackup<bool> backupSipInitType(&MockSipData::useMockSip, true);
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(4);
auto header = reinterpret_cast<SIP::StateSaveAreaHeader *>(MockSipData::mockSipKernel->mockStateSaveAreaHeader.data());
header->versionHeader.version.major = 4u;
EXPECT_EQ(MockSipData::totalWmtpDataSize, SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice));
}
TEST_F(StateSaveAreaSipTest, givenNotsupportedStateSaveAreaHeaderVersionWhenGetStateSaveAreaSizeCalledThenNoSizeIsReturned) {
VariableBackup<bool> backupSipInitType(&MockSipData::useMockSip, true);
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(1);
auto header = reinterpret_cast<SIP::StateSaveAreaHeader *>(MockSipData::mockSipKernel->mockStateSaveAreaHeader.data());
header->versionHeader.version.major = 4u;
header->versionHeader.version.major = 5u;
EXPECT_EQ(0u, SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice));
}