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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
From 530c33b5144b08953548905e18c0e07ce47e8291 Mon Sep 17 00:00:00 2001
From: Felix Kuehling <Felix.Kuehling@amd.com>
Date: Thu, 30 Mar 2017 14:00:52 -0400
Subject: [PATCH 1649/4131] drm/amdgpu: Clean up page table validation code
Reduce code duplication and rename confusingly similar function names
validate_pt_pd_bos and validate_pd_pt_bos.
Change-Id: I13c305bbf003ce2764214ef9078761a21a3a54e0
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 48 ++++++++----------------
1 file changed, 16 insertions(+), 32 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 2aa65f7..b0527bd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -426,9 +426,10 @@ static int amdgpu_amdkfd_validate(void *param, struct amdgpu_bo *bo)
return amdgpu_amdkfd_bo_validate(bo, p->domain, p->wait);
}
-static int validate_pt_pd_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm)
+static int vm_validate_pt_pd_bos(struct amdgpu_vm *vm)
{
struct amdgpu_bo *pd = vm->root.bo;
+ struct amdgpu_device *adev = amdgpu_ttm_adev(pd->tbo.bdev);
struct amdgpu_vm_parser param;
int ret;
@@ -437,18 +438,20 @@ static int validate_pt_pd_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm)
ret = amdgpu_vm_validate_pt_bos(adev, vm, amdgpu_amdkfd_validate,
¶m);
-
if (ret) {
pr_err("amdgpu: failed to validate PT BOs\n");
- } else {
- ret = amdgpu_amdkfd_validate(¶m, pd);
- if (ret)
- pr_err("amdgpu: failed to validate PD\n");
+ return ret;
+ }
+
+ ret = amdgpu_amdkfd_validate(¶m, pd);
+ if (ret) {
+ pr_err("amdgpu: failed to validate PD\n");
+ return ret;
}
vm->last_eviction_counter = atomic64_read(&adev->num_evictions);
- return ret;
+ return 0;
}
static void add_kgd_mem_to_kfd_bo_list(struct kgd_mem *mem,
@@ -989,7 +992,7 @@ static int map_bo_to_gpuvm(struct amdgpu_device *adev,
/* PT BOs may be created during amdgpu_vm_bo_map() call,
* so we have to validate the newly created PT BOs.
*/
- ret = validate_pt_pd_bos(adev, entry->bo_va->vm);
+ ret = vm_validate_pt_pd_bos(entry->bo_va->vm);
if (ret != 0) {
pr_err("validate_pt_pd_bos() failed\n");
return ret;
@@ -1872,35 +1875,16 @@ int amdgpu_amdkfd_gpuvm_export_dmabuf(struct kgd_dev *kgd, void *vm,
return 0;
}
-static int validate_pd_pt_bos(struct amdkfd_process_info *process_info)
+static int process_validate_vms(struct amdkfd_process_info *process_info)
{
struct amdkfd_vm *peer_vm;
- struct amdgpu_vm_parser param;
int ret;
- param.domain = AMDGPU_GEM_DOMAIN_VRAM;
- param.wait = false;
-
list_for_each_entry(peer_vm, &process_info->vm_list_head,
vm_list_node) {
- struct amdgpu_bo *pd_bo = peer_vm->base.root.bo;
- struct amdgpu_device *adev = amdgpu_ttm_adev(pd_bo->tbo.bdev);
-
- ret = amdgpu_amdkfd_bo_validate(pd_bo, pd_bo->prefered_domains,
- false);
- if (ret) {
- pr_debug("Validate PD failed. Try again\n");
- return ret;
- }
-
- ret = amdgpu_vm_validate_pt_bos(adev, &peer_vm->base,
- amdgpu_amdkfd_validate, ¶m);
- if (ret) {
- pr_debug("Validate PTs failed. Try again\n");
+ ret = vm_validate_pt_pd_bos(&peer_vm->base);
+ if (ret)
return ret;
- }
- peer_vm->base.last_eviction_counter =
- atomic64_read(&adev->num_evictions);
}
return 0;
@@ -2079,7 +2063,7 @@ static int validate_invalid_user_pages(struct amdkfd_process_info *process_info)
amdgpu_sync_create(&sync);
- ret = validate_pd_pt_bos(process_info);
+ ret = process_validate_vms(process_info);
if (ret)
goto unreserve_out;
@@ -2310,7 +2294,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info)
amdgpu_sync_create(&ctx.sync);
/* Validate PDs and PTs */
- ret = validate_pd_pt_bos(process_info);
+ ret = process_validate_vms(process_info);
if (ret)
goto validate_map_fail;
--
2.7.4
|