From 1a9af8b82d47ced33e4dc650c78315da9926805e Mon Sep 17 00:00:00 2001 From: Harish Kasiviswanathan Date: Thu, 8 Feb 2018 10:04:08 -0500 Subject: [PATCH] CMA: Initialize SizeCopied return parameter UCX test cases are reporting uninitialized values when CMA fails. The application should ideally ignore SizeCopied when the function fails but it doesn't. This is leading to wrong diagnosis. v2: Fill in partial SizeCopied in case of failure Change-Id: I6b7e1c19a8b702ec91ca64201a3dda27bd897877 Signed-off-by: Harish Kasiviswanathan [ROCm/ROCR-Runtime commit: 7de0199e999b28b6d58d59e6eb35b32c6ec262ff] --- projects/rocr-runtime/src/memory.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/projects/rocr-runtime/src/memory.c b/projects/rocr-runtime/src/memory.c index 22f7c30abe..37e4d3229a 100644 --- a/projects/rocr-runtime/src/memory.c +++ b/projects/rocr-runtime/src/memory.c @@ -354,6 +354,7 @@ HSAKMT_STATUS HSAKMTAPI hsaKmtProcessVMRead(HSAuint32 Pid, HSAuint64 RemoteMemoryArrayCount, HSAuint64 *SizeCopied) { + int ret = HSAKMT_STATUS_SUCCESS; struct kfd_ioctl_cross_memory_copy_args args = {0}; pr_debug("[%s]\n", __func__); @@ -371,15 +372,13 @@ HSAKMT_STATUS HSAKMTAPI hsaKmtProcessVMRead(HSAuint32 Pid, args.dst_mem_array_size = LocalMemoryArrayCount; args.bytes_copied = 0; - int err = kmtIoctl(kfd_fd, AMDKFD_IOC_CROSS_MEMORY_COPY, &args); - - if (err) - return HSAKMT_STATUS_ERROR; + if (kmtIoctl(kfd_fd, AMDKFD_IOC_CROSS_MEMORY_COPY, &args)) + ret = HSAKMT_STATUS_ERROR; if (SizeCopied) *SizeCopied = args.bytes_copied; - return HSAKMT_STATUS_SUCCESS; + return ret; } HSAKMT_STATUS HSAKMTAPI hsaKmtProcessVMWrite(HSAuint32 Pid, @@ -389,10 +388,14 @@ HSAKMT_STATUS HSAKMTAPI hsaKmtProcessVMWrite(HSAuint32 Pid, HSAuint64 RemoteMemoryArrayCount, HSAuint64 *SizeCopied) { + int ret = HSAKMT_STATUS_SUCCESS; struct kfd_ioctl_cross_memory_copy_args args = {0}; pr_debug("[%s]\n", __func__); + if (SizeCopied) + *SizeCopied = 0; + if (!LocalMemoryArray || !RemoteMemoryArray || LocalMemoryArrayCount == 0 || RemoteMemoryArrayCount == 0) return HSAKMT_STATUS_ERROR; @@ -406,15 +409,13 @@ HSAKMT_STATUS HSAKMTAPI hsaKmtProcessVMWrite(HSAuint32 Pid, args.dst_mem_array_size = RemoteMemoryArrayCount; args.bytes_copied = 0; - int err = kmtIoctl(kfd_fd, AMDKFD_IOC_CROSS_MEMORY_COPY, &args); - - if (err) - return HSAKMT_STATUS_ERROR; + if (kmtIoctl(kfd_fd, AMDKFD_IOC_CROSS_MEMORY_COPY, &args)) + ret = HSAKMT_STATUS_ERROR; if (SizeCopied) *SizeCopied = args.bytes_copied; - return HSAKMT_STATUS_SUCCESS; + return ret; }