L0Debug - extract memory access params validation

- remove duplication of code by moving common code
to DebugSessionImp

Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
Mateusz Hoppe
2022-07-13 16:05:36 +00:00
committed by Compute-Runtime-Automation
parent ca4ecdfb06
commit d139d307f0
4 changed files with 19 additions and 26 deletions

View File

@@ -1058,7 +1058,7 @@ ze_result_t DebugSessionImp::writeRegistersImp(ze_device_thread_t thread, uint32
return registersAccessHelper(allThreads[convertToThreadId(thread)].get(), regdesc, start, count, pRegisterValues, true);
}
bool DebugSessionImp::isValidGpuAddress(uint64_t address) {
bool DebugSessionImp::isValidGpuAddress(uint64_t address) const {
auto gmmHelper = connectedDevice->getNEODevice()->getGmmHelper();
auto decanonizedAddress = gmmHelper->decanonize(address);
bool validAddress = gmmHelper->isValidCanonicalGpuAddress(address);
@@ -1069,4 +1069,16 @@ bool DebugSessionImp::isValidGpuAddress(uint64_t address) {
return false;
}
ze_result_t DebugSessionImp::validateThreadAndDescForMemoryAccess(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc) {
if (!isValidGpuAddress(desc->address)) {
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
}
ze_result_t status = sanityMemAccessThreadCheck(thread, desc);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
return ZE_RESULT_SUCCESS;
}
} // namespace L0

View File

@@ -54,6 +54,7 @@ struct DebugSessionImp : DebugSession {
virtual ze_result_t readGpuMemory(uint64_t memoryHandle, char *output, size_t size, uint64_t gpuVa) = 0;
virtual ze_result_t writeGpuMemory(uint64_t memoryHandle, const char *input, size_t size, uint64_t gpuVa) = 0;
ze_result_t validateThreadAndDescForMemoryAccess(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc);
virtual void enqueueApiEvent(zet_debug_event_t &debugEvent) = 0;
virtual bool readSystemRoutineIdent(EuThread *thread, uint64_t vmHandle, SIP::sr_ident &srMagic) = 0;
@@ -99,7 +100,7 @@ struct DebugSessionImp : DebugSession {
}
}
bool isValidGpuAddress(uint64_t address);
bool isValidGpuAddress(uint64_t address) const;
MOCKABLE_VIRTUAL int64_t getTimeDifferenceMilliseconds(std::chrono::high_resolution_clock::time_point time) {
auto now = std::chrono::high_resolution_clock::now();

View File

@@ -1263,12 +1263,7 @@ ze_result_t DebugSessionLinux::readMemory(ze_device_thread_t thread, const zet_d
return ZE_RESULT_ERROR_UNINITIALIZED;
}
if (!isValidGpuAddress(desc->address)) {
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
}
ze_result_t status = ZE_RESULT_ERROR_UNINITIALIZED;
status = sanityMemAccessThreadCheck(thread, desc);
ze_result_t status = validateThreadAndDescForMemoryAccess(thread, desc);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
@@ -1333,12 +1328,7 @@ ze_result_t DebugSessionLinux::writeMemory(ze_device_thread_t thread, const zet_
return ZE_RESULT_ERROR_UNINITIALIZED;
}
if (!isValidGpuAddress(desc->address)) {
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
}
ze_result_t status = ZE_RESULT_ERROR_UNINITIALIZED;
status = sanityMemAccessThreadCheck(thread, desc);
ze_result_t status = validateThreadAndDescForMemoryAccess(thread, desc);
if (status != ZE_RESULT_SUCCESS) {
return status;
}

View File

@@ -338,12 +338,7 @@ ze_result_t DebugSessionWindows::readMemory(ze_device_thread_t thread, const zet
return ZE_RESULT_ERROR_UNINITIALIZED;
}
if (!isValidGpuAddress(desc->address)) {
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
}
ze_result_t status = ZE_RESULT_ERROR_UNINITIALIZED;
status = sanityMemAccessThreadCheck(thread, desc);
ze_result_t status = validateThreadAndDescForMemoryAccess(thread, desc);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
@@ -376,12 +371,7 @@ ze_result_t DebugSessionWindows::writeMemory(ze_device_thread_t thread, const ze
return ZE_RESULT_ERROR_UNINITIALIZED;
}
if (!isValidGpuAddress(desc->address)) {
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
}
ze_result_t status = ZE_RESULT_ERROR_UNINITIALIZED;
status = sanityMemAccessThreadCheck(thread, desc);
ze_result_t status = validateThreadAndDescForMemoryAccess(thread, desc);
if (status != ZE_RESULT_SUCCESS) {
return status;
}