Skip to content

Commit c0121eb

Browse files
SysMan: fix issues in execution environment restoration.
the scpoe of the restorer is till the LinuxSysmanImp is deleted. Ideally the scope of restorer needs to be function level. Signed-off-by: Vilvaraj, T J Vivek <[email protected]>
1 parent 3dd6e3f commit c0121eb

File tree

6 files changed

+35
-3
lines changed

6 files changed

+35
-3
lines changed

level_zero/tools/source/sysman/diagnostics/linux/os_diagnostics_imp.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ ze_result_t LinuxDiagnosticsImp::waitForQuiescentCompletion() {
105105

106106
ze_result_t LinuxDiagnosticsImp::osRunDiagTestsinFW(zes_diag_result_t *pResult) {
107107
pLinuxSysmanImp->diagnosticsReset = true;
108+
auto pDevice = pLinuxSysmanImp->getDeviceHandle();
109+
auto devicePtr = static_cast<DeviceImp *>(pDevice);
110+
NEO::ExecutionEnvironment *executionEnvironment = devicePtr->getNEODevice()->getExecutionEnvironment();
111+
auto restorer = std::make_unique<L0::ExecutionEnvironmentRefCountRestore>(executionEnvironment);
108112
pLinuxSysmanImp->releaseDeviceResources();
109113
ze_result_t result = gpuProcessCleanup();
110114
if (ZE_RESULT_SUCCESS != result) {

level_zero/tools/source/sysman/global_operations/linux/os_global_operations_imp.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ ze_result_t LinuxGlobalOperationsImp::reset(ze_bool_t force) {
107107
}
108108
ze_device_properties_t deviceProperties = {ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES};
109109
pDevice->getProperties(&deviceProperties);
110+
auto devicePtr = static_cast<DeviceImp *>(pDevice);
111+
NEO::ExecutionEnvironment *executionEnvironment = devicePtr->getNEODevice()->getExecutionEnvironment();
112+
auto restorer = std::make_unique<L0::ExecutionEnvironmentRefCountRestore>(executionEnvironment);
110113
pLinuxSysmanImp->releaseDeviceResources();
111114
std::string resetPath;
112115
std::string resetName;

level_zero/tools/source/sysman/linux/os_sysman_imp.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,6 @@ void LinuxSysmanImp::releaseDeviceResources() {
273273
devicePciBdf = devicePtr->getNEODevice()->getRootDeviceEnvironment().osInterface->getDriverModel()->as<NEO::Drm>()->getPciPath();
274274
rootDeviceIndex = devicePtr->getNEODevice()->getRootDeviceIndex();
275275

276-
restorer = std::make_unique<ExecutionEnvironmentRefCountRestore>(executionEnvironment);
277276
releaseSysmanDeviceResources();
278277
auto device = static_cast<DeviceImp *>(getDeviceHandle());
279278
executionEnvironment = device->getNEODevice()->getExecutionEnvironment();

level_zero/tools/source/sysman/linux/os_sysman_imp.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,12 @@ class LinuxSysmanImp : public OsSysman, NEO::NonCopyableOrMovableClass {
7979
uint32_t rootDeviceIndex = 0u;
8080
NEO::ExecutionEnvironment *executionEnvironment = nullptr;
8181
bool diagnosticsReset = false;
82-
std::unique_ptr<ExecutionEnvironmentRefCountRestore> restorer;
82+
Device *pDevice = nullptr;
8383

8484
protected:
8585
FsAccess *pFsAccess = nullptr;
8686
ProcfsAccess *pProcfsAccess = nullptr;
8787
SysfsAccess *pSysfsAccess = nullptr;
88-
Device *pDevice = nullptr;
8988
NEO::Drm *pDrm = nullptr;
9089
PmuInterface *pPmuInterface = nullptr;
9190
FirmwareUtil *pFwUtilInterface = nullptr;

level_zero/tools/test/unit_tests/sources/sysman/diagnostics/linux/test_zes_sysman_diagnostics.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenRunningDiagnosticsT
226226
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
227227
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
228228

229+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
230+
229231
DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]);
230232
std::unique_ptr<OsDiagnostics> pOsDiagnosticsPrev = std::move(ptestDiagnosticsImp->pOsDiagnostics);
231233
ptestDiagnosticsImp->pOsDiagnostics = std::move(pPublicLinuxDiagnosticsImp);
@@ -250,6 +252,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenRunningDiagnosticsT
250252
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
251253
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
252254

255+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
256+
253257
pMockDiagFwInterface->setDiagResult(ZES_DIAG_RESULT_FORCE_UINT32);
254258
pMockDiagFwInterface->mockFwRunDiagTestsResult = ZE_RESULT_ERROR_NOT_AVAILABLE;
255259
DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]);
@@ -276,6 +280,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenListProcessFailsThe
276280
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
277281
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
278282

283+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
284+
279285
pMockDiagProcfsAccess->setMockError(ZE_RESULT_ERROR_NOT_AVAILABLE);
280286
DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]);
281287
std::unique_ptr<OsDiagnostics> pOsDiagnosticsPrev = std::move(ptestDiagnosticsImp->pOsDiagnostics);
@@ -302,6 +308,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenQuiescentingFailsTh
302308
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
303309
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
304310

311+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
312+
305313
pMockSysfsAccess->setMockError(ZE_RESULT_ERROR_NOT_AVAILABLE);
306314
DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]);
307315
std::unique_ptr<OsDiagnostics> pOsDiagnosticsPrev = std::move(ptestDiagnosticsImp->pOsDiagnostics);
@@ -328,6 +336,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenInvalidateLmemFails
328336
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
329337
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
330338

339+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
340+
331341
pMockSysfsAccess->setMockError(ZE_RESULT_ERROR_NOT_AVAILABLE);
332342
DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]);
333343
std::unique_ptr<OsDiagnostics> pOsDiagnosticsPrev = std::move(ptestDiagnosticsImp->pOsDiagnostics);
@@ -354,6 +364,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenColdResetFailsThenC
354364
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
355365
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
356366

367+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
368+
357369
pMockDiagFwInterface->setDiagResult(ZES_DIAG_RESULT_REBOOT_FOR_REPAIR);
358370
pMockDiagLinuxSysmanImp->setMockError(ZE_RESULT_ERROR_NOT_AVAILABLE);
359371
DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]);
@@ -381,6 +393,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenWarmResetFailsThenC
381393
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
382394
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
383395

396+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
397+
384398
pMockDiagLinuxSysmanImp->setMockError(ZE_RESULT_ERROR_NOT_AVAILABLE);
385399
DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]);
386400
std::unique_ptr<OsDiagnostics> pOsDiagnosticsPrev = std::move(ptestDiagnosticsImp->pOsDiagnostics);
@@ -407,6 +421,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenWarmResetSucceedsAn
407421
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
408422
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
409423

424+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
425+
410426
pMockDiagLinuxSysmanImp->setMockInitDeviceError(ZE_RESULT_ERROR_NOT_AVAILABLE);
411427
DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]);
412428
std::unique_ptr<OsDiagnostics> pOsDiagnosticsPrev = std::move(ptestDiagnosticsImp->pOsDiagnostics);
@@ -433,6 +449,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenColdResetSucceedsAn
433449
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
434450
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
435451

452+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
453+
436454
pMockDiagFwInterface->setDiagResult(ZES_DIAG_RESULT_REBOOT_FOR_REPAIR);
437455
pMockDiagLinuxSysmanImp->setMockInitDeviceError(ZE_RESULT_ERROR_NOT_AVAILABLE);
438456
DiagnosticsImp *ptestDiagnosticsImp = new DiagnosticsImp(pSysmanDeviceImp->pDiagnosticsHandleContext->pOsSysman, mockSupportedDiagTypes[0]);
@@ -460,6 +478,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenGPUProcessCleanupSu
460478
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
461479
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
462480

481+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
482+
463483
pMockDiagProcfsAccess->ourDevicePid = getpid();
464484
pMockDiagLinuxSysmanImp->ourDevicePid = getpid();
465485
pMockDiagLinuxSysmanImp->ourDeviceFd = ::open("/dev/null", 0);
@@ -476,6 +496,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenGPUProcessCleanupFa
476496
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
477497
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
478498

499+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
500+
479501
pMockSysfsAccess->setMockError(ZE_RESULT_ERROR_HANDLE_OBJECT_IN_USE);
480502
pMockDiagProcfsAccess->setMockError(ZE_RESULT_ERROR_NOT_AVAILABLE);
481503
EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pPublicLinuxDiagnosticsImp->waitForQuiescentCompletion());
@@ -490,6 +512,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenQuiescentFailsConti
490512
pPublicLinuxDiagnosticsImp->pFwInterface = pMockDiagFwInterface.get();
491513
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
492514
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
515+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
516+
493517
pPublicLinuxDiagnosticsImp->pSleepFunctionSecs = mockSleepFunctionSecs;
494518

495519
pMockSysfsAccess->setErrorAfterCount(12, ZE_RESULT_ERROR_HANDLE_OBJECT_IN_USE);
@@ -506,6 +530,8 @@ TEST_F(ZesDiagnosticsFixture, GivenValidDiagnosticsHandleWhenInvalidateLmemFails
506530
pPublicLinuxDiagnosticsImp->pProcfsAccess = pMockDiagProcfsAccess.get();
507531
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp = pMockDiagLinuxSysmanImp.get();
508532

533+
pPublicLinuxDiagnosticsImp->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
534+
509535
pMockSysfsAccess->setErrorAfterCount(1, ZE_RESULT_ERROR_NOT_AVAILABLE);
510536
EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pPublicLinuxDiagnosticsImp->waitForQuiescentCompletion());
511537
}

level_zero/tools/test/unit_tests/sources/sysman/global_operations/linux/test_zes_global_operations.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,7 @@ TEST_F(SysmanGlobalOperationsFixture, GivenDeviceIsNotWedgedWhenCallingGetDevice
409409
TEST_F(SysmanGlobalOperationsFixture, GivenForceTrueWhenCallingResetThenSuccessIsReturned) {
410410
pGlobalOperationsImp->init();
411411
static_cast<PublicLinuxGlobalOperationsImp *>(pGlobalOperationsImp->pOsGlobalOperations)->pLinuxSysmanImp = pMockGlobalOpsLinuxSysmanImp.get();
412+
static_cast<PublicLinuxGlobalOperationsImp *>(pGlobalOperationsImp->pOsGlobalOperations)->pLinuxSysmanImp->pDevice = pLinuxSysmanImp->getDeviceHandle();
412413
ze_result_t result = zesDeviceReset(device, true);
413414
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
414415
}

0 commit comments

Comments
 (0)