From d1e8f859d4f2c53b900abf4eec7f72bd352f9813 Mon Sep 17 00:00:00 2001 From: "Vilvaraj, T J Vivek" Date: Mon, 10 May 2021 11:19:05 +0000 Subject: [PATCH] sysman: add multi-Device Support for diagnostics Signed-off-by: Vilvaraj, T J Vivek --- .../source/sysman/diagnostics/diagnostics.cpp | 15 +-- .../source/sysman/diagnostics/diagnostics.h | 5 +- .../sysman/diagnostics/diagnostics_imp.cpp | 6 +- .../sysman/diagnostics/diagnostics_imp.h | 5 +- .../diagnostics/linux/os_diagnostics_imp.cpp | 6 +- .../diagnostics/linux/os_diagnostics_imp.h | 5 +- .../sysman/diagnostics/os_diagnostics.h | 2 +- .../windows/os_diagnostics_imp.cpp | 2 +- .../linux/firmware_util/firmware_util.h | 2 +- .../linux/firmware_util/firmware_util_imp.h | 2 +- .../firmware_util_imp_helper.cpp | 2 +- level_zero/tools/source/sysman/sysman_imp.cpp | 2 +- .../linux/mock_zes_sysman_diagnostics.h | 7 +- .../linux/test_zes_sysman_diagnostics.cpp | 96 +++++++++++-------- .../firmware/linux/mock_zes_sysman_firmware.h | 2 +- .../linux/mock_global_operations.h | 2 +- 16 files changed, 97 insertions(+), 64 deletions(-) diff --git a/level_zero/tools/source/sysman/diagnostics/diagnostics.cpp b/level_zero/tools/source/sysman/diagnostics/diagnostics.cpp index dc9224104c..71dcf94cff 100644 --- a/level_zero/tools/source/sysman/diagnostics/diagnostics.cpp +++ b/level_zero/tools/source/sysman/diagnostics/diagnostics.cpp @@ -18,16 +18,17 @@ DiagnosticsHandleContext::~DiagnosticsHandleContext() { handleList.clear(); } -void DiagnosticsHandleContext::createHandle(const std::string &diagTests) { - Diagnostics *pDiagnostics = new DiagnosticsImp(pOsSysman, diagTests); +void DiagnosticsHandleContext::createHandle(ze_device_handle_t deviceHandle, const std::string &diagTests) { + Diagnostics *pDiagnostics = new DiagnosticsImp(pOsSysman, diagTests, deviceHandle); handleList.push_back(pDiagnostics); } -void DiagnosticsHandleContext::init() { - - OsDiagnostics::getSupportedDiagTests(supportedDiagTests, pOsSysman); - for (const std::string &diagTests : supportedDiagTests) { - createHandle(diagTests); +void DiagnosticsHandleContext::init(std::vector &deviceHandles) { + for (const auto &deviceHandle : deviceHandles) { + OsDiagnostics::getSupportedDiagTests(supportedDiagTests, pOsSysman); + for (const std::string &diagTests : supportedDiagTests) { + createHandle(deviceHandle, diagTests); + } } } diff --git a/level_zero/tools/source/sysman/diagnostics/diagnostics.h b/level_zero/tools/source/sysman/diagnostics/diagnostics.h index 75fe7c91ae..0c84b5aa30 100644 --- a/level_zero/tools/source/sysman/diagnostics/diagnostics.h +++ b/level_zero/tools/source/sysman/diagnostics/diagnostics.h @@ -6,6 +6,7 @@ */ #pragma once +#include "level_zero/core/source/device/device.h" #include #include @@ -36,7 +37,7 @@ struct DiagnosticsHandleContext { DiagnosticsHandleContext(OsSysman *pOsSysman) : pOsSysman(pOsSysman){}; ~DiagnosticsHandleContext(); - void init(); + void init(std::vector &deviceHandles); ze_result_t diagnosticsGet(uint32_t *pCount, zes_diag_handle_t *phDiagnostics); std::vector supportedDiagTests = {}; @@ -44,7 +45,7 @@ struct DiagnosticsHandleContext { std::vector handleList = {}; private: - void createHandle(const std::string &DiagTests); + void createHandle(ze_device_handle_t deviceHandle, const std::string &DiagTests); }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/diagnostics/diagnostics_imp.cpp b/level_zero/tools/source/sysman/diagnostics/diagnostics_imp.cpp index d7257e4cbd..ddf87a7c76 100644 --- a/level_zero/tools/source/sysman/diagnostics/diagnostics_imp.cpp +++ b/level_zero/tools/source/sysman/diagnostics/diagnostics_imp.cpp @@ -28,8 +28,10 @@ ze_result_t DiagnosticsImp::diagnosticsRunTests(uint32_t start, uint32_t end, ze return pOsDiagnostics->osRunDiagTests(start, end, pResult); } -DiagnosticsImp::DiagnosticsImp(OsSysman *pOsSysman, const std::string &initalizedDiagTest) { - pOsDiagnostics = OsDiagnostics::create(pOsSysman, initalizedDiagTest); +DiagnosticsImp::DiagnosticsImp(OsSysman *pOsSysman, const std::string &initalizedDiagTest, ze_device_handle_t handle) : deviceHandle(handle) { + ze_device_properties_t deviceProperties = {}; + Device::fromHandle(deviceHandle)->getProperties(&deviceProperties); + pOsDiagnostics = OsDiagnostics::create(pOsSysman, initalizedDiagTest, deviceProperties.flags & ZE_DEVICE_PROPERTY_FLAG_SUBDEVICE, deviceProperties.subdeviceId); UNRECOVERABLE_IF(nullptr == pOsDiagnostics); } diff --git a/level_zero/tools/source/sysman/diagnostics/diagnostics_imp.h b/level_zero/tools/source/sysman/diagnostics/diagnostics_imp.h index 3a490b7063..e6f5455296 100644 --- a/level_zero/tools/source/sysman/diagnostics/diagnostics_imp.h +++ b/level_zero/tools/source/sysman/diagnostics/diagnostics_imp.h @@ -23,9 +23,12 @@ class DiagnosticsImp : public Diagnostics, NEO::NonCopyableOrMovableClass { ze_result_t diagnosticsGetTests(uint32_t *pCount, zes_diag_test_t *pTests) override; ze_result_t diagnosticsRunTests(uint32_t start, uint32_t end, zes_diag_result_t *pResult) override; DiagnosticsImp() = default; - DiagnosticsImp(OsSysman *pOsSysman, const std::string &initalizedDiagTest); + DiagnosticsImp(OsSysman *pOsSysman, const std::string &initalizedDiagTest, ze_device_handle_t handle); ~DiagnosticsImp() override; std::unique_ptr pOsDiagnostics = nullptr; + + private: + ze_device_handle_t deviceHandle = nullptr; }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/diagnostics/linux/os_diagnostics_imp.cpp b/level_zero/tools/source/sysman/diagnostics/linux/os_diagnostics_imp.cpp index 1ba3f91246..04def671a4 100644 --- a/level_zero/tools/source/sysman/diagnostics/linux/os_diagnostics_imp.cpp +++ b/level_zero/tools/source/sysman/diagnostics/linux/os_diagnostics_imp.cpp @@ -34,14 +34,14 @@ ze_result_t LinuxDiagnosticsImp::osRunDiagTests(uint32_t start, uint32_t end, ze return osRunDiagTestsinFW(pResult); } -LinuxDiagnosticsImp::LinuxDiagnosticsImp(OsSysman *pOsSysman, const std::string &diagTests) : osDiagType(diagTests) { +LinuxDiagnosticsImp::LinuxDiagnosticsImp(OsSysman *pOsSysman, const std::string &diagTests, ze_bool_t onSubdevice, uint32_t subdeviceId) : osDiagType(diagTests), isSubdevice(onSubdevice), subdeviceId(subdeviceId) { LinuxSysmanImp *pLinuxSysmanImp = static_cast(pOsSysman); pFwInterface = pLinuxSysmanImp->getFwUtilInterface(); pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess(); } -std::unique_ptr OsDiagnostics::create(OsSysman *pOsSysman, const std::string &diagTests) { - std::unique_ptr pLinuxDiagnosticsImp = std::make_unique(pOsSysman, diagTests); +std::unique_ptr OsDiagnostics::create(OsSysman *pOsSysman, const std::string &diagTests, ze_bool_t onSubdevice, uint32_t subdeviceId) { + std::unique_ptr pLinuxDiagnosticsImp = std::make_unique(pOsSysman, diagTests, onSubdevice, subdeviceId); return pLinuxDiagnosticsImp; } diff --git a/level_zero/tools/source/sysman/diagnostics/linux/os_diagnostics_imp.h b/level_zero/tools/source/sysman/diagnostics/linux/os_diagnostics_imp.h index 010258912f..abcffce226 100644 --- a/level_zero/tools/source/sysman/diagnostics/linux/os_diagnostics_imp.h +++ b/level_zero/tools/source/sysman/diagnostics/linux/os_diagnostics_imp.h @@ -21,7 +21,7 @@ class LinuxDiagnosticsImp : public OsDiagnostics, NEO::NonCopyableOrMovableClass ze_result_t osRunDiagTests(uint32_t start, uint32_t end, zes_diag_result_t *pResult) override; ze_result_t osRunDiagTestsinFW(zes_diag_result_t *pResult); LinuxDiagnosticsImp() = default; - LinuxDiagnosticsImp(OsSysman *pOsSysman, const std::string &diagTests); + LinuxDiagnosticsImp(OsSysman *pOsSysman, const std::string &diagTests, ze_bool_t onSubdevice, uint32_t subdeviceId); ~LinuxDiagnosticsImp() override = default; std::string osDiagType = "unknown"; @@ -31,6 +31,9 @@ class LinuxDiagnosticsImp : public OsDiagnostics, NEO::NonCopyableOrMovableClass private: static const std::string quiescentGpuFile; + bool isSubdevice = false; + uint32_t subdeviceId = 0; + static const std::string invalidateLmemFile; }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/diagnostics/os_diagnostics.h b/level_zero/tools/source/sysman/diagnostics/os_diagnostics.h index e2c348c13a..446fe57bb4 100644 --- a/level_zero/tools/source/sysman/diagnostics/os_diagnostics.h +++ b/level_zero/tools/source/sysman/diagnostics/os_diagnostics.h @@ -21,7 +21,7 @@ class OsDiagnostics { virtual void osGetDiagProperties(zes_diag_properties_t *pProperties) = 0; virtual ze_result_t osGetDiagTests(uint32_t *pCount, zes_diag_test_t *pTests) = 0; virtual ze_result_t osRunDiagTests(uint32_t start, uint32_t end, zes_diag_result_t *pResult) = 0; - static std::unique_ptr create(OsSysman *pOsSysman, const std::string &DiagTests); + static std::unique_ptr create(OsSysman *pOsSysman, const std::string &DiagTests, ze_bool_t onSubdevice, uint32_t subdeviceId); static void getSupportedDiagTestsFromFW(void *pFwInterface, std::vector &supportedDiagTests); static void getSupportedDiagTests(std::vector &supportedDiagTests, OsSysman *pOsSysman); virtual ~OsDiagnostics() {} diff --git a/level_zero/tools/source/sysman/diagnostics/windows/os_diagnostics_imp.cpp b/level_zero/tools/source/sysman/diagnostics/windows/os_diagnostics_imp.cpp index 1ae70037cd..ee0e3fe7da 100644 --- a/level_zero/tools/source/sysman/diagnostics/windows/os_diagnostics_imp.cpp +++ b/level_zero/tools/source/sysman/diagnostics/windows/os_diagnostics_imp.cpp @@ -19,7 +19,7 @@ ze_result_t WddmDiagnosticsImp::osRunDiagTests(uint32_t start, uint32_t end, zes return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; } -std::unique_ptr OsDiagnostics::create(OsSysman *pOsSysman, const std::string &diagTests) { +std::unique_ptr OsDiagnostics::create(OsSysman *pOsSysman, const std::string &DiagTests, ze_bool_t onSubdevice, uint32_t subdeviceId) { std::unique_ptr pWddmDiagnosticsImp = std::make_unique(); return pWddmDiagnosticsImp; } diff --git a/level_zero/tools/source/sysman/linux/firmware_util/firmware_util.h b/level_zero/tools/source/sysman/linux/firmware_util/firmware_util.h index 79c1997a26..d63eeb5ebe 100644 --- a/level_zero/tools/source/sysman/linux/firmware_util/firmware_util.h +++ b/level_zero/tools/source/sysman/linux/firmware_util/firmware_util.h @@ -32,7 +32,7 @@ class FirmwareUtil { virtual ze_result_t fwFlashOprom(void *pImage, uint32_t size) = 0; virtual ze_result_t fwIfrApplied(bool &ifrStatus) = 0; virtual ze_result_t fwSupportedDiagTests(std::vector &supportedDiagTests) = 0; - virtual ze_result_t fwRunDiagTests(std::string &osDiagType, zes_diag_result_t *pDiagResult) = 0; + virtual ze_result_t fwRunDiagTests(std::string &osDiagType, zes_diag_result_t *pDiagResult, uint32_t subDeviceId) = 0; virtual ~FirmwareUtil() = default; }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/linux/firmware_util/firmware_util_imp.h b/level_zero/tools/source/sysman/linux/firmware_util/firmware_util_imp.h index ce21e644b5..1df8668f1a 100644 --- a/level_zero/tools/source/sysman/linux/firmware_util/firmware_util_imp.h +++ b/level_zero/tools/source/sysman/linux/firmware_util/firmware_util_imp.h @@ -69,7 +69,7 @@ class FirmwareUtilImp : public FirmwareUtil, NEO::NonCopyableOrMovableClass { ze_result_t fwFlashOprom(void *pImage, uint32_t size) override; ze_result_t fwIfrApplied(bool &ifrStatus) override; ze_result_t fwSupportedDiagTests(std::vector &supportedDiagTests) override; - ze_result_t fwRunDiagTests(std::string &osDiagType, zes_diag_result_t *pDiagResult) override; + ze_result_t fwRunDiagTests(std::string &osDiagType, zes_diag_result_t *pDiagResult, uint32_t subDeviceId) override; template bool getSymbolAddr(const std::string name, T &proc); diff --git a/level_zero/tools/source/sysman/linux/firmware_util/firmware_util_imp_helper.cpp b/level_zero/tools/source/sysman/linux/firmware_util/firmware_util_imp_helper.cpp index 17ff0d58b4..fa7154054a 100644 --- a/level_zero/tools/source/sysman/linux/firmware_util/firmware_util_imp_helper.cpp +++ b/level_zero/tools/source/sysman/linux/firmware_util/firmware_util_imp_helper.cpp @@ -19,7 +19,7 @@ ze_result_t FirmwareUtilImp::fwSupportedDiagTests(std::vector &supp return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; } -ze_result_t FirmwareUtilImp::fwRunDiagTests(std::string &osDiagType, zes_diag_result_t *pDiagResult) { +ze_result_t FirmwareUtilImp::fwRunDiagTests(std::string &osDiagType, zes_diag_result_t *pDiagResult, uint32_t subDeviceId) { return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; } } // namespace L0 diff --git a/level_zero/tools/source/sysman/sysman_imp.cpp b/level_zero/tools/source/sysman/sysman_imp.cpp index d82a38dbd5..de6873c588 100644 --- a/level_zero/tools/source/sysman/sysman_imp.cpp +++ b/level_zero/tools/source/sysman/sysman_imp.cpp @@ -115,7 +115,7 @@ void SysmanDeviceImp::init() { pFirmwareHandleContext->init(); } if (pDiagnosticsHandleContext) { - pDiagnosticsHandleContext->init(); + pDiagnosticsHandleContext->init(deviceHandles); } if (pPerformanceHandleContext) { pPerformanceHandleContext->init(deviceHandles); diff --git a/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/mock_zes_sysman_diagnostics.h b/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/mock_zes_sysman_diagnostics.h index e56d69cb09..5d348483ee 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/mock_zes_sysman_diagnostics.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/mock_zes_sysman_diagnostics.h @@ -15,6 +15,7 @@ namespace ult { constexpr uint32_t mockDiagHandleCount = 2; const std::string mockQuiescentGpuFile("quiesce_gpu"); +const std::string mockinvalidateLmemFile("invalidate_lmem_mmaps"); const std::vector mockSupportedDiagTypes = {"MOCKSUITE1", "MOCKSUITE2"}; class DiagnosticsInterface : public FirmwareUtil {}; @@ -35,7 +36,7 @@ struct Mock : public FirmwareUtil { supportedDiagTests.push_back(mockSupportedDiagTypes[1]); return ZE_RESULT_SUCCESS; } - ze_result_t mockFwRunDiagTestsReturnSuccess(std::string &osDiagType, zes_diag_result_t *pResult) { + ze_result_t mockFwRunDiagTestsReturnSuccess(std::string &osDiagType, zes_diag_result_t *pResult, uint32_t subDeviceId) { *pResult = ZES_DIAG_RESULT_NO_ERRORS; return ZE_RESULT_SUCCESS; } @@ -50,7 +51,7 @@ struct Mock : public FirmwareUtil { MOCK_METHOD(ze_result_t, fwFlashOprom, (void *pImage, uint32_t size), (override)); MOCK_METHOD(ze_result_t, fwIfrApplied, (bool &ifrStatus), (override)); MOCK_METHOD(ze_result_t, fwSupportedDiagTests, (std::vector & supportedDiagTests), (override)); - MOCK_METHOD(ze_result_t, fwRunDiagTests, (std::string & osDiagType, zes_diag_result_t *pResult), (override)); + MOCK_METHOD(ze_result_t, fwRunDiagTests, (std::string & osDiagType, zes_diag_result_t *pResult, uint32_t subDeviceId), (override)); }; class DiagSysfsAccess : public SysfsAccess {}; @@ -60,6 +61,8 @@ struct Mock : public DiagSysfsAccess { ze_result_t mockwrite(const std::string file, const int val) { if (std::string::npos != file.find(mockQuiescentGpuFile)) { return ZE_RESULT_SUCCESS; + } else if (std::string::npos != file.find(mockinvalidateLmemFile)) { + return ZE_RESULT_SUCCESS; } else { return ZE_RESULT_ERROR_NOT_AVAILABLE; } diff --git a/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/test_zes_sysman_diagnostics.cpp b/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/test_zes_sysman_diagnostics.cpp index 8f740471d2..7c2c17e68f 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/test_zes_sysman_diagnostics.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/test_zes_sysman_diagnostics.cpp @@ -34,7 +34,17 @@ class ZesDiagnosticsFixture : public SysmanDeviceFixture { delete handle; } pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.clear(); - pSysmanDeviceImp->pDiagnosticsHandleContext->init(); + uint32_t subDeviceCount = 0; + std::vector deviceHandles; + // We received a device handle. Check for subdevices in this device + Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, nullptr); + if (subDeviceCount == 0) { + deviceHandles.resize(1, device->toHandle()); + } else { + deviceHandles.resize(subDeviceCount, nullptr); + Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data()); + } + pSysmanDeviceImp->pDiagnosticsHandleContext->init(deviceHandles); } void TearDown() override { SysmanDeviceFixture::TearDown(); @@ -46,6 +56,23 @@ class ZesDiagnosticsFixture : public SysmanDeviceFixture { EXPECT_EQ(zesDeviceEnumDiagnosticTestSuites(device->toHandle(), &count, handles.data()), ZE_RESULT_SUCCESS); return handles; } + void clear_and_reinit_handles(std::vector &deviceHandles) { + for (const auto &handle : pSysmanDeviceImp->pDiagnosticsHandleContext->handleList) { + delete handle; + } + pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.clear(); + pSysmanDeviceImp->pDiagnosticsHandleContext->supportedDiagTests.clear(); + uint32_t subDeviceCount = 0; + + // We received a device handle. Check for subdevices in this device + Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, nullptr); + if (subDeviceCount == 0) { + deviceHandles.resize(1, device->toHandle()); + } else { + deviceHandles.resize(subDeviceCount, nullptr); + Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data()); + } + } }; TEST_F(ZesDiagnosticsFixture, GivenComponentCountZeroWhenCallingzesDeviceEnumDiagnosticTestSuitesThenZeroCountIsReturnedAndVerifyzesDeviceEnumDiagnosticTestSuitesCallSucceeds) { @@ -70,7 +97,17 @@ TEST_F(ZesDiagnosticsFixture, GivenComponentCountZeroWhenCallingzesDeviceEnumDia EXPECT_EQ(ZE_RESULT_SUCCESS, result); EXPECT_EQ(count, 0u); - DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]); + uint32_t subDeviceCount = 0; + std::vector deviceHandles; + // We received a device handle. Check for subdevices in this device + Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, nullptr); + if (subDeviceCount == 0) { + deviceHandles.resize(1, device->toHandle()); + } else { + deviceHandles.resize(subDeviceCount, nullptr); + Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data()); + } + DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0], deviceHandles[0]); pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.push_back(ptestDiagnosticsImp); result = zesDeviceEnumDiagnosticTestSuites(device->toHandle(), &count, nullptr); @@ -91,49 +128,36 @@ TEST_F(ZesDiagnosticsFixture, GivenComponentCountZeroWhenCallingzesDeviceEnumDia } TEST_F(ZesDiagnosticsFixture, GivenFailedFirmwareInitializationWhenInitializingDiagnosticsContextThenexpectNoHandles) { - for (const auto &handle : pSysmanDeviceImp->pDiagnosticsHandleContext->handleList) { - delete handle; - } - pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.clear(); + std::vector deviceHandles; + clear_and_reinit_handles(deviceHandles); ON_CALL(*pMockDiagInterface.get(), fwDeviceInit()) .WillByDefault(::testing::Invoke(pMockDiagInterface.get(), &Mock::mockFwDeviceInitFail)); - - pSysmanDeviceImp->pDiagnosticsHandleContext->init(); + pSysmanDeviceImp->pDiagnosticsHandleContext->init(deviceHandles); EXPECT_EQ(0u, pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.size()); } -TEST_F(ZesDiagnosticsFixture, GivenSupportedTestsWhenInitializingDiagnosticsContextThenexpectHandles) { - for (const auto &handle : pSysmanDeviceImp->pDiagnosticsHandleContext->handleList) { - delete handle; - } - pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.clear(); +TEST_F(ZesDiagnosticsFixture, GivenSupportedTestsWhenInitializingDiagnosticsContextThenExpectHandles) { + std::vector deviceHandles; + clear_and_reinit_handles(deviceHandles); pSysmanDeviceImp->pDiagnosticsHandleContext->supportedDiagTests.push_back(mockSupportedDiagTypes[0]); - ON_CALL(*pMockDiagInterface.get(), fwDeviceInit()) - .WillByDefault(::testing::Invoke(pMockDiagInterface.get(), &Mock::mockFwDeviceInitFail)); - - pSysmanDeviceImp->pDiagnosticsHandleContext->init(); - + pSysmanDeviceImp->pDiagnosticsHandleContext->init(deviceHandles); EXPECT_EQ(1u, pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.size()); } TEST_F(ZesDiagnosticsFixture, GivenFirmwareInitializationFailureThenCreateHandleMustFail) { - for (const auto &handle : pSysmanDeviceImp->pDiagnosticsHandleContext->handleList) { - delete handle; - } - pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.clear(); + std::vector deviceHandles; + clear_and_reinit_handles(deviceHandles); ON_CALL(*pMockDiagInterface.get(), fwDeviceInit()) .WillByDefault(::testing::Invoke(pMockDiagInterface.get(), &Mock::mockFwDeviceInitFail)); - pSysmanDeviceImp->pDiagnosticsHandleContext->init(); + pSysmanDeviceImp->pDiagnosticsHandleContext->init(deviceHandles); EXPECT_EQ(0u, pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.size()); } TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenGettingDiagnosticsPropertiesThenCallSucceeds) { - for (const auto &handle : pSysmanDeviceImp->pDiagnosticsHandleContext->handleList) { - delete handle; - } - pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.clear(); - DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]); + std::vector deviceHandles; + clear_and_reinit_handles(deviceHandles); + DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0], deviceHandles[0]); pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.push_back(ptestDiagnosticsImp); auto handle = pSysmanDeviceImp->pDiagnosticsHandleContext->handleList[0]->toHandle(); @@ -142,11 +166,9 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenGettingDiagnosticsP } TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenGettingDiagnosticsTestThenCallSucceeds) { - for (const auto &handle : pSysmanDeviceImp->pDiagnosticsHandleContext->handleList) { - delete handle; - } - pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.clear(); - DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]); + std::vector deviceHandles; + clear_and_reinit_handles(deviceHandles); + DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0], deviceHandles[0]); pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.push_back(ptestDiagnosticsImp); auto handle = pSysmanDeviceImp->pDiagnosticsHandleContext->handleList[0]->toHandle(); @@ -159,11 +181,9 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenGettingDiagnosticsT } TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenRunningDiagnosticsTestThenCallSucceeds) { - for (const auto &handle : pSysmanDeviceImp->pDiagnosticsHandleContext->handleList) { - delete handle; - } - pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.clear(); - DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]); + std::vector deviceHandles; + clear_and_reinit_handles(deviceHandles); + DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0], deviceHandles[0]); pSysmanDeviceImp->pDiagnosticsHandleContext->handleList.push_back(ptestDiagnosticsImp); auto handle = pSysmanDeviceImp->pDiagnosticsHandleContext->handleList[0]->toHandle(); diff --git a/level_zero/tools/test/unit_tests/sources/sysman/firmware/linux/mock_zes_sysman_firmware.h b/level_zero/tools/test/unit_tests/sources/sysman/firmware/linux/mock_zes_sysman_firmware.h index ed64a629a3..8d93fab27d 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/firmware/linux/mock_zes_sysman_firmware.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/firmware/linux/mock_zes_sysman_firmware.h @@ -72,7 +72,7 @@ struct Mock : public FirmwareUtil { MOCK_METHOD(ze_result_t, fwFlashOprom, (void *pImage, uint32_t size), (override)); MOCK_METHOD(ze_result_t, fwIfrApplied, (bool &ifrStatus), (override)); MOCK_METHOD(ze_result_t, fwSupportedDiagTests, (std::vector & supportedDiagTests), (override)); - MOCK_METHOD(ze_result_t, fwRunDiagTests, (std::string & osDiagType, zes_diag_result_t *pResult), (override)); + MOCK_METHOD(ze_result_t, fwRunDiagTests, (std::string & osDiagType, zes_diag_result_t *pResult, uint32_t subdeviceId), (override)); }; class PublicLinuxFirmwareImp : public L0::LinuxFirmwareImp { diff --git a/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/mock_global_operations.h b/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/mock_global_operations.h index 5c40680944..6f348fda4d 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/mock_global_operations.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/mock_global_operations.h @@ -427,7 +427,7 @@ struct Mock : public FirmwareUtil { MOCK_METHOD(ze_result_t, fwFlashOprom, (void *pImage, uint32_t size), (override)); MOCK_METHOD(ze_result_t, fwIfrApplied, (bool &ifrStatus), (override)); MOCK_METHOD(ze_result_t, fwSupportedDiagTests, (std::vector & supportedDiagTests), (override)); - MOCK_METHOD(ze_result_t, fwRunDiagTests, (std::string & osDiagType, zes_diag_result_t *pResult), (override)); + MOCK_METHOD(ze_result_t, fwRunDiagTests, (std::string & osDiagType, zes_diag_result_t *pResult, uint32_t subdeviceId), (override)); }; class PublicLinuxGlobalOperationsImp : public L0::LinuxGlobalOperationsImp {