aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1711-drm-amdgpu-Use-spin-lock-instead-of-mutex-in-tlb-inv.patch
blob: e18f7311cbd24ff5b30fe7e8b57fa0a9326f861d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
From 0ca7e35039f5cec771e61add0a6d76ba967acdc2 Mon Sep 17 00:00:00 2001
From: ozeng <oak.zeng@amd.com>
Date: Tue, 6 Jun 2017 20:24:49 -0500
Subject: [PATCH 1711/4131] drm/amdgpu: Use spin lock instead of mutex in tlb
 invalidation

Change-Id: Ic7b6da7efe4785b952c0bdf73fa650cab8e021f7
Signed-off-by: <Oak.Zeng@amd.com>

 Conflicts:
        drivers/gpu/drm/amd/amdgpu/amdgpu.h
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h               | 3 +++
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 4 +++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c        | 1 +
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index ee6069f..265ddb3 100755
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1663,8 +1663,11 @@ struct amdgpu_device {
 
 	/* record hw reset is performed */
 	bool has_hw_reset;
+
 	u8				reset_magic[AMDGPU_RESET_MAGIC_NUM];
 
+	spinlock_t tlb_invalidation_lock;
+
 	/* record last mm index being written through WREG32*/
 	unsigned long last_mm_index;
 };
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
index 33b4077..e84c115 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
@@ -920,7 +920,7 @@ static void write_vmid_invalidate_request(struct kgd_dev *kgd, uint8_t vmid)
 		VM_INVALIDATE_ENG16_REQ__INVALIDATE_L2_PDE2_MASK |
 		VM_INVALIDATE_ENG16_REQ__INVALIDATE_L1_PTES_MASK;
 
-	mutex_lock(&adev->srbm_mutex);
+	spin_lock(&adev->tlb_invalidation_lock);
 
 	/* Use light weight invalidation.
 	 *
@@ -956,6 +956,8 @@ static void write_vmid_invalidate_request(struct kgd_dev *kgd, uint8_t vmid)
 					mmMMHUB_VM_INVALIDATE_ENG16_ACK)) &
 					(1 << vmid)))
 		cpu_relax();
+	
+	spin_unlock(&adev->tlb_invalidation_lock);
 }
 
 static int invalidate_tlbs_with_kiq(struct amdgpu_device *adev, uint16_t pasid)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index b84914c..f910159 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2092,6 +2092,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
 	spin_lock_init(&adev->se_cac_idx_lock);
 	spin_lock_init(&adev->audio_endpt_idx_lock);
 	spin_lock_init(&adev->mm_stats.lock);
+	spin_lock_init(&adev->tlb_invalidation_lock);
 
 	INIT_LIST_HEAD(&adev->shadow_list);
 	mutex_init(&adev->shadow_list_lock);
-- 
2.7.4