mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-19 06:24:51 +08:00
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:
committed by
Compute-Runtime-Automation
parent
856616d311
commit
da6a83faa2
@@ -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;
|
||||
|
||||
@@ -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 *
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user