From 0165f6158cf41f7e0d5b561bc6ed40109a69a1ba Mon Sep 17 00:00:00 2001 From: "Singh, Prasoon" Date: Mon, 10 Apr 2023 11:01:37 +0000 Subject: [PATCH] [Sysman] Replace normal pointers with smart pointers (13/n) Replacing normal pointers by smart pointers in scheduler module of LO sysman(zesinit). Related-To: LOCI-2810 Signed-off-by: Singh, Prasoon --- .../scheduler/linux/os_scheduler_imp.cpp | 6 ++--- .../linux/os_scheduler_imp_prelim.cpp | 6 ++--- .../sysman/source/scheduler/os_scheduler.h | 5 ++-- .../sysman/source/scheduler/scheduler.cpp | 7 ++---- .../sysman/source/scheduler/scheduler.h | 2 +- .../sysman/source/scheduler/scheduler_imp.cpp | 7 +----- .../sysman/source/scheduler/scheduler_imp.h | 2 +- .../scheduler/windows/os_scheduler_imp.cpp | 6 ++--- .../scheduler/linux/test_zes_scheduler.cpp | 8 +------ .../linux/test_zes_scheduler_prelim.cpp | 23 +++++-------------- 10 files changed, 24 insertions(+), 48 deletions(-) diff --git a/level_zero/sysman/source/scheduler/linux/os_scheduler_imp.cpp b/level_zero/sysman/source/scheduler/linux/os_scheduler_imp.cpp index 8421e70b28..aae4571822 100644 --- a/level_zero/sysman/source/scheduler/linux/os_scheduler_imp.cpp +++ b/level_zero/sysman/source/scheduler/linux/os_scheduler_imp.cpp @@ -415,10 +415,10 @@ LinuxSchedulerImp::LinuxSchedulerImp( this->listOfEngines = listOfEngines; } -OsScheduler *OsScheduler::create( +std::unique_ptr OsScheduler::create( OsSysman *pOsSysman, zes_engine_type_flag_t type, std::vector &listOfEngines, ze_bool_t isSubdevice, uint32_t subdeviceId) { - LinuxSchedulerImp *pLinuxSchedulerImp = new LinuxSchedulerImp(pOsSysman, type, listOfEngines, isSubdevice, subdeviceId); - return static_cast(pLinuxSchedulerImp); + std::unique_ptr pLinuxSchedulerImp = std::make_unique(pOsSysman, type, listOfEngines, isSubdevice, subdeviceId); + return pLinuxSchedulerImp; } } // namespace Sysman diff --git a/level_zero/sysman/source/scheduler/linux/os_scheduler_imp_prelim.cpp b/level_zero/sysman/source/scheduler/linux/os_scheduler_imp_prelim.cpp index 06d6095e2b..bea328f0ff 100644 --- a/level_zero/sysman/source/scheduler/linux/os_scheduler_imp_prelim.cpp +++ b/level_zero/sysman/source/scheduler/linux/os_scheduler_imp_prelim.cpp @@ -508,10 +508,10 @@ LinuxSchedulerImp::LinuxSchedulerImp( this->listOfEngines = listOfEngines; } -OsScheduler *OsScheduler::create( +std::unique_ptr OsScheduler::create( OsSysman *pOsSysman, zes_engine_type_flag_t type, std::vector &listOfEngines, ze_bool_t isSubdevice, uint32_t subdeviceId) { - LinuxSchedulerImp *pLinuxSchedulerImp = new LinuxSchedulerImp(pOsSysman, type, listOfEngines, isSubdevice, subdeviceId); - return static_cast(pLinuxSchedulerImp); + std::unique_ptr pLinuxSchedulerImp = std::make_unique(pOsSysman, type, listOfEngines, isSubdevice, subdeviceId); + return pLinuxSchedulerImp; } } // namespace Sysman diff --git a/level_zero/sysman/source/scheduler/os_scheduler.h b/level_zero/sysman/source/scheduler/os_scheduler.h index 331ed1a81b..9dbbc65f81 100644 --- a/level_zero/sysman/source/scheduler/os_scheduler.h +++ b/level_zero/sysman/source/scheduler/os_scheduler.h @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -26,8 +27,8 @@ class OsScheduler { virtual ze_result_t setExclusiveMode(ze_bool_t *pNeedReload) = 0; virtual ze_result_t setComputeUnitDebugMode(ze_bool_t *pNeedReload) = 0; virtual ze_result_t getProperties(zes_sched_properties_t &properties) = 0; - static OsScheduler *create(OsSysman *pOsSysman, zes_engine_type_flag_t engineType, std::vector &listOfEngines, - ze_bool_t isSubdevice, uint32_t subdeviceId); + static std::unique_ptr create(OsSysman *pOsSysman, zes_engine_type_flag_t engineType, std::vector &listOfEngines, + ze_bool_t isSubdevice, uint32_t subdeviceId); static ze_result_t getNumEngineTypeAndInstances(std::map> &listOfEngines, OsSysman *pOsSysman, ze_bool_t onSubDevice, uint32_t subDeviceId); virtual ~OsScheduler() = default; diff --git a/level_zero/sysman/source/scheduler/scheduler.cpp b/level_zero/sysman/source/scheduler/scheduler.cpp index 8e2c952136..3065fb9df6 100644 --- a/level_zero/sysman/source/scheduler/scheduler.cpp +++ b/level_zero/sysman/source/scheduler/scheduler.cpp @@ -18,15 +18,12 @@ SchedulerHandleContext::SchedulerHandleContext(OsSysman *pOsSysman) { } SchedulerHandleContext::~SchedulerHandleContext() { - for (Scheduler *pScheduler : handleList) { - delete pScheduler; - } handleList.clear(); } void SchedulerHandleContext::createHandle(zes_engine_type_flag_t engineType, std::vector &listOfEngines, ze_bool_t onSubDevice, uint32_t subDeviceId) { - Scheduler *pScheduler = new SchedulerImp(pOsSysman, engineType, listOfEngines, onSubDevice, subDeviceId); - handleList.push_back(pScheduler); + std::unique_ptr pScheduler = std::make_unique(pOsSysman, engineType, listOfEngines, onSubDevice, subDeviceId); + handleList.push_back(std::move(pScheduler)); } void SchedulerHandleContext::init(uint32_t subDeviceCount) { diff --git a/level_zero/sysman/source/scheduler/scheduler.h b/level_zero/sysman/source/scheduler/scheduler.h index f34a51d345..bcf1d09430 100644 --- a/level_zero/sysman/source/scheduler/scheduler.h +++ b/level_zero/sysman/source/scheduler/scheduler.h @@ -44,7 +44,7 @@ struct SchedulerHandleContext : NEO::NonCopyableOrMovableClass { ze_result_t schedulerGet(uint32_t *pCount, zes_sched_handle_t *phScheduler); OsSysman *pOsSysman = nullptr; - std::vector handleList = {}; + std::vector> handleList = {}; private: void createHandle(zes_engine_type_flag_t engineType, std::vector &listOfEngines, ze_bool_t onSubDevice, uint32_t subDeviceId); diff --git a/level_zero/sysman/source/scheduler/scheduler_imp.cpp b/level_zero/sysman/source/scheduler/scheduler_imp.cpp index bade157602..a08fd7a5ff 100644 --- a/level_zero/sysman/source/scheduler/scheduler_imp.cpp +++ b/level_zero/sysman/source/scheduler/scheduler_imp.cpp @@ -58,12 +58,7 @@ SchedulerImp::SchedulerImp(OsSysman *pOsSysman, zes_engine_type_flag_t engineTyp init(); }; -SchedulerImp::~SchedulerImp() { - if (nullptr != pOsScheduler) { - delete pOsScheduler; - pOsScheduler = nullptr; - } -} +SchedulerImp::~SchedulerImp() = default; } // namespace Sysman } // namespace L0 diff --git a/level_zero/sysman/source/scheduler/scheduler_imp.h b/level_zero/sysman/source/scheduler/scheduler_imp.h index 9d92c9dfed..8357cf630d 100644 --- a/level_zero/sysman/source/scheduler/scheduler_imp.h +++ b/level_zero/sysman/source/scheduler/scheduler_imp.h @@ -28,7 +28,7 @@ class SchedulerImp : public Scheduler, NEO::NonCopyableOrMovableClass { ze_result_t setComputeUnitDebugMode(ze_bool_t *pNeedReload) override; SchedulerImp() = default; - OsScheduler *pOsScheduler = nullptr; + std::unique_ptr pOsScheduler; SchedulerImp(OsSysman *pOsSysman, zes_engine_type_flag_t type, std::vector &listOfEngines, ze_bool_t onSubDevice, uint32_t subDeviceId); ~SchedulerImp() override; diff --git a/level_zero/sysman/source/scheduler/windows/os_scheduler_imp.cpp b/level_zero/sysman/source/scheduler/windows/os_scheduler_imp.cpp index 7bef95e6a2..cfefe3cbd8 100644 --- a/level_zero/sysman/source/scheduler/windows/os_scheduler_imp.cpp +++ b/level_zero/sysman/source/scheduler/windows/os_scheduler_imp.cpp @@ -49,10 +49,10 @@ ze_result_t OsScheduler::getNumEngineTypeAndInstances(std::map OsScheduler::create( OsSysman *pOsSysman, zes_engine_type_flag_t type, std::vector &listOfEngines, ze_bool_t isSubdevice, uint32_t subdeviceId) { - WddmSchedulerImp *pWddmSchedulerImp = new WddmSchedulerImp(); - return static_cast(pWddmSchedulerImp); + std::unique_ptr pWddmSchedulerImp = std::make_unique(); + return pWddmSchedulerImp; } } // namespace Sysman diff --git a/level_zero/sysman/test/unit_tests/sources/scheduler/linux/test_zes_scheduler.cpp b/level_zero/sysman/test/unit_tests/sources/scheduler/linux/test_zes_scheduler.cpp index b16cd9adc2..aeff1ff869 100644 --- a/level_zero/sysman/test/unit_tests/sources/scheduler/linux/test_zes_scheduler.cpp +++ b/level_zero/sysman/test/unit_tests/sources/scheduler/linux/test_zes_scheduler.cpp @@ -55,10 +55,6 @@ class SysmanDeviceSchedulerFixture : public SysmanDeviceFixture { pSysfsAccess->write(engineDir + "/" + engineName + "/" + heartbeatIntervalMilliSecs, heartbeatMilliSecs); }); - // delete handles created in initial SysmanDeviceHandleContext::init() call - for (auto handle : pSysmanDeviceImp->pSchedulerHandleContext->handleList) { - delete handle; - } pSysmanDeviceImp->pSchedulerHandleContext->handleList.clear(); device = pSysmanDevice; getSchedHandles(0); @@ -622,10 +618,8 @@ TEST_F(SysmanDeviceSchedulerFixture, GivenValidDeviceHandleWhenCallingzesSchedul TEST_F(SysmanDeviceSchedulerFixture, GivenValidObjectsOfClassSchedulerImpAndSchedulerHandleContextThenDuringObjectReleaseCheckDestructorBranches) { for (auto &handle : pSysmanDeviceImp->pSchedulerHandleContext->handleList) { - auto pSchedulerImp = static_cast(handle); - delete pSchedulerImp->pOsScheduler; + auto pSchedulerImp = static_cast(handle.get()); pSchedulerImp->pOsScheduler = nullptr; - delete handle; handle = nullptr; } } diff --git a/level_zero/sysman/test/unit_tests/sources/scheduler/linux/test_zes_scheduler_prelim.cpp b/level_zero/sysman/test/unit_tests/sources/scheduler/linux/test_zes_scheduler_prelim.cpp index 9bee6e43bd..f2e1667177 100644 --- a/level_zero/sysman/test/unit_tests/sources/scheduler/linux/test_zes_scheduler_prelim.cpp +++ b/level_zero/sysman/test/unit_tests/sources/scheduler/linux/test_zes_scheduler_prelim.cpp @@ -64,10 +64,6 @@ class SysmanDeviceSchedulerFixture : public SysmanDeviceFixture { pSysfsAccess->setFileProperties(dummy, enableEuDebug, true, S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR); pSysfsAccess->write(enableEuDebug, 0); - // delete handles created in initial SysmanDeviceHandleContext::init() call - for (auto handle : pSysmanDeviceImp->pSchedulerHandleContext->handleList) { - delete handle; - } pSysmanDeviceImp->pSchedulerHandleContext->handleList.clear(); device = pSysmanDevice; getSchedHandles(0); @@ -108,7 +104,7 @@ class SysmanDeviceSchedulerFixture : public SysmanDeviceFixture { void setComputeUnitDebugModeMock(zes_sched_handle_t hScheduler) { auto pSchedulerImp = static_cast(L0::Sysman::Scheduler::fromHandle(hScheduler)); - auto pOsScheduler = static_cast(pSchedulerImp->pOsScheduler); + auto pOsScheduler = static_cast((pSchedulerImp->pOsScheduler).get()); EXPECT_EQ(ZE_RESULT_SUCCESS, pOsScheduler->setExclusiveModeImp()); uint64_t val = 1; @@ -167,7 +163,7 @@ TEST_F(SysmanDeviceSchedulerFixture, GivenValidDeviceHandleWhenCallingzesSchedul TEST_F(SysmanDeviceSchedulerFixture, GivenSomeInvalidSchedulerModeWhenCheckingForCurrentModeThenAPIReportUnknownMode) { auto handles = getSchedHandles(handleComponentCount); auto pSchedulerImp = static_cast(L0::Sysman::Scheduler::fromHandle(handles[0])); - auto pOsScheduler = static_cast(pSchedulerImp->pOsScheduler); + auto pOsScheduler = static_cast((pSchedulerImp->pOsScheduler).get()); uint64_t timeslice = 0, timeout = 0, heartbeat = 3000; pOsScheduler->setPreemptTimeout(timeout); pOsScheduler->setTimesliceDuration(timeslice); @@ -607,7 +603,7 @@ TEST_F(SysmanDeviceSchedulerFixture, GivenHeartBeatIntervalFileNotPresentWhenSet auto handles = getSchedHandles(handleComponentCount); auto pSchedulerImp = static_cast(L0::Sysman::Scheduler::fromHandle(handles[0])); - auto pOsScheduler = static_cast(pSchedulerImp->pOsScheduler); + auto pOsScheduler = static_cast((pSchedulerImp->pOsScheduler).get()); EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pOsScheduler->setHeartbeatInterval(2000)); } @@ -821,7 +817,7 @@ TEST_F(SysmanDeviceSchedulerFixture, DISABLED_GivenEuDebugNodeWriteFailsWhenCall TEST_F(SysmanDeviceSchedulerFixture, GivenNodeRequiredToEnableEuDebugNotPresentWhenCheckingForDebugModeThenCallReturnsFalse) { auto handles = getSchedHandles(handleComponentCount); auto pSchedulerImp = static_cast(L0::Sysman::Scheduler::fromHandle(handles[0])); - auto pOsScheduler = static_cast(pSchedulerImp->pOsScheduler); + auto pOsScheduler = static_cast((pSchedulerImp->pOsScheduler).get()); std::string dummy; pSysfsAccess->setFileProperties(dummy, enableEuDebug, false, S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR); EXPECT_FALSE(pOsScheduler->isComputeUnitDebugModeEnabled()); @@ -939,10 +935,8 @@ TEST_F(SysmanDeviceSchedulerFixture, GivenValidDeviceHandleWhenCallingzesSchedul TEST_F(SysmanDeviceSchedulerFixture, GivenValidObjectsOfClassSchedulerImpAndSchedulerHandleContextThenDuringObjectReleaseCheckDestructorBranches) { for (auto &handle : pSysmanDeviceImp->pSchedulerHandleContext->handleList) { - auto pSchedulerImp = static_cast(handle); - delete pSchedulerImp->pOsScheduler; + auto pSchedulerImp = static_cast(handle.get()); pSchedulerImp->pOsScheduler = nullptr; - delete handle; handle = nullptr; } } @@ -973,11 +967,6 @@ class SysmanMultiDeviceSchedulerFixture : public SysmanMultiDeviceFixture { auto &osInterface = pSysmanDeviceImp->getRootDeviceEnvironment().osInterface; osInterface->setDriverModel(std::unique_ptr(pDrm)); - // delete handles created in initial SysmanDeviceHandleContext::init() call - for (auto handle : pSysmanDeviceImp->pSchedulerHandleContext->handleList) { - delete handle; - } - pSysmanDeviceImp->pSchedulerHandleContext->handleList.clear(); device = pSysmanDevice; auto drm = pSysmanDeviceImp->getRootDeviceEnvironment().osInterface->getDriverModel()->as(); @@ -999,7 +988,7 @@ class SysmanMultiDeviceSchedulerFixture : public SysmanMultiDeviceFixture { TEST_F(SysmanMultiDeviceSchedulerFixture, GivenValidSchedulerHandleContextWhenInitializingForIncorrectDistanceInfoVerifyInvalidEngineTypeIsNotReturned) { auto pSchedulerHandleContextTest = std::make_unique(pOsSysman); pSchedulerHandleContextTest->init(pOsSysman->getSubDeviceCount()); - for (auto handle : pSchedulerHandleContextTest->handleList) { + for (auto &handle : pSchedulerHandleContextTest->handleList) { zes_sched_properties_t properties = {}; ze_result_t result = zesSchedulerGetProperties(handle->toHandle(), &properties); EXPECT_EQ(ZE_RESULT_SUCCESS, result);