aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/1629-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1629-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/1629-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1629-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1629-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch
new file mode 100644
index 00000000..4303497d
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1629-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch
@@ -0,0 +1,65 @@
+From b5131c6bfd277705ec4b2f6ec7380d15a8214d95 Mon Sep 17 00:00:00 2001
+From: Shaoyun Liu <Shaoyun.Liu@amd.com>
+Date: Tue, 14 Mar 2017 18:07:28 -0400
+Subject: [PATCH 1629/4131] drm/amdkfd: Serialize tlb flush on KFD side
+
+Change-Id: Id78f764a66c8a16d8c983afd3913d4ef9d06e014
+Signed-off-by: Shaoyun Liu <Shaoyun.Liu@amd.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_device.c | 2 ++
+ drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c | 7 +++++++
+ drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 2 ++
+ 3 files changed, 11 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+index e03fe90..d94ec24 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+@@ -576,6 +576,8 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
+
+ kfd->dbgmgr = NULL;
+
++ spin_lock_init(&kfd->tlb_invalidation_lock);
++
+ kfd->init_complete = true;
+ dev_info(kfd_device, "added device (%x:%x)\n", kfd->pdev->vendor,
+ kfd->pdev->device);
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c b/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c
+index 49a2a53..1c1ec21 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c
+@@ -433,6 +433,9 @@ void kfd_flush_tlb(struct kfd_dev *dev, uint32_t pasid)
+ /* Scan all registers in the range ATC_VMID8_PASID_MAPPING .. ATC_VMID15_PASID_MAPPING
+ * to check which VMID the current process is mapped to
+ * and flush TLB for this VMID if found*/
++ if (dev->device_info->asic_family >= CHIP_VEGA10)
++ spin_lock(&dev->tlb_invalidation_lock);
++
+ for (vmid = first_vmid_to_scan; vmid <= last_vmid_to_scan; vmid++) {
+ if (f2g->get_atc_vmid_pasid_mapping_valid(
+ dev->kgd, vmid)) {
+@@ -446,4 +449,8 @@ void kfd_flush_tlb(struct kfd_dev *dev, uint32_t pasid)
+ }
+ }
+ }
++
++ if (dev->device_info->asic_family >= CHIP_VEGA10)
++ spin_unlock(&dev->tlb_invalidation_lock);
++
+ }
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+index 4962d7b..607b43f 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+@@ -255,6 +255,8 @@ struct kfd_dev {
+ unsigned int gtt_sa_chunk_size;
+ unsigned int gtt_sa_num_of_chunks;
+
++ spinlock_t tlb_invalidation_lock;
++
+ /* QCM Device instance */
+ struct device_queue_manager *dqm;
+
+--
+2.7.4
+