mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 09:14:47 +08:00
feature: Calculate StateSaveAreaSize with siplib
Related-To: NEO-15642 Signed-off-by: Wesley Waugh <wesley.waugh@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
6d00cb7081
commit
e2c8175caf
@@ -11,6 +11,7 @@
|
||||
#include "shared/test/common/mocks/mock_device.h"
|
||||
#include "shared/test/common/mocks/mock_gmm_helper.h"
|
||||
#include "shared/test/common/mocks/mock_sip.h"
|
||||
#include "shared/test/common/mocks/mock_sip_external_lib.h"
|
||||
#include "shared/test/common/mocks/ult_device_factory.h"
|
||||
#include "shared/test/common/test_macros/hw_test.h"
|
||||
|
||||
@@ -2851,7 +2852,7 @@ TEST_F(DebugSessionRegistersAccessTestV3, givenTypeToRegsetDescCalledThenCorrect
|
||||
}
|
||||
|
||||
TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInterfaceWhenTypeToRegsetDescCalledThenReturnsRegsetDescFromMap) {
|
||||
class MockSipExternalLibForTest : public NEO::SipExternalLib {
|
||||
class MockSipExternalLibForTest : public MockSipExternalLib {
|
||||
public:
|
||||
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
||||
return 0;
|
||||
@@ -2983,7 +2984,7 @@ TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInter
|
||||
}
|
||||
|
||||
TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInterfaceWhenRegistersAccessHelperCalledThenReturnsSuccess) {
|
||||
class MockSipExternalLibForTest : public NEO::SipExternalLib {
|
||||
class MockSipExternalLibForTest : public MockSipExternalLib {
|
||||
public:
|
||||
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
||||
return 0;
|
||||
@@ -4639,7 +4640,7 @@ TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithoutSipExternalLibInterf
|
||||
}
|
||||
|
||||
TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInterfaceWhenIsHeaplessModeCalledThenReturnsTrue) {
|
||||
class MockSipExternalLibForTest : public NEO::SipExternalLib {
|
||||
class MockSipExternalLibForTest : public MockSipExternalLib {
|
||||
public:
|
||||
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
||||
return 0;
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "shared/test/common/libult/linux/drm_mock_helper.h"
|
||||
#include "shared/test/common/mocks/mock_device.h"
|
||||
#include "shared/test/common/mocks/mock_sip.h"
|
||||
#include "shared/test/common/mocks/mock_sip_external_lib.h"
|
||||
#include "shared/test/common/mocks/ult_device_factory.h"
|
||||
#include "shared/test/common/os_interface/linux/sys_calls_linux_ult.h"
|
||||
#include "shared/test/common/os_interface/linux/xe/eudebug/mock_eudebug_interface.h"
|
||||
@@ -290,7 +291,7 @@ TEST_F(DebugApiLinuxTestXe, WhenOpenDebuggerFailsThenCorrectErrorIsReturned) {
|
||||
|
||||
TEST_F(DebugApiLinuxTestXe, GivenSipExternalLibWithFailingCreateRegisterDescriptorMapWhenCreatingDebugSessionThenNullptrIsReturned) {
|
||||
// Mock SipExternalLib that fails to create register descriptor map
|
||||
class MockSipExternalLibFailingCreateMap : public NEO::SipExternalLib {
|
||||
class MockSipExternalLibFailingCreateMap : public MockSipExternalLib {
|
||||
public:
|
||||
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
||||
return 0; // Success for getSipKernelBinary
|
||||
|
||||
@@ -99,7 +99,10 @@ size_t SipKernel::getStateSaveAreaSize(Device *device) const {
|
||||
|
||||
auto numSlices = std::max(hwInfo.gtSystemInfo.MaxSlicesSupported, NEO::GfxCoreHelper::getHighestEnabledSlice(hwInfo));
|
||||
size_t stateSaveAreaSize = 0;
|
||||
if (hdr->versionHeader.version.major == 4) {
|
||||
const auto sipExternalLib = device->getSipExternalLibInterface();
|
||||
if (sipExternalLib != nullptr) {
|
||||
stateSaveAreaSize = sipExternalLib->getStateSaveAreaSize();
|
||||
} else if (hdr->versionHeader.version.major == 4) {
|
||||
if (debugManager.flags.ForceTotalWMTPDataSize.get() > -1) {
|
||||
stateSaveAreaSize = static_cast<size_t>(debugManager.flags.ForceTotalWMTPDataSize.get());
|
||||
} else {
|
||||
|
||||
@@ -26,6 +26,7 @@ class SipExternalLib : NonCopyableAndNonMovableClass {
|
||||
virtual int getSipKernelBinary(NEO::Device &device, SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) = 0;
|
||||
virtual bool createRegisterDescriptorMap() = 0;
|
||||
virtual SIP::regset_desc *getRegsetDescFromMap(uint32_t type) = 0;
|
||||
virtual size_t getStateSaveAreaSize() const = 0;
|
||||
};
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
37
shared/test/common/mocks/mock_sip_external_lib.h
Normal file
37
shared/test/common/mocks/mock_sip_external_lib.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (C) 2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "shared/source/sip_external_lib/sip_external_lib.h"
|
||||
|
||||
class MockSipExternalLib : public NEO::SipExternalLib {
|
||||
public:
|
||||
std::vector<char> getSipKernelBinaryRetBinary;
|
||||
std::vector<char> getSipKernelBinaryStateSaveAreaHeader;
|
||||
int getSipKernelBinaryRetValue = 0;
|
||||
int getSipKernelBinary(NEO::Device &device, SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
||||
retBinary = getSipKernelBinaryRetBinary;
|
||||
stateSaveAreaHeader = getSipKernelBinaryStateSaveAreaHeader;
|
||||
return getSipKernelBinaryRetValue;
|
||||
}
|
||||
|
||||
bool createRegisterDescriptorMapRetValue = true;
|
||||
bool createRegisterDescriptorMap() override {
|
||||
return createRegisterDescriptorMapRetValue;
|
||||
}
|
||||
|
||||
SIP::regset_desc *getRegsetDescFromMapRetValue = nullptr;
|
||||
SIP::regset_desc *getRegsetDescFromMap(uint32_t type) override {
|
||||
return getRegsetDescFromMapRetValue;
|
||||
}
|
||||
|
||||
size_t getStateSaveAreaSizeRetValue = 0;
|
||||
size_t getStateSaveAreaSize() const override {
|
||||
return getStateSaveAreaSizeRetValue;
|
||||
}
|
||||
};
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "shared/source/helpers/gfx_core_helper.h"
|
||||
#include "shared/source/memory_manager/memory_allocation.h"
|
||||
#include "shared/source/os_interface/os_context.h"
|
||||
#include "shared/source/sip_external_lib/sip_external_lib.h"
|
||||
#include "shared/test/common/fixtures/device_fixture.h"
|
||||
#include "shared/test/common/helpers/debug_manager_state_restore.h"
|
||||
#include "shared/test/common/helpers/engine_descriptor_helper.h"
|
||||
@@ -27,6 +28,7 @@
|
||||
#include "shared/test/common/mocks/mock_os_context.h"
|
||||
#include "shared/test/common/mocks/mock_release_helper.h"
|
||||
#include "shared/test/common/mocks/mock_sip.h"
|
||||
#include "shared/test/common/mocks/mock_sip_external_lib.h"
|
||||
#include "shared/test/common/test_macros/hw_test.h"
|
||||
#include "shared/test/common/test_macros/test.h"
|
||||
|
||||
@@ -992,3 +994,24 @@ TEST_F(DebugExternalLibSipTest, givenGetSipBinaryFromExternalLibRetunsTrueWhenGe
|
||||
debugManager.flags.GetSipBinaryFromExternalLib.set(1);
|
||||
EXPECT_EQ(nullptr, pDevice->getSipExternalLibInterface());
|
||||
}
|
||||
|
||||
TEST_F(DebugExternalLibSipTest, givenGetSipBinaryFromExternalLibRetunsTrueWhenGetStateSaveAreaSizeCalledThenSizeIsReturned) {
|
||||
DebugManagerStateRestore restorer;
|
||||
debugManager.flags.GetSipBinaryFromExternalLib.set(1);
|
||||
auto lib = new MockSipExternalLib();
|
||||
lib->getStateSaveAreaSizeRetValue = 17381;
|
||||
pDevice->getRootDeviceEnvironmentRef().sipExternalLib.reset(lib);
|
||||
EXPECT_EQ(alignUp(17381u, MemoryConstants::pageSize), SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice));
|
||||
}
|
||||
|
||||
TEST_F(DebugExternalLibSipTest, givenGetSipBinaryFromExternalLibRetunsTrueAndDebugSipKernelWhenGetStateSaveAreaSizeCalledThenSizeIsReturned) {
|
||||
DebugManagerStateRestore restorer;
|
||||
debugManager.flags.GetSipBinaryFromExternalLib.set(1);
|
||||
auto lib = new MockSipExternalLib();
|
||||
lib->getSipKernelBinaryRetBinary = std::vector<char>{0x1, 0x2, 0x3, 0x4};
|
||||
lib->getSipKernelBinaryStateSaveAreaHeader = std::vector<char>{0x5, 0x6, 0x7, 0x8};
|
||||
lib->getSipKernelBinaryRetValue = 0;
|
||||
lib->getStateSaveAreaSizeRetValue = 17381;
|
||||
pDevice->getRootDeviceEnvironmentRef().sipExternalLib.reset(lib);
|
||||
EXPECT_EQ(alignUp(17381u, MemoryConstants::pageSize), SipKernel::getDebugSipKernel(*pDevice).getStateSaveAreaSize(pDevice));
|
||||
}
|
||||
Reference in New Issue
Block a user