mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 08:53:55 +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);
|
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(1);
|
||||||
auto header = reinterpret_cast<SIP::StateSaveAreaHeader *>(MockSipData::mockSipKernel->mockStateSaveAreaHeader.data());
|
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);
|
std::unique_ptr<DriverHandleImp> driverHandle(new DriverHandleImp);
|
||||||
auto hwInfo = *NEO::defaultHwInfo;
|
auto hwInfo = *NEO::defaultHwInfo;
|
||||||
|
|||||||
@@ -98,7 +98,9 @@ size_t SipKernel::getStateSaveAreaSize(Device *device) const {
|
|||||||
|
|
||||||
auto numSlices = NEO::GfxCoreHelper::getHighestEnabledSlice(hwInfo);
|
auto numSlices = NEO::GfxCoreHelper::getHighestEnabledSlice(hwInfo);
|
||||||
size_t stateSaveAreaSize = 0;
|
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 *
|
stateSaveAreaSize = numSlices *
|
||||||
hdr->regHeaderV3.num_subslices_per_slice *
|
hdr->regHeaderV3.num_subslices_per_slice *
|
||||||
hdr->regHeaderV3.num_eus_per_subslice *
|
hdr->regHeaderV3.num_eus_per_subslice *
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ struct StateSaveAreaHeader {
|
|||||||
union {
|
union {
|
||||||
struct SIP::intelgt_state_save_area regHeader;
|
struct SIP::intelgt_state_save_area regHeader;
|
||||||
struct SIP::intelgt_state_save_area_V3 regHeaderV3;
|
struct SIP::intelgt_state_save_area_V3 regHeaderV3;
|
||||||
|
uint64_t totalWmtpDataSize;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ bool called = false;
|
|||||||
bool returned = true;
|
bool returned = true;
|
||||||
bool useMockSip = false;
|
bool useMockSip = false;
|
||||||
bool uninitializedSipRequested = false;
|
bool uninitializedSipRequested = false;
|
||||||
|
uint64_t totalWmtpDataSize = 32 * MemoryConstants::megaByte;
|
||||||
|
|
||||||
void clearUseFlags() {
|
void clearUseFlags() {
|
||||||
calledType = SipKernelType::count;
|
calledType = SipKernelType::count;
|
||||||
@@ -182,6 +183,20 @@ std::vector<char> createStateSaveAreaHeader(uint32_t version, uint16_t grfNum, u
|
|||||||
stateSaveAreaHeader3.versionHeader = versionHeader;
|
stateSaveAreaHeader3.versionHeader = versionHeader;
|
||||||
stateSaveAreaHeader3.regHeaderV3 = regHeaderV3;
|
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;
|
char *begin = nullptr;
|
||||||
unsigned long sizeOfHeader = 0u;
|
unsigned long sizeOfHeader = 0u;
|
||||||
if (version == 1) {
|
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.num_threads_per_eu *
|
||||||
stateSaveAreaHeader3.regHeaderV3.state_save_size);
|
stateSaveAreaHeader3.regHeaderV3.state_save_size);
|
||||||
sizeOfHeader = offsetof(NEO::StateSaveAreaHeader, regHeaderV3.msg) + sizeof(NEO::StateSaveAreaHeader::regHeaderV3.msg);
|
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);
|
return std::vector<char>(begin, begin + sizeOfHeader);
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ extern bool called;
|
|||||||
extern bool returned;
|
extern bool returned;
|
||||||
extern bool useMockSip;
|
extern bool useMockSip;
|
||||||
extern bool uninitializedSipRequested;
|
extern bool uninitializedSipRequested;
|
||||||
|
extern uint64_t totalWmtpDataSize;
|
||||||
|
|
||||||
void clearUseFlags();
|
void clearUseFlags();
|
||||||
std::vector<char> createStateSaveAreaHeader(uint32_t version);
|
std::vector<char> createStateSaveAreaHeader(uint32_t version);
|
||||||
|
|||||||
@@ -406,12 +406,19 @@ TEST_F(StateSaveAreaSipTest, givenCorrectStateSaveAreaHeaderWhenGetStateSaveArea
|
|||||||
auto stateSaveSize = 0x1800u * numSlices * 8 * 7 + sizeof(NEO::StateSaveAreaHeader);
|
auto stateSaveSize = 0x1800u * numSlices * 8 * 7 + sizeof(NEO::StateSaveAreaHeader);
|
||||||
EXPECT_EQ(alignUp(fifoSize + stateSaveSize, MemoryConstants::pageSize), SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice));
|
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) {
|
TEST_F(StateSaveAreaSipTest, givenNotsupportedStateSaveAreaHeaderVersionWhenGetStateSaveAreaSizeCalledThenNoSizeIsReturned) {
|
||||||
VariableBackup<bool> backupSipInitType(&MockSipData::useMockSip, true);
|
VariableBackup<bool> backupSipInitType(&MockSipData::useMockSip, true);
|
||||||
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(1);
|
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(1);
|
||||||
auto header = reinterpret_cast<SIP::StateSaveAreaHeader *>(MockSipData::mockSipKernel->mockStateSaveAreaHeader.data());
|
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));
|
EXPECT_EQ(0u, SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user