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_device.h"
|
||||||
#include "shared/test/common/mocks/mock_gmm_helper.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.h"
|
||||||
|
#include "shared/test/common/mocks/mock_sip_external_lib.h"
|
||||||
#include "shared/test/common/mocks/ult_device_factory.h"
|
#include "shared/test/common/mocks/ult_device_factory.h"
|
||||||
#include "shared/test/common/test_macros/hw_test.h"
|
#include "shared/test/common/test_macros/hw_test.h"
|
||||||
|
|
||||||
@@ -2851,7 +2852,7 @@ TEST_F(DebugSessionRegistersAccessTestV3, givenTypeToRegsetDescCalledThenCorrect
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInterfaceWhenTypeToRegsetDescCalledThenReturnsRegsetDescFromMap) {
|
TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInterfaceWhenTypeToRegsetDescCalledThenReturnsRegsetDescFromMap) {
|
||||||
class MockSipExternalLibForTest : public NEO::SipExternalLib {
|
class MockSipExternalLibForTest : public MockSipExternalLib {
|
||||||
public:
|
public:
|
||||||
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2983,7 +2984,7 @@ TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInter
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInterfaceWhenRegistersAccessHelperCalledThenReturnsSuccess) {
|
TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInterfaceWhenRegistersAccessHelperCalledThenReturnsSuccess) {
|
||||||
class MockSipExternalLibForTest : public NEO::SipExternalLib {
|
class MockSipExternalLibForTest : public MockSipExternalLib {
|
||||||
public:
|
public:
|
||||||
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -4639,7 +4640,7 @@ TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithoutSipExternalLibInterf
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInterfaceWhenIsHeaplessModeCalledThenReturnsTrue) {
|
TEST_F(DebugSessionRegistersAccessTestV3, givenDeviceWithMockSipExternalLibInterfaceWhenIsHeaplessModeCalledThenReturnsTrue) {
|
||||||
class MockSipExternalLibForTest : public NEO::SipExternalLib {
|
class MockSipExternalLibForTest : public MockSipExternalLib {
|
||||||
public:
|
public:
|
||||||
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include "shared/test/common/libult/linux/drm_mock_helper.h"
|
#include "shared/test/common/libult/linux/drm_mock_helper.h"
|
||||||
#include "shared/test/common/mocks/mock_device.h"
|
#include "shared/test/common/mocks/mock_device.h"
|
||||||
#include "shared/test/common/mocks/mock_sip.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/mocks/ult_device_factory.h"
|
||||||
#include "shared/test/common/os_interface/linux/sys_calls_linux_ult.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"
|
#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) {
|
TEST_F(DebugApiLinuxTestXe, GivenSipExternalLibWithFailingCreateRegisterDescriptorMapWhenCreatingDebugSessionThenNullptrIsReturned) {
|
||||||
// Mock SipExternalLib that fails to create register descriptor map
|
// Mock SipExternalLib that fails to create register descriptor map
|
||||||
class MockSipExternalLibFailingCreateMap : public NEO::SipExternalLib {
|
class MockSipExternalLibFailingCreateMap : public MockSipExternalLib {
|
||||||
public:
|
public:
|
||||||
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
int getSipKernelBinary(NEO::Device &device, NEO::SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) override {
|
||||||
return 0; // Success for getSipKernelBinary
|
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));
|
auto numSlices = std::max(hwInfo.gtSystemInfo.MaxSlicesSupported, NEO::GfxCoreHelper::getHighestEnabledSlice(hwInfo));
|
||||||
size_t stateSaveAreaSize = 0;
|
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) {
|
if (debugManager.flags.ForceTotalWMTPDataSize.get() > -1) {
|
||||||
stateSaveAreaSize = static_cast<size_t>(debugManager.flags.ForceTotalWMTPDataSize.get());
|
stateSaveAreaSize = static_cast<size_t>(debugManager.flags.ForceTotalWMTPDataSize.get());
|
||||||
} else {
|
} 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 int getSipKernelBinary(NEO::Device &device, SipKernelType type, std::vector<char> &retBinary, std::vector<char> &stateSaveAreaHeader) = 0;
|
||||||
virtual bool createRegisterDescriptorMap() = 0;
|
virtual bool createRegisterDescriptorMap() = 0;
|
||||||
virtual SIP::regset_desc *getRegsetDescFromMap(uint32_t type) = 0;
|
virtual SIP::regset_desc *getRegsetDescFromMap(uint32_t type) = 0;
|
||||||
|
virtual size_t getStateSaveAreaSize() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace NEO
|
} // 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/helpers/gfx_core_helper.h"
|
||||||
#include "shared/source/memory_manager/memory_allocation.h"
|
#include "shared/source/memory_manager/memory_allocation.h"
|
||||||
#include "shared/source/os_interface/os_context.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/fixtures/device_fixture.h"
|
||||||
#include "shared/test/common/helpers/debug_manager_state_restore.h"
|
#include "shared/test/common/helpers/debug_manager_state_restore.h"
|
||||||
#include "shared/test/common/helpers/engine_descriptor_helper.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_os_context.h"
|
||||||
#include "shared/test/common/mocks/mock_release_helper.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.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/hw_test.h"
|
||||||
#include "shared/test/common/test_macros/test.h"
|
#include "shared/test/common/test_macros/test.h"
|
||||||
|
|
||||||
@@ -992,3 +994,24 @@ TEST_F(DebugExternalLibSipTest, givenGetSipBinaryFromExternalLibRetunsTrueWhenGe
|
|||||||
debugManager.flags.GetSipBinaryFromExternalLib.set(1);
|
debugManager.flags.GetSipBinaryFromExternalLib.set(1);
|
||||||
EXPECT_EQ(nullptr, pDevice->getSipExternalLibInterface());
|
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