diff options
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 330e307c36ed..7e73e54eadb9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |||
@@ -971,22 +971,18 @@ int amdgpu_vm_clear_freed(struct amdgpu_device *adev, | |||
971 | struct amdgpu_bo_va_mapping *mapping; | 971 | struct amdgpu_bo_va_mapping *mapping; |
972 | int r; | 972 | int r; |
973 | 973 | ||
974 | spin_lock(&vm->freed_lock); | ||
975 | while (!list_empty(&vm->freed)) { | 974 | while (!list_empty(&vm->freed)) { |
976 | mapping = list_first_entry(&vm->freed, | 975 | mapping = list_first_entry(&vm->freed, |
977 | struct amdgpu_bo_va_mapping, list); | 976 | struct amdgpu_bo_va_mapping, list); |
978 | list_del(&mapping->list); | 977 | list_del(&mapping->list); |
979 | spin_unlock(&vm->freed_lock); | 978 | |
980 | r = amdgpu_vm_bo_split_mapping(adev, NULL, 0, vm, mapping, | 979 | r = amdgpu_vm_bo_split_mapping(adev, NULL, 0, vm, mapping, |
981 | 0, NULL); | 980 | 0, NULL); |
982 | kfree(mapping); | 981 | kfree(mapping); |
983 | if (r) | 982 | if (r) |
984 | return r; | 983 | return r; |
985 | 984 | ||
986 | spin_lock(&vm->freed_lock); | ||
987 | } | 985 | } |
988 | spin_unlock(&vm->freed_lock); | ||
989 | |||
990 | return 0; | 986 | return 0; |
991 | 987 | ||
992 | } | 988 | } |
@@ -1252,13 +1248,10 @@ int amdgpu_vm_bo_unmap(struct amdgpu_device *adev, | |||
1252 | spin_unlock(&vm->it_lock); | 1248 | spin_unlock(&vm->it_lock); |
1253 | trace_amdgpu_vm_bo_unmap(bo_va, mapping); | 1249 | trace_amdgpu_vm_bo_unmap(bo_va, mapping); |
1254 | 1250 | ||
1255 | if (valid) { | 1251 | if (valid) |
1256 | spin_lock(&vm->freed_lock); | ||
1257 | list_add(&mapping->list, &vm->freed); | 1252 | list_add(&mapping->list, &vm->freed); |
1258 | spin_unlock(&vm->freed_lock); | 1253 | else |
1259 | } else { | ||
1260 | kfree(mapping); | 1254 | kfree(mapping); |
1261 | } | ||
1262 | 1255 | ||
1263 | return 0; | 1256 | return 0; |
1264 | } | 1257 | } |
@@ -1291,9 +1284,7 @@ void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, | |||
1291 | interval_tree_remove(&mapping->it, &vm->va); | 1284 | interval_tree_remove(&mapping->it, &vm->va); |
1292 | spin_unlock(&vm->it_lock); | 1285 | spin_unlock(&vm->it_lock); |
1293 | trace_amdgpu_vm_bo_unmap(bo_va, mapping); | 1286 | trace_amdgpu_vm_bo_unmap(bo_va, mapping); |
1294 | spin_lock(&vm->freed_lock); | ||
1295 | list_add(&mapping->list, &vm->freed); | 1287 | list_add(&mapping->list, &vm->freed); |
1296 | spin_unlock(&vm->freed_lock); | ||
1297 | } | 1288 | } |
1298 | list_for_each_entry_safe(mapping, next, &bo_va->invalids, list) { | 1289 | list_for_each_entry_safe(mapping, next, &bo_va->invalids, list) { |
1299 | list_del(&mapping->list); | 1290 | list_del(&mapping->list); |
@@ -1357,7 +1348,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm) | |||
1357 | INIT_LIST_HEAD(&vm->cleared); | 1348 | INIT_LIST_HEAD(&vm->cleared); |
1358 | INIT_LIST_HEAD(&vm->freed); | 1349 | INIT_LIST_HEAD(&vm->freed); |
1359 | spin_lock_init(&vm->it_lock); | 1350 | spin_lock_init(&vm->it_lock); |
1360 | spin_lock_init(&vm->freed_lock); | ||
1361 | pd_size = amdgpu_vm_directory_size(adev); | 1351 | pd_size = amdgpu_vm_directory_size(adev); |
1362 | pd_entries = amdgpu_vm_num_pdes(adev); | 1352 | pd_entries = amdgpu_vm_num_pdes(adev); |
1363 | 1353 | ||