Files
compute-runtime/level_zero/tools/source/sysman/sysman.cpp
Jitendra Sharma 17970ad5e7 Add sysman handles for subdevice only after subdevices are created
Move location of assigning sysman handles, such that sysman handle
will be assigned to device and then assign that sysman handle
to subdevices of that device.

Change-Id: Ia606954a866c491e45803b903c8419ee09b1a939
Signed-off-by: Jitendra Sharma <jitendra.sharma@intel.com>
2020-10-30 09:45:08 +01:00

64 lines
1.9 KiB
C++

/*
* Copyright (C) 2019-2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/tools/source/sysman/sysman.h"
#include "level_zero/core/source/device/device_imp.h"
#include "level_zero/core/source/driver/driver.h"
#include "level_zero/core/source/driver/driver_handle_imp.h"
#include "level_zero/tools/source/sysman/sysman_imp.h"
#include <vector>
namespace L0 {
SysmanDevice *SysmanDeviceHandleContext::init(ze_device_handle_t coreDevice) {
SysmanDeviceImp *sysmanDevice = new SysmanDeviceImp(coreDevice);
UNRECOVERABLE_IF(!sysmanDevice);
sysmanDevice->init();
L0::DeviceImp *device = static_cast<DeviceImp *>(Device::fromHandle(coreDevice));
for (auto &subDevice : device->subDevices) {
static_cast<DeviceImp *>(subDevice)->setSysmanHandle(sysmanDevice);
}
return sysmanDevice;
}
void DeviceImp::setSysmanHandle(SysmanDevice *pSysmanDev) {
pSysmanDevice = pSysmanDev;
}
SysmanDevice *DeviceImp::getSysmanHandle() {
return pSysmanDevice;
}
ze_result_t DriverHandleImp::sysmanEventsListen(
uint32_t timeout,
uint32_t count,
zes_device_handle_t *phDevices,
uint32_t *pNumDeviceEvents,
zes_event_type_flags_t *pEvents) {
bool gotSysmanEvent = false;
auto timeToExitLoop = std::chrono::steady_clock::now() + std::chrono::milliseconds(timeout);
do {
for (uint32_t devIndex = 0; devIndex < count; devIndex++) {
gotSysmanEvent = L0::SysmanDevice::fromHandle(phDevices[devIndex])->deviceEventListen(pEvents[devIndex]);
if (gotSysmanEvent) {
*pNumDeviceEvents = 1;
break;
}
}
if (gotSysmanEvent) {
break;
}
std::this_thread::sleep_for(std::chrono::milliseconds(10)); // Sleep for 10 milliseconds before next check of events
} while ((std::chrono::steady_clock::now() <= timeToExitLoop));
return ZE_RESULT_SUCCESS;
}
} // namespace L0