From 4b8d4285d7399d5eb172a91bd255b32df5a5a97c Mon Sep 17 00:00:00 2001 From: mraghuwa Date: Thu, 13 Aug 2020 23:33:21 +0530 Subject: [PATCH] add getDeviceHandle() at OS specific level Change-Id: I95fc24043f8f603d6270323b0f23a78f9d8ad2f1 Signed-off-by: mraghuwa --- .../global_operations/global_operations_imp.cpp | 3 +-- .../global_operations/global_operations_imp.h | 5 +---- .../linux/os_global_operations_imp.cpp | 5 +++++ .../linux/os_global_operations_imp.h | 3 +++ .../global_operations/os_global_operations.h | 2 ++ .../windows/os_global_operations_imp.cpp | 10 ++++++++++ .../tools/source/sysman/linux/os_sysman_imp.cpp | 11 +++++------ .../tools/source/sysman/linux/os_sysman_imp.h | 2 ++ .../sysman/memory/linux/dg1/os_memory_imp.cpp | 5 +++++ .../sysman/memory/linux/dg1/os_memory_imp.h | 3 +++ .../source/sysman/memory/linux/os_memory_imp.cpp | 12 +++++++++++- .../source/sysman/memory/linux/os_memory_imp.h | 5 +++++ level_zero/tools/source/sysman/memory/memory.cpp | 16 +++++++++------- level_zero/tools/source/sysman/memory/memory.h | 7 +++++-- .../tools/source/sysman/memory/memory_imp.cpp | 5 ++++- .../tools/source/sysman/memory/os_memory.h | 1 + .../sysman/memory/windows/os_memory_imp.cpp | 5 ++++- .../source/sysman/memory/windows/os_memory_imp.h | 2 ++ .../tools/source/sysman/pci/linux/os_pci_imp.cpp | 6 +++--- .../tools/source/sysman/pci/linux/os_pci_imp.h | 1 - level_zero/tools/source/sysman/pci/os_pci.h | 2 +- level_zero/tools/source/sysman/pci/pci_imp.cpp | 2 -- level_zero/tools/source/sysman/pci/pci_imp.h | 6 +----- .../source/sysman/pci/windows/os_pci_imp.cpp | 3 --- level_zero/tools/source/sysman/sysman_imp.cpp | 6 +++--- .../source/sysman/windows/os_sysman_imp.cpp | 11 +++++------ .../tools/source/sysman/windows/os_sysman_imp.h | 3 +++ .../linux/test_zes_global_operations.cpp | 1 - .../sources/sysman/linux/test_sysman.cpp | 6 +++++- .../sources/sysman/pci/linux/test_zes_pci.cpp | 5 ++++- 30 files changed, 103 insertions(+), 51 deletions(-) diff --git a/level_zero/tools/source/sysman/global_operations/global_operations_imp.cpp b/level_zero/tools/source/sysman/global_operations/global_operations_imp.cpp index c3dd1949bd..000b1ec18b 100644 --- a/level_zero/tools/source/sysman/global_operations/global_operations_imp.cpp +++ b/level_zero/tools/source/sysman/global_operations/global_operations_imp.cpp @@ -39,14 +39,13 @@ ze_result_t GlobalOperationsImp::processesGetState(uint32_t *pCount, zes_process } ze_result_t GlobalOperationsImp::deviceGetProperties(zes_device_properties_t *pProperties) { - Device *device = L0::Device::fromHandle(hCoreDevice); + Device *device = pOsGlobalOperations->getDevice(); ze_device_properties_t deviceProperties; device->getProperties(&deviceProperties); sysmanProperties.core = deviceProperties; uint32_t count = 0; device->getSubDevices(&count, nullptr); sysmanProperties.numSubdevices = count; - *pProperties = sysmanProperties; return ZE_RESULT_SUCCESS; } diff --git a/level_zero/tools/source/sysman/global_operations/global_operations_imp.h b/level_zero/tools/source/sysman/global_operations/global_operations_imp.h index 0ff532476e..92e724b9c1 100644 --- a/level_zero/tools/source/sysman/global_operations/global_operations_imp.h +++ b/level_zero/tools/source/sysman/global_operations/global_operations_imp.h @@ -23,13 +23,10 @@ class GlobalOperationsImp : public GlobalOperations, NEO::NonCopyableOrMovableCl ze_result_t reset(ze_bool_t force) override; ze_result_t deviceGetProperties(zes_device_properties_t *pProperties) override; ze_result_t processesGetState(uint32_t *pCount, zes_process_state_t *pProcesses) override; - OsGlobalOperations *pOsGlobalOperations = nullptr; - ze_device_handle_t hCoreDevice = {}; GlobalOperationsImp() = default; - GlobalOperationsImp(OsSysman *pOsSysman, ze_device_handle_t hCoreDevice) : hCoreDevice(hCoreDevice), - pOsSysman(pOsSysman){}; + GlobalOperationsImp(OsSysman *pOsSysman) : pOsSysman(pOsSysman){}; ~GlobalOperationsImp() override; private: diff --git a/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp b/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp index c83cff6692..3152687144 100644 --- a/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp +++ b/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp @@ -44,6 +44,10 @@ void LinuxGlobalOperationsImp::getSerialNumber(char (&serialNumber)[ZES_STRING_P std::strncpy(serialNumber, unknown.c_str(), ZES_STRING_PROPERTY_SIZE); } +Device *LinuxGlobalOperationsImp::getDevice() { + return pDevice; +} + void LinuxGlobalOperationsImp::getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) { std::strncpy(boardNumber, unknown.c_str(), ZES_STRING_PROPERTY_SIZE); } @@ -358,6 +362,7 @@ LinuxGlobalOperationsImp::LinuxGlobalOperationsImp(OsSysman *pOsSysman) { pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess(); pFsAccess = &pLinuxSysmanImp->getFsAccess(); + pDevice = pLinuxSysmanImp->getDeviceHandle(); } OsGlobalOperations *OsGlobalOperations::create(OsSysman *pOsSysman) { diff --git a/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.h b/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.h index d925a3285d..9d65f20a71 100644 --- a/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.h +++ b/level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.h @@ -11,6 +11,7 @@ namespace L0 { class SysfsAccess; +struct Device; class LinuxGlobalOperationsImp : public OsGlobalOperations, NEO::NonCopyableOrMovableClass { public: @@ -20,6 +21,7 @@ class LinuxGlobalOperationsImp : public OsGlobalOperations, NEO::NonCopyableOrMo void getModelName(char (&modelName)[ZES_STRING_PROPERTY_SIZE]) override; void getVendorName(char (&vendorName)[ZES_STRING_PROPERTY_SIZE]) override; void getDriverVersion(char (&driverVersion)[ZES_STRING_PROPERTY_SIZE]) override; + Device *getDevice() override; ze_result_t reset(ze_bool_t force) override; ze_result_t scanProcessesState(std::vector &pProcessList) override; LinuxGlobalOperationsImp() = default; @@ -30,6 +32,7 @@ class LinuxGlobalOperationsImp : public OsGlobalOperations, NEO::NonCopyableOrMo FsAccess *pFsAccess = nullptr; SysfsAccess *pSysfsAccess = nullptr; LinuxSysmanImp *pLinuxSysmanImp = nullptr; + Device *pDevice = nullptr; private: static const std::string deviceDir; diff --git a/level_zero/tools/source/sysman/global_operations/os_global_operations.h b/level_zero/tools/source/sysman/global_operations/os_global_operations.h index 8fe96dcfc8..652139a546 100644 --- a/level_zero/tools/source/sysman/global_operations/os_global_operations.h +++ b/level_zero/tools/source/sysman/global_operations/os_global_operations.h @@ -7,6 +7,7 @@ #pragma once +#include "level_zero/core/source/device/device.h" #include "level_zero/tools/source/sysman/os_sysman.h" #include @@ -23,6 +24,7 @@ class OsGlobalOperations { virtual void getModelName(char (&modelName)[ZES_STRING_PROPERTY_SIZE]) = 0; virtual void getVendorName(char (&vendorName)[ZES_STRING_PROPERTY_SIZE]) = 0; virtual void getDriverVersion(char (&driverVersion)[ZES_STRING_PROPERTY_SIZE]) = 0; + virtual Device *getDevice() = 0; virtual ze_result_t reset(ze_bool_t force) = 0; virtual ze_result_t scanProcessesState(std::vector &pProcessList) = 0; static OsGlobalOperations *create(OsSysman *pOsSysman); diff --git a/level_zero/tools/source/sysman/global_operations/windows/os_global_operations_imp.cpp b/level_zero/tools/source/sysman/global_operations/windows/os_global_operations_imp.cpp index baa8ce4f72..c456e26807 100644 --- a/level_zero/tools/source/sysman/global_operations/windows/os_global_operations_imp.cpp +++ b/level_zero/tools/source/sysman/global_operations/windows/os_global_operations_imp.cpp @@ -18,6 +18,7 @@ class WddmGlobalOperationsImp : public OsGlobalOperations { void getModelName(char (&modelName)[ZES_STRING_PROPERTY_SIZE]) override; void getVendorName(char (&vendorName)[ZES_STRING_PROPERTY_SIZE]) override; void getDriverVersion(char (&driverVersion)[ZES_STRING_PROPERTY_SIZE]) override; + Device *getDevice() override; ze_result_t reset(ze_bool_t force) override; ze_result_t scanProcessesState(std::vector &pProcessList) override; @@ -27,8 +28,15 @@ class WddmGlobalOperationsImp : public OsGlobalOperations { // Don't allow copies of the WddmGlobalOperationsImp object WddmGlobalOperationsImp(const WddmGlobalOperationsImp &obj) = delete; WddmGlobalOperationsImp &operator=(const WddmGlobalOperationsImp &obj) = delete; + + private: + Device *pDevice = nullptr; }; +Device *WddmGlobalOperationsImp::getDevice() { + return pDevice; +} + void WddmGlobalOperationsImp::getSerialNumber(char (&serialNumber)[ZES_STRING_PROPERTY_SIZE]) { } @@ -56,6 +64,8 @@ ze_result_t WddmGlobalOperationsImp::scanProcessesState(std::vector(pOsSysman); + pDevice = pWddmSysmanImp->getDeviceHandle(); } OsGlobalOperations *OsGlobalOperations::create(OsSysman *pOsSysman) { diff --git a/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp b/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp index c9123bc3d9..2eb1ad881c 100644 --- a/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp +++ b/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp @@ -20,12 +20,7 @@ ze_result_t LinuxSysmanImp::init() { pProcfsAccess = ProcfsAccess::create(); UNRECOVERABLE_IF(nullptr == pProcfsAccess); - Device *pDevice = nullptr; - if (pParentSysmanDeviceImp != nullptr) { - pDevice = Device::fromHandle(pParentSysmanDeviceImp->hCoreDevice); - } else { - return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; - } + pDevice = Device::fromHandle(pParentSysmanDeviceImp->hCoreDevice); UNRECOVERABLE_IF(nullptr == pDevice); NEO::OSInterface &OsInterface = pDevice->getOsInterface(); pDrm = OsInterface.get()->getDrm(); @@ -70,6 +65,10 @@ NEO::Drm &LinuxSysmanImp::getDrm() { return *pDrm; } +Device *LinuxSysmanImp::getDeviceHandle() { + return pDevice; +} + PlatformMonitoringTech &LinuxSysmanImp::getPlatformMonitoringTechAccess() { UNRECOVERABLE_IF(nullptr == pPmt); return *pPmt; diff --git a/level_zero/tools/source/sysman/linux/os_sysman_imp.h b/level_zero/tools/source/sysman/linux/os_sysman_imp.h index 357e679a4b..4af0227957 100644 --- a/level_zero/tools/source/sysman/linux/os_sysman_imp.h +++ b/level_zero/tools/source/sysman/linux/os_sysman_imp.h @@ -31,6 +31,7 @@ class LinuxSysmanImp : public OsSysman, NEO::NonCopyableOrMovableClass { SysfsAccess &getSysfsAccess(); NEO::Drm &getDrm(); PlatformMonitoringTech &getPlatformMonitoringTechAccess(); + Device *getDeviceHandle(); protected: XmlParser *pXmlParser = nullptr; @@ -39,6 +40,7 @@ class LinuxSysmanImp : public OsSysman, NEO::NonCopyableOrMovableClass { SysfsAccess *pSysfsAccess = nullptr; PlatformMonitoringTech *pPmt = nullptr; NEO::Drm *pDrm = nullptr; + Device *pDevice = nullptr; private: LinuxSysmanImp() = delete; diff --git a/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.cpp b/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.cpp index 4d4ca07192..2671370805 100644 --- a/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.cpp +++ b/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.cpp @@ -16,6 +16,11 @@ namespace L0 { LinuxMemoryImp::LinuxMemoryImp(OsSysman *pOsSysman) { LinuxSysmanImp *pLinuxSysmanImp = static_cast(pOsSysman); pDrm = &pLinuxSysmanImp->getDrm(); + pDevice = pLinuxSysmanImp->getDeviceHandle(); +} + +bool LinuxMemoryImp::isMemoryModuleSupported() { + return pDevice->getDriverHandle()->getMemoryManager()->isLocalMemorySupported(pDevice->getRootDeviceIndex()); } ze_result_t LinuxMemoryImp::getProperties(zes_mem_properties_t *pProperties) { diff --git a/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.h b/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.h index 1dbfc5b426..c0c607e508 100644 --- a/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.h +++ b/level_zero/tools/source/sysman/memory/linux/dg1/os_memory_imp.h @@ -14,17 +14,20 @@ namespace L0 { class SysfsAccess; +struct Device; class LinuxMemoryImp : public OsMemory, NEO::NonCopyableOrMovableClass { public: ze_result_t getProperties(zes_mem_properties_t *pProperties) override; ze_result_t getBandwidth(zes_mem_bandwidth_t *pBandwidth) override; ze_result_t getState(zes_mem_state_t *pState) override; + bool isMemoryModuleSupported() override; LinuxMemoryImp(OsSysman *pOsSysman); LinuxMemoryImp() = default; ~LinuxMemoryImp() override = default; protected: NEO::Drm *pDrm = nullptr; + Device *pDevice = nullptr; }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/memory/linux/os_memory_imp.cpp b/level_zero/tools/source/sysman/memory/linux/os_memory_imp.cpp index 8e9412959d..925ffe6c80 100644 --- a/level_zero/tools/source/sysman/memory/linux/os_memory_imp.cpp +++ b/level_zero/tools/source/sysman/memory/linux/os_memory_imp.cpp @@ -7,8 +7,18 @@ #include "level_zero/tools/source/sysman/memory/linux/os_memory_imp.h" +#include "sysman/linux/os_sysman_imp.h" + namespace L0 { +LinuxMemoryImp::LinuxMemoryImp(OsSysman *pOsSysman) { + LinuxSysmanImp *pLinuxSysmanImp = static_cast(pOsSysman); + pDevice = pLinuxSysmanImp->getDeviceHandle(); +} +bool LinuxMemoryImp::isMemoryModuleSupported() { + return pDevice->getDriverHandle()->getMemoryManager()->isLocalMemorySupported(pDevice->getRootDeviceIndex()); +} + ze_result_t LinuxMemoryImp::getProperties(zes_mem_properties_t *pProperties) { return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; } @@ -22,7 +32,7 @@ ze_result_t LinuxMemoryImp::getState(zes_mem_state_t *pState) { } OsMemory *OsMemory::create(OsSysman *pOsSysman) { - LinuxMemoryImp *pLinuxMemoryImp = new LinuxMemoryImp(); + LinuxMemoryImp *pLinuxMemoryImp = new LinuxMemoryImp(pOsSysman); return static_cast(pLinuxMemoryImp); } diff --git a/level_zero/tools/source/sysman/memory/linux/os_memory_imp.h b/level_zero/tools/source/sysman/memory/linux/os_memory_imp.h index 8786b37fe0..2215a091f5 100644 --- a/level_zero/tools/source/sysman/memory/linux/os_memory_imp.h +++ b/level_zero/tools/source/sysman/memory/linux/os_memory_imp.h @@ -13,14 +13,19 @@ namespace L0 { class SysfsAccess; +struct Device; class LinuxMemoryImp : public OsMemory, NEO::NonCopyableOrMovableClass { public: ze_result_t getProperties(zes_mem_properties_t *pProperties) override; ze_result_t getBandwidth(zes_mem_bandwidth_t *pBandwidth) override; ze_result_t getState(zes_mem_state_t *pState) override; + bool isMemoryModuleSupported() override; LinuxMemoryImp(OsSysman *pOsSysman); LinuxMemoryImp() = default; ~LinuxMemoryImp() override = default; + + protected: + Device *pDevice = nullptr; }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/memory/memory.cpp b/level_zero/tools/source/sysman/memory/memory.cpp index 5617a5af30..f35f021798 100644 --- a/level_zero/tools/source/sysman/memory/memory.cpp +++ b/level_zero/tools/source/sysman/memory/memory.cpp @@ -19,15 +19,17 @@ MemoryHandleContext::~MemoryHandleContext() { } } -ze_result_t MemoryHandleContext::init() { - Device *device = L0::Device::fromHandle(hCoreDevice); - - isLmemSupported = device->getDriverHandle()->getMemoryManager()->isLocalMemorySupported(device->getRootDeviceIndex()); - - if (isLmemSupported) { - Memory *pMemory = new MemoryImp(pOsSysman); +void MemoryHandleContext::createHandle() { + Memory *pMemory = new MemoryImp(pOsSysman); + if (pMemory->initSuccess == true) { handleList.push_back(pMemory); + } else { + delete pMemory; } +} + +ze_result_t MemoryHandleContext::init() { + createHandle(); return ZE_RESULT_SUCCESS; } diff --git a/level_zero/tools/source/sysman/memory/memory.h b/level_zero/tools/source/sysman/memory/memory.h index a7818b5b43..f358a9e879 100644 --- a/level_zero/tools/source/sysman/memory/memory.h +++ b/level_zero/tools/source/sysman/memory/memory.h @@ -28,10 +28,11 @@ class Memory : _zes_mem_handle_t { return static_cast(handle); } inline zes_mem_handle_t toHandle() { return this; } + bool initSuccess = false; }; struct MemoryHandleContext { - MemoryHandleContext(OsSysman *pOsSysman, ze_device_handle_t hCoreDevice) : pOsSysman(pOsSysman), hCoreDevice(hCoreDevice){}; + MemoryHandleContext(OsSysman *pOsSysman) : pOsSysman(pOsSysman){}; ~MemoryHandleContext(); ze_result_t init(); @@ -41,7 +42,9 @@ struct MemoryHandleContext { OsSysman *pOsSysman = nullptr; bool isLmemSupported = false; std::vector handleList = {}; - ze_device_handle_t hCoreDevice; + + private: + void createHandle(); }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/memory/memory_imp.cpp b/level_zero/tools/source/sysman/memory/memory_imp.cpp index 3cf490a052..241376ed1b 100644 --- a/level_zero/tools/source/sysman/memory/memory_imp.cpp +++ b/level_zero/tools/source/sysman/memory/memory_imp.cpp @@ -23,7 +23,10 @@ ze_result_t MemoryImp::memoryGetProperties(zes_mem_properties_t *pProperties) { } void MemoryImp::init() { - pOsMemory->getProperties(&memoryProperties); + this->initSuccess = pOsMemory->isMemoryModuleSupported(); + if (this->initSuccess == true) { + pOsMemory->getProperties(&memoryProperties); + } } MemoryImp::MemoryImp(OsSysman *pOsSysman) { diff --git a/level_zero/tools/source/sysman/memory/os_memory.h b/level_zero/tools/source/sysman/memory/os_memory.h index 6b4ac07d5e..a2d6101fd7 100644 --- a/level_zero/tools/source/sysman/memory/os_memory.h +++ b/level_zero/tools/source/sysman/memory/os_memory.h @@ -17,6 +17,7 @@ class OsMemory { virtual ze_result_t getProperties(zes_mem_properties_t *pProperties) = 0; virtual ze_result_t getBandwidth(zes_mem_bandwidth_t *pBandwidth) = 0; virtual ze_result_t getState(zes_mem_state_t *pState) = 0; + virtual bool isMemoryModuleSupported() = 0; static OsMemory *create(OsSysman *pOsSysman); virtual ~OsMemory() {} }; diff --git a/level_zero/tools/source/sysman/memory/windows/os_memory_imp.cpp b/level_zero/tools/source/sysman/memory/windows/os_memory_imp.cpp index 54990f55ed..366a6f99a0 100644 --- a/level_zero/tools/source/sysman/memory/windows/os_memory_imp.cpp +++ b/level_zero/tools/source/sysman/memory/windows/os_memory_imp.cpp @@ -8,7 +8,9 @@ #include "sysman/memory/windows/os_memory_imp.h" namespace L0 { - +bool WddmMemoryImp::isMemoryModuleSupported() { + return pDevice->getDriverHandle()->getMemoryManager()->isLocalMemorySupported(pDevice->getRootDeviceIndex()); +} ze_result_t WddmMemoryImp::getProperties(zes_mem_properties_t *pProperties) { ze_result_t status = ZE_RESULT_SUCCESS; uint32_t valueSmall = 0; @@ -177,6 +179,7 @@ ze_result_t WddmMemoryImp::getState(zes_mem_state_t *pState) { WddmMemoryImp::WddmMemoryImp(OsSysman *pOsSysman) { WddmSysmanImp *pWddmSysmanImp = static_cast(pOsSysman); pKmdSysManager = &pWddmSysmanImp->getKmdSysManager(); + pDevice = pWddmSysmanImp->getDeviceHandle(); } OsMemory *OsMemory::create(OsSysman *pOsSysman) { diff --git a/level_zero/tools/source/sysman/memory/windows/os_memory_imp.h b/level_zero/tools/source/sysman/memory/windows/os_memory_imp.h index 482e85049c..235a94fcd5 100644 --- a/level_zero/tools/source/sysman/memory/windows/os_memory_imp.h +++ b/level_zero/tools/source/sysman/memory/windows/os_memory_imp.h @@ -21,12 +21,14 @@ class WddmMemoryImp : public OsMemory, NEO::NonCopyableOrMovableClass { ze_result_t getProperties(zes_mem_properties_t *pProperties) override; ze_result_t getBandwidth(zes_mem_bandwidth_t *pBandwidth) override; ze_result_t getState(zes_mem_state_t *pState) override; + bool isMemoryModuleSupported() override; WddmMemoryImp(OsSysman *pOsSysman); WddmMemoryImp() = default; ~WddmMemoryImp() override = default; protected: KmdSysManager *pKmdSysManager = nullptr; + Device *pDevice = nullptr; }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/pci/linux/os_pci_imp.cpp b/level_zero/tools/source/sysman/pci/linux/os_pci_imp.cpp index ab86c62ee4..72162ea50a 100644 --- a/level_zero/tools/source/sysman/pci/linux/os_pci_imp.cpp +++ b/level_zero/tools/source/sysman/pci/linux/os_pci_imp.cpp @@ -31,9 +31,7 @@ std::string changeDirNLevelsUp(std::string realRootPath, uint8_t nLevel) { } return realRootPath; } -void LinuxPciImp::setLmemSupport(bool val) { - isLmemSupported = val; -} + ze_result_t LinuxPciImp::getPciBdf(std::string &bdf) { std::string bdfDir; ze_result_t result = pSysfsAccess->readSymLink(deviceDir, bdfDir); @@ -182,6 +180,8 @@ LinuxPciImp::LinuxPciImp(OsSysman *pOsSysman) { LinuxSysmanImp *pLinuxSysmanImp = static_cast(pOsSysman); pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess(); pfsAccess = &pLinuxSysmanImp->getFsAccess(); + Device *pDevice = pLinuxSysmanImp->getDeviceHandle(); + isLmemSupported = pDevice->getDriverHandle()->getMemoryManager()->isLocalMemorySupported(pDevice->getRootDeviceIndex()); } OsPci *OsPci::create(OsSysman *pOsSysman) { diff --git a/level_zero/tools/source/sysman/pci/linux/os_pci_imp.h b/level_zero/tools/source/sysman/pci/linux/os_pci_imp.h index 63b8ad2244..76002fe2e6 100644 --- a/level_zero/tools/source/sysman/pci/linux/os_pci_imp.h +++ b/level_zero/tools/source/sysman/pci/linux/os_pci_imp.h @@ -21,7 +21,6 @@ class LinuxPciImp : public OsPci, NEO::NonCopyableOrMovableClass { ze_result_t getMaxLinkSpeed(double &maxLinkSpeed) override; ze_result_t getMaxLinkWidth(int32_t &maxLinkwidth) override; ze_result_t getLinkGen(int32_t &linkGen) override; - void setLmemSupport(bool val) override; ze_result_t initializeBarProperties(std::vector &pBarProperties) override; LinuxPciImp() = default; LinuxPciImp(OsSysman *pOsSysman); diff --git a/level_zero/tools/source/sysman/pci/os_pci.h b/level_zero/tools/source/sysman/pci/os_pci.h index 8b69d5607a..65929b481d 100644 --- a/level_zero/tools/source/sysman/pci/os_pci.h +++ b/level_zero/tools/source/sysman/pci/os_pci.h @@ -14,6 +14,7 @@ #include namespace L0 { +std::string changeDirNLevelsUp(std::string realRootPath, uint8_t nLevel); class OsPci { public: @@ -21,7 +22,6 @@ class OsPci { virtual ze_result_t getMaxLinkSpeed(double &maxLinkSpeed) = 0; virtual ze_result_t getMaxLinkWidth(int32_t &maxLinkWidth) = 0; virtual ze_result_t getLinkGen(int32_t &linkGen) = 0; - virtual void setLmemSupport(bool val) = 0; virtual ze_result_t initializeBarProperties(std::vector &pBarProperties) = 0; static OsPci *create(OsSysman *pOsSysman); virtual ~OsPci() = default; diff --git a/level_zero/tools/source/sysman/pci/pci_imp.cpp b/level_zero/tools/source/sysman/pci/pci_imp.cpp index c185ded80c..38ba05226d 100644 --- a/level_zero/tools/source/sysman/pci/pci_imp.cpp +++ b/level_zero/tools/source/sysman/pci/pci_imp.cpp @@ -66,8 +66,6 @@ void PciImp::init() { pOsPci = OsPci::create(pOsSysman); } UNRECOVERABLE_IF(nullptr == pOsPci); - Device *device = L0::Device::fromHandle(hCoreDevice); - pOsPci->setLmemSupport(device->getDriverHandle()->getMemoryManager()->isLocalMemorySupported(device->getRootDeviceIndex())); std::string bdf; pOsPci->getPciBdf(bdf); if (bdf.empty()) { diff --git a/level_zero/tools/source/sysman/pci/pci_imp.h b/level_zero/tools/source/sysman/pci/pci_imp.h index e8d6d41c5f..251ce5ca02 100644 --- a/level_zero/tools/source/sysman/pci/pci_imp.h +++ b/level_zero/tools/source/sysman/pci/pci_imp.h @@ -26,13 +26,9 @@ class PciImp : public Pci, NEO::NonCopyableOrMovableClass { ze_result_t pciGetInitializedBars(uint32_t *pCount, zes_pci_bar_properties_t *pProperties) override; PciImp() = default; - PciImp(OsSysman *pOsSysman, ze_device_handle_t hDevice) : pOsSysman(pOsSysman) { - pOsPci = nullptr; - hCoreDevice = hDevice; - }; + PciImp(OsSysman *pOsSysman) : pOsSysman(pOsSysman){}; ~PciImp() override; OsPci *pOsPci = nullptr; - ze_device_handle_t hCoreDevice = {}; private: OsSysman *pOsSysman = nullptr; diff --git a/level_zero/tools/source/sysman/pci/windows/os_pci_imp.cpp b/level_zero/tools/source/sysman/pci/windows/os_pci_imp.cpp index 4489a880f7..51b1605efd 100644 --- a/level_zero/tools/source/sysman/pci/windows/os_pci_imp.cpp +++ b/level_zero/tools/source/sysman/pci/windows/os_pci_imp.cpp @@ -16,7 +16,6 @@ class WddmPciImp : public OsPci { ze_result_t getMaxLinkSpeed(double &maxLinkSpeed) override; ze_result_t getMaxLinkWidth(int32_t &maxLinkwidth) override; ze_result_t getLinkGen(int32_t &linkGen) override; - void setLmemSupport(bool val) override; ze_result_t initializeBarProperties(std::vector &pBarProperties) override; ~WddmPciImp() override = default; }; @@ -37,8 +36,6 @@ ze_result_t WddmPciImp::getLinkGen(int32_t &linkGen) { return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; } -void WddmPciImp::setLmemSupport(bool val) {} - ze_result_t WddmPciImp::initializeBarProperties(std::vector &pBarProperties) { return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; } diff --git a/level_zero/tools/source/sysman/sysman_imp.cpp b/level_zero/tools/source/sysman/sysman_imp.cpp index 3d1197e28d..c8fb45e769 100644 --- a/level_zero/tools/source/sysman/sysman_imp.cpp +++ b/level_zero/tools/source/sysman/sysman_imp.cpp @@ -21,7 +21,7 @@ SysmanDeviceImp::SysmanDeviceImp(ze_device_handle_t hDevice) { hCoreDevice = hDevice; pOsSysman = OsSysman::create(this); UNRECOVERABLE_IF(nullptr == pOsSysman); - pPci = new PciImp(pOsSysman, hCoreDevice); + pPci = new PciImp(pOsSysman); pPowerHandleContext = new PowerHandleContext(pOsSysman); pFrequencyHandleContext = new FrequencyHandleContext(pOsSysman); pFabricPortHandleContext = new FabricPortHandleContext(pOsSysman); @@ -30,8 +30,8 @@ SysmanDeviceImp::SysmanDeviceImp(ze_device_handle_t hDevice) { pEngineHandleContext = new EngineHandleContext(pOsSysman); pSchedulerHandleContext = new SchedulerHandleContext(pOsSysman); pRasHandleContext = new RasHandleContext(pOsSysman); - pMemoryHandleContext = new MemoryHandleContext(pOsSysman, hCoreDevice); - pGlobalOperations = new GlobalOperationsImp(pOsSysman, hCoreDevice); + pMemoryHandleContext = new MemoryHandleContext(pOsSysman); + pGlobalOperations = new GlobalOperationsImp(pOsSysman); } SysmanDeviceImp::~SysmanDeviceImp() { diff --git a/level_zero/tools/source/sysman/windows/os_sysman_imp.cpp b/level_zero/tools/source/sysman/windows/os_sysman_imp.cpp index 3e302436de..441d7a653b 100644 --- a/level_zero/tools/source/sysman/windows/os_sysman_imp.cpp +++ b/level_zero/tools/source/sysman/windows/os_sysman_imp.cpp @@ -10,12 +10,7 @@ namespace L0 { ze_result_t WddmSysmanImp::init() { - Device *pDevice = nullptr; - if (pParentSysmanDeviceImp != nullptr) { - pDevice = Device::fromHandle(pParentSysmanDeviceImp->hCoreDevice); - } else { - return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; - } + pDevice = Device::fromHandle(pParentSysmanDeviceImp->hCoreDevice); UNRECOVERABLE_IF(nullptr == pDevice); NEO::OSInterface &OsInterface = pDevice->getOsInterface(); @@ -26,6 +21,10 @@ ze_result_t WddmSysmanImp::init() { return ZE_RESULT_SUCCESS; } +Device *WddmSysmanImp::getDeviceHandle() { + return pDevice; +} + NEO::Wddm &WddmSysmanImp::getWddm() { UNRECOVERABLE_IF(nullptr == pWddm); return *pWddm; diff --git a/level_zero/tools/source/sysman/windows/os_sysman_imp.h b/level_zero/tools/source/sysman/windows/os_sysman_imp.h index a2e563cfca..543ab23e1a 100644 --- a/level_zero/tools/source/sysman/windows/os_sysman_imp.h +++ b/level_zero/tools/source/sysman/windows/os_sysman_imp.h @@ -10,6 +10,7 @@ #include "shared/source/os_interface/windows/os_interface.h" #include "shared/source/os_interface/windows/wddm/wddm.h" +#include "level_zero/core/source/device/device.h" #include "level_zero/tools/source/sysman/sysman_imp.h" #include "level_zero/tools/source/sysman/windows/kmd_sys.h" #include "level_zero/tools/source/sysman/windows/kmd_sys_manager.h" @@ -25,9 +26,11 @@ class WddmSysmanImp : public OsSysman, NEO::NonCopyableOrMovableClass { KmdSysManager &getKmdSysManager(); NEO::Wddm &getWddm(); + Device *getDeviceHandle(); protected: KmdSysManager *pKmdSysManager = nullptr; + Device *pDevice = nullptr; private: SysmanDeviceImp *pParentSysmanDeviceImp = nullptr; diff --git a/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/test_zes_global_operations.cpp b/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/test_zes_global_operations.cpp index 91b89a6aae..1a68ec12ef 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/test_zes_global_operations.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/test_zes_global_operations.cpp @@ -58,7 +58,6 @@ class SysmanGlobalOperationsFixture : public SysmanDeviceFixture { .WillByDefault(::testing::Invoke(pFsAccess.get(), &Mock::getValAgamaFile)); pGlobalOperationsImp = static_cast(pSysmanDeviceImp->pGlobalOperations); - pGlobalOperationsImp->hCoreDevice = device->toHandle(); pOsGlobalOperationsPrev = pGlobalOperationsImp->pOsGlobalOperations; pGlobalOperationsImp->pOsGlobalOperations = nullptr; pGlobalOperationsImp->init(); diff --git a/level_zero/tools/test/unit_tests/sources/sysman/linux/test_sysman.cpp b/level_zero/tools/test/unit_tests/sources/sysman/linux/test_sysman.cpp index b320d152ff..33736ff573 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/linux/test_sysman.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/linux/test_sysman.cpp @@ -71,5 +71,9 @@ TEST_F(SysmanDeviceFixture, GivenPmtHandleWhenCallinggetPlatformMonitoringTechAc EXPECT_EQ(&pLinuxSysmanImp->getPlatformMonitoringTechAccess(), pLinuxSysmanImp->pPmt); } +TEST_F(SysmanDeviceFixture, GivenValidDeviceHandleVerifyThatSameHandleIsRetrievedFromOsSpecificCode) { + EXPECT_EQ(pLinuxSysmanImp->getDeviceHandle(), device); +} + } // namespace ult -} // namespace L0 \ No newline at end of file +} // namespace L0 diff --git a/level_zero/tools/test/unit_tests/sources/sysman/pci/linux/test_zes_pci.cpp b/level_zero/tools/test/unit_tests/sources/sysman/pci/linux/test_zes_pci.cpp index ba1b5a2515..d17c635a2f 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/pci/linux/test_zes_pci.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/pci/linux/test_zes_pci.cpp @@ -91,7 +91,6 @@ class ZesPciFixture : public ::testing::Test { ON_CALL(*pfsAccess.get(), read(_, Matcher(_))) .WillByDefault(::testing::Invoke(pfsAccess.get(), &Mock::getValInt)); pPciImp = static_cast(pSysmanDeviceImp->pPci); - pPciImp->hCoreDevice = device->toHandle(); pOsPciPrev = pPciImp->pOsPci; pPciImp->pOsPci = nullptr; memoryManager->localMemorySupported[0] = 0; @@ -208,5 +207,9 @@ TEST_F(ZesPciFixture, GivenValidSysmanHandleWhenCallingzetSysmanPciGetBarsThenVe } } +TEST_F(ZesPciFixture, GivenValidPathWhileCallingchangeDirNLevelsUpThenReturnedPathIsNLevelUpThenTheCurrentPath) { + std::string testMockRealPath2LevelsUp = changeDirNLevelsUp(mockRealPath, 2); + EXPECT_EQ(testMockRealPath2LevelsUp, mockRealPath2LevelsUp); +} } // namespace ult } // namespace L0