Skip to content

Commit d139d30

Browse files
L0Debug - extract memory access params validation
- remove duplication of code by moving common code to DebugSessionImp Signed-off-by: Mateusz Hoppe <[email protected]>
1 parent ca4ecdf commit d139d30

File tree

4 files changed

+19
-26
lines changed

4 files changed

+19
-26
lines changed

level_zero/tools/source/debug/debug_session_imp.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1058,7 +1058,7 @@ ze_result_t DebugSessionImp::writeRegistersImp(ze_device_thread_t thread, uint32
10581058
return registersAccessHelper(allThreads[convertToThreadId(thread)].get(), regdesc, start, count, pRegisterValues, true);
10591059
}
10601060

1061-
bool DebugSessionImp::isValidGpuAddress(uint64_t address) {
1061+
bool DebugSessionImp::isValidGpuAddress(uint64_t address) const {
10621062
auto gmmHelper = connectedDevice->getNEODevice()->getGmmHelper();
10631063
auto decanonizedAddress = gmmHelper->decanonize(address);
10641064
bool validAddress = gmmHelper->isValidCanonicalGpuAddress(address);
@@ -1069,4 +1069,16 @@ bool DebugSessionImp::isValidGpuAddress(uint64_t address) {
10691069
return false;
10701070
}
10711071

1072+
ze_result_t DebugSessionImp::validateThreadAndDescForMemoryAccess(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc) {
1073+
if (!isValidGpuAddress(desc->address)) {
1074+
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
1075+
}
1076+
1077+
ze_result_t status = sanityMemAccessThreadCheck(thread, desc);
1078+
if (status != ZE_RESULT_SUCCESS) {
1079+
return status;
1080+
}
1081+
return ZE_RESULT_SUCCESS;
1082+
}
1083+
10721084
} // namespace L0

level_zero/tools/source/debug/debug_session_imp.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ struct DebugSessionImp : DebugSession {
5454

5555
virtual ze_result_t readGpuMemory(uint64_t memoryHandle, char *output, size_t size, uint64_t gpuVa) = 0;
5656
virtual ze_result_t writeGpuMemory(uint64_t memoryHandle, const char *input, size_t size, uint64_t gpuVa) = 0;
57+
ze_result_t validateThreadAndDescForMemoryAccess(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc);
5758

5859
virtual void enqueueApiEvent(zet_debug_event_t &debugEvent) = 0;
5960
virtual bool readSystemRoutineIdent(EuThread *thread, uint64_t vmHandle, SIP::sr_ident &srMagic) = 0;
@@ -99,7 +100,7 @@ struct DebugSessionImp : DebugSession {
99100
}
100101
}
101102

102-
bool isValidGpuAddress(uint64_t address);
103+
bool isValidGpuAddress(uint64_t address) const;
103104

104105
MOCKABLE_VIRTUAL int64_t getTimeDifferenceMilliseconds(std::chrono::high_resolution_clock::time_point time) {
105106
auto now = std::chrono::high_resolution_clock::now();

level_zero/tools/source/debug/linux/prelim/debug_session.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,12 +1263,7 @@ ze_result_t DebugSessionLinux::readMemory(ze_device_thread_t thread, const zet_d
12631263
return ZE_RESULT_ERROR_UNINITIALIZED;
12641264
}
12651265

1266-
if (!isValidGpuAddress(desc->address)) {
1267-
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
1268-
}
1269-
1270-
ze_result_t status = ZE_RESULT_ERROR_UNINITIALIZED;
1271-
status = sanityMemAccessThreadCheck(thread, desc);
1266+
ze_result_t status = validateThreadAndDescForMemoryAccess(thread, desc);
12721267
if (status != ZE_RESULT_SUCCESS) {
12731268
return status;
12741269
}
@@ -1333,12 +1328,7 @@ ze_result_t DebugSessionLinux::writeMemory(ze_device_thread_t thread, const zet_
13331328
return ZE_RESULT_ERROR_UNINITIALIZED;
13341329
}
13351330

1336-
if (!isValidGpuAddress(desc->address)) {
1337-
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
1338-
}
1339-
1340-
ze_result_t status = ZE_RESULT_ERROR_UNINITIALIZED;
1341-
status = sanityMemAccessThreadCheck(thread, desc);
1331+
ze_result_t status = validateThreadAndDescForMemoryAccess(thread, desc);
13421332
if (status != ZE_RESULT_SUCCESS) {
13431333
return status;
13441334
}

level_zero/tools/source/debug/windows/debug_session.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -338,12 +338,7 @@ ze_result_t DebugSessionWindows::readMemory(ze_device_thread_t thread, const zet
338338
return ZE_RESULT_ERROR_UNINITIALIZED;
339339
}
340340

341-
if (!isValidGpuAddress(desc->address)) {
342-
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
343-
}
344-
345-
ze_result_t status = ZE_RESULT_ERROR_UNINITIALIZED;
346-
status = sanityMemAccessThreadCheck(thread, desc);
341+
ze_result_t status = validateThreadAndDescForMemoryAccess(thread, desc);
347342
if (status != ZE_RESULT_SUCCESS) {
348343
return status;
349344
}
@@ -376,12 +371,7 @@ ze_result_t DebugSessionWindows::writeMemory(ze_device_thread_t thread, const ze
376371
return ZE_RESULT_ERROR_UNINITIALIZED;
377372
}
378373

379-
if (!isValidGpuAddress(desc->address)) {
380-
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
381-
}
382-
383-
ze_result_t status = ZE_RESULT_ERROR_UNINITIALIZED;
384-
status = sanityMemAccessThreadCheck(thread, desc);
374+
ze_result_t status = validateThreadAndDescForMemoryAccess(thread, desc);
385375
if (status != ZE_RESULT_SUCCESS) {
386376
return status;
387377
}

0 commit comments

Comments
 (0)