diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1243-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1243-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1243-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1243-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch new file mode 100644 index 00000000..5d08af40 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1243-drm-amdkfd-Serialize-tlb-flush-on-KFD-side.patch @@ -0,0 +1,65 @@ +From 07085626ee01836d790957fbf1d0d005f4110dc7 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 1243/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 cef14ad..853d430 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 + |