[PATCH 45/57] clEnqueueSVMMemFree: copy pointers
authorAndreas Kloeckner <inform@tiker.net>
Fri, 1 Jul 2022 05:05:57 +0000 (00:05 -0500)
committerAndreas Beckmann <anbe@debian.org>
Thu, 17 Nov 2022 10:14:25 +0000 (10:14 +0000)
Gbp-Pq: Name 0045-clEnqueueSVMMemFree-copy-pointers.patch

lib/CL/clEnqueueSVMFree.c
lib/CL/devices/common.c

index aff107e0fce195ff1990433f6d28caed5dbbe314..71c60b5b364aa6791a115ff3573329892697c80b 100644 (file)
@@ -60,6 +60,12 @@ POname(clEnqueueSVMFree) (cl_command_queue command_queue,
   if (errcode != CL_SUCCESS)
     return errcode;
 
+  const size_t svm_pointers_nbytes = sizeof(void *) * num_svm_pointers;
+  void *svm_pointers_copy = malloc(svm_pointers_nbytes);
+  if (svm_pointers_copy == NULL)
+    return CL_OUT_OF_HOST_MEMORY;
+  memcpy(svm_pointers_copy, svm_pointers, svm_pointers_nbytes);
+
   _cl_command_node *cmd = NULL;
 
   errcode = pocl_create_command (&cmd, command_queue, CL_COMMAND_SVM_FREE,
@@ -69,11 +75,12 @@ POname(clEnqueueSVMFree) (cl_command_queue command_queue,
   if (errcode != CL_SUCCESS)
     {
       POCL_MEM_FREE(cmd);
+      POCL_MEM_FREE(svm_pointers_copy);
       return errcode;
     }
 
   cmd->command.svm_free.num_svm_pointers = num_svm_pointers;
-  cmd->command.svm_free.svm_pointers = svm_pointers;
+  cmd->command.svm_free.svm_pointers = svm_pointers_copy;
   cmd->command.svm_free.queue = command_queue;
   cmd->command.svm_free.data = user_data;
   cmd->command.svm_free.pfn_free_func = pfn_free_func;
index 47fe0855ec2e16b56ab942fca8ca1f515105651b..8235039791d468bdb281a05ad361841e22db7f21 100644 (file)
@@ -655,6 +655,7 @@ pocl_exec_command (_cl_command_node *node)
             POname (clReleaseContext) (event->context);
             dev->ops->svm_free (dev, ptr);
           }
+      POCL_MEM_FREE(cmd->svm_free.svm_pointers);
       POCL_UPDATE_EVENT_COMPLETE_MSG (event, "Event SVM Free              ");
       break;