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]
Этот коммит содержится в:
@@ -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;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Ссылка в новой задаче
Block a user