P4 to Git Change 2047424 by lmoriche@lmoriche_opencl_dev2 on 2019/12/17 20:13:01

SWDEV-216705 - [hipclang-vdi-rocm][FBA-80]Test crash when all GPUs are hidden by ROCR_VISIBLE_DEVICES

	Return an error instead of dereferencing a null pointer. This should address the issue described
	in the ticket, but more places need fixing in the runtime to avoid crashes for corner cases.

Affected files ...

... //depot/stg/opencl/drivers/opencl/api/hip/hip_context.cpp#26 edit
... //depot/stg/opencl/drivers/opencl/api/hip/hip_device_runtime.cpp#23 edit
... //depot/stg/opencl/drivers/opencl/api/hip/hip_memory.cpp#92 edit
... //depot/stg/opencl/drivers/opencl/api/hip/hip_platform.cpp#58 edit


[ROCm/hip commit: f6d38a725c]
Этот коммит содержится в:
foreman
2019-12-17 20:18:36 -05:00
родитель a81fb22bc7
Коммит d5776751ca
4 изменённых файлов: 15 добавлений и 4 удалений
+2 -1
Просмотреть файл
@@ -106,7 +106,8 @@ amd::HostQueue* getNullStream(amd::Context& context) {
}
amd::HostQueue* getNullStream() {
return getNullStream(*getCurrentContext());
amd::Context* context = getCurrentContext();
return context ? getNullStream(*context) : nullptr;
}
};
+3 -2
Просмотреть файл
@@ -437,7 +437,6 @@ int ihipGetDevice() {
return i;
}
}
assert(0 && "Current device not found?!");
return -1;
}
@@ -446,7 +445,9 @@ hipError_t hipGetDevice ( int* deviceId ) {
if (deviceId != nullptr) {
int dev = ihipGetDevice();
assert(dev != -1);
if (dev == -1) {
HIP_RETURN(hipErrorNoDevice);
}
*deviceId = dev;
HIP_RETURN(hipSuccess);
} else {
+4
Просмотреть файл
@@ -69,6 +69,10 @@ hipError_t ihipMalloc(void** ptr, size_t sizeBytes, unsigned int flags)
amd::Context* amdContext = ((flags & CL_MEM_SVM_FINE_GRAIN_BUFFER) != 0)?
hip::host_context : hip::getCurrentContext();
if (amdContext == nullptr) {
return hipErrorMemoryAllocation;
}
if (amdContext->devices()[0]->info().maxMemAllocSize_ < sizeBytes) {
return hipErrorMemoryAllocation;
}
+6 -1
Просмотреть файл
@@ -469,7 +469,9 @@ extern "C" void __hipUnregisterFatBinary(std::vector< std::pair<hipModule_t, boo
as_amd(reinterpret_cast<cl_program>(module.first))->release();
}
});
PlatformState::instance().unregisterVar((*modules)[0].first);
if (modules->size() > 0) {
PlatformState::instance().unregisterVar((*modules)[0].first);
}
PlatformState::instance().removeFatBinary(modules);
}
@@ -532,6 +534,9 @@ extern "C" hipError_t hipLaunchByPtr(const void *hostFunction)
HIP_INIT_API(NONE, hostFunction);
int deviceId = ihipGetDevice();
if (deviceId == -1) {
HIP_RETURN(hipErrorNoDevice);
}
hipFunction_t func = PlatformState::instance().getFunc(hostFunction, deviceId);
if (func == nullptr) {
HIP_RETURN(hipErrorInvalidDeviceFunction);