aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1302-drm-amd-Implement-parallel-memory-mapping-on-mGPUs.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1302-drm-amd-Implement-parallel-memory-mapping-on-mGPUs.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1302-drm-amd-Implement-parallel-memory-mapping-on-mGPUs.patch74
1 files changed, 74 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1302-drm-amd-Implement-parallel-memory-mapping-on-mGPUs.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1302-drm-amd-Implement-parallel-memory-mapping-on-mGPUs.patch
new file mode 100644
index 00000000..55e781ad
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1302-drm-amd-Implement-parallel-memory-mapping-on-mGPUs.patch
@@ -0,0 +1,74 @@
+From 10cb2c44e19693b5c7943a0a9cd944ee7c4ca50d Mon Sep 17 00:00:00 2001
+From: Lan Xiao <Lan.Xiao@amd.com>
+Date: Fri, 23 Jun 2017 16:06:48 -0400
+Subject: [PATCH 1302/4131] drm/amd: Implement parallel memory mapping on mGPUs
+
+Alter the KFD-KGD interface to optimize multi-GPU memory mappings to
+work concurrently instead of sequentially. Return the fences
+during the process, wait for all fences after the mappings are done.
+The fences are stored in the associated kgd_mem object.
+
+This change also enables interruptible waiting with proper signal
+handling
+
+Change-Id: I9ae7f4bd54165b14dd5b37df5df6516aa80cba83
+Signed-off-by: Lan Xiao <Lan.Xiao@amd.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 7 +++++++
+ drivers/gpu/drm/amd/amdkfd/kfd_process.c | 8 ++++++++
+ 2 files changed, 15 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+index 64a4373..dbc3afd 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+@@ -1398,6 +1398,12 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep,
+ pr_err("Failed to map\n");
+ }
+
++ err = dev->kfd2kgd->sync_memory(dev->kgd, (struct kgd_mem *) mem, true);
++ if (err) {
++ pr_debug("Sync memory failed, wait interrupted by user signal\n");
++ goto sync_memory_failed;
++ }
++
+ if (args->device_ids_array_size > 0 && devices_arr)
+ kfree(devices_arr);
+
+@@ -1407,6 +1413,7 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep,
+ up_write(&p->lock);
+ get_mem_obj_from_handle_failed:
+ copy_from_user_failed:
++sync_memory_failed:
+ kfree(devices_arr);
+ return err;
+ }
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+index d1ef118..f5e2282 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+@@ -136,6 +136,13 @@ static int kfd_process_alloc_gpuvm(struct kfd_process *p,
+ if (err)
+ goto err_map_mem;
+
++ err = kdev->kfd2kgd->sync_memory(kdev->kgd, (struct kgd_mem *) mem,
++ true);
++ if (err) {
++ pr_debug("Sync memory failed, wait interrupted by user signal\n");
++ goto sync_memory_failed;
++ }
++
+ /* Create an obj handle so kfd_process_device_remove_obj_handle
+ * will take care of the bo removal when the process finishes.
+ * We do not need to take p->lock, because the process is just
+@@ -151,6 +158,7 @@ static int kfd_process_alloc_gpuvm(struct kfd_process *p,
+ return err;
+
+ free_gpuvm:
++sync_memory_failed:
+ kfd_process_free_gpuvm(mem, pdd);
+ return err;
+
+--
+2.7.4
+