From 7de0199e999b28b6d58d59e6eb35b32c6ec262ff 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 --- src/memory.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/memory.c b/src/memory.c index 22f7c30abe..37e4d3229a 100644 --- a/src/memory.c +++ b/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; }