From 03e6266c644be8e1a86f8ff2ee19166a04bb3755 Mon Sep 17 00:00:00 2001 From: foreman Date: Mon, 10 Sep 2018 12:09:51 -0400 Subject: [PATCH] P4 to Git Change 1603601 by jatang@jatang-opencl-hsa-stg5 on 2018/09/10 11:55:05 SWDEV-126897 - Fix segfault in HSAIL/ROCm path. Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.cpp#68 edit --- rocclr/runtime/device/rocm/rocvirtual.cpp | 25 ++++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/rocclr/runtime/device/rocm/rocvirtual.cpp b/rocclr/runtime/device/rocm/rocvirtual.cpp index 4af1354d6e..c0679a7170 100644 --- a/rocclr/runtime/device/rocm/rocvirtual.cpp +++ b/rocclr/runtime/device/rocm/rocvirtual.cpp @@ -2059,23 +2059,28 @@ bool VirtualGPU::submitKernelInternal(const amd::NDRangeContainer& sizes, const break; } case amd::KernelParameterDescriptor::HiddenDefaultQueue: { + uint64_t vqVA = 0; amd::DeviceQueue* defQueue = kernel.program().context().defDeviceQueue(dev()); - - if (!createVirtualQueue(defQueue->size()) || !createSchedulerParam()) { - return false; + if (nullptr != defQueue) { + if (!createVirtualQueue(defQueue->size()) || !createSchedulerParam()) { + return false; + } + gpuKernel.setDynamicParallelFlag(true); + vqVA = getVQVirtualAddress(); } - gpuKernel.setDynamicParallelFlag(true); - uint64_t vqVA = getVQVirtualAddress(); WriteAqlArgAt(const_cast
(parameters), &vqVA, it.size_, it.offset_); break; } case amd::KernelParameterDescriptor::HiddenCompletionAction: { - Memory* schedulerMem = dev().getRocMemory(schedulerParam_); - AmdAqlWrap* wrap = reinterpret_cast(reinterpret_cast(schedulerParam_->getHostMem()) + sizeof(SchedulerParam)); - memset(wrap, 0, sizeof(AmdAqlWrap)); - wrap->state = AQL_WRAP_DONE; + uint64_t spVA = 0; + if (nullptr != schedulerParam_) { + Memory* schedulerMem = dev().getRocMemory(schedulerParam_); + AmdAqlWrap* wrap = reinterpret_cast(reinterpret_cast(schedulerParam_->getHostMem()) + sizeof(SchedulerParam)); + memset(wrap, 0, sizeof(AmdAqlWrap)); + wrap->state = AQL_WRAP_DONE; - uint64_t spVA = reinterpret_cast(schedulerMem->getDeviceMemory()) + sizeof(SchedulerParam); + spVA = reinterpret_cast(schedulerMem->getDeviceMemory()) + sizeof(SchedulerParam); + } WriteAqlArgAt(const_cast
(parameters), &spVA, it.size_, it.offset_); break; }