Commit ea89f8c9 authored by Christian König's avatar Christian König Committed by Alex Deucher

drm/amdgpu: move VM manager clean into the VM code again

It's not a good idea to duplicate that code.
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarChunming Zhou <davdi1.zhou@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 8b4fb00b
...@@ -972,6 +972,7 @@ struct amdgpu_vm_manager { ...@@ -972,6 +972,7 @@ struct amdgpu_vm_manager {
struct amdgpu_ring *vm_pte_funcs_ring; struct amdgpu_ring *vm_pte_funcs_ring;
}; };
void amdgpu_vm_manager_fini(struct amdgpu_device *adev);
int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm); int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm);
void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm); void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm);
struct amdgpu_bo_list_entry *amdgpu_vm_get_bos(struct amdgpu_device *adev, struct amdgpu_bo_list_entry *amdgpu_vm_get_bos(struct amdgpu_device *adev,
......
...@@ -1318,3 +1318,18 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm) ...@@ -1318,3 +1318,18 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
mutex_destroy(&vm->mutex); mutex_destroy(&vm->mutex);
} }
/**
* amdgpu_vm_manager_fini - cleanup VM manager
*
* @adev: amdgpu_device pointer
*
* Cleanup the VM manager and free resources.
*/
void amdgpu_vm_manager_fini(struct amdgpu_device *adev)
{
unsigned i;
for (i = 0; i < AMDGPU_NUM_VM; ++i)
fence_put(adev->vm_manager.active[i]);
}
...@@ -961,12 +961,10 @@ static int gmc_v7_0_sw_init(void *handle) ...@@ -961,12 +961,10 @@ static int gmc_v7_0_sw_init(void *handle)
static int gmc_v7_0_sw_fini(void *handle) static int gmc_v7_0_sw_fini(void *handle)
{ {
int i;
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
if (adev->vm_manager.enabled) { if (adev->vm_manager.enabled) {
for (i = 0; i < AMDGPU_NUM_VM; ++i) amdgpu_vm_manager_fini(adev);
fence_put(adev->vm_manager.active[i]);
gmc_v7_0_vm_fini(adev); gmc_v7_0_vm_fini(adev);
adev->vm_manager.enabled = false; adev->vm_manager.enabled = false;
} }
...@@ -1011,12 +1009,10 @@ static int gmc_v7_0_hw_fini(void *handle) ...@@ -1011,12 +1009,10 @@ static int gmc_v7_0_hw_fini(void *handle)
static int gmc_v7_0_suspend(void *handle) static int gmc_v7_0_suspend(void *handle)
{ {
int i;
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
if (adev->vm_manager.enabled) { if (adev->vm_manager.enabled) {
for (i = 0; i < AMDGPU_NUM_VM; ++i) amdgpu_vm_manager_fini(adev);
fence_put(adev->vm_manager.active[i]);
gmc_v7_0_vm_fini(adev); gmc_v7_0_vm_fini(adev);
adev->vm_manager.enabled = false; adev->vm_manager.enabled = false;
} }
......
...@@ -980,12 +980,10 @@ static int gmc_v8_0_sw_init(void *handle) ...@@ -980,12 +980,10 @@ static int gmc_v8_0_sw_init(void *handle)
static int gmc_v8_0_sw_fini(void *handle) static int gmc_v8_0_sw_fini(void *handle)
{ {
int i;
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
if (adev->vm_manager.enabled) { if (adev->vm_manager.enabled) {
for (i = 0; i < AMDGPU_NUM_VM; ++i) amdgpu_vm_manager_fini(adev);
fence_put(adev->vm_manager.active[i]);
gmc_v8_0_vm_fini(adev); gmc_v8_0_vm_fini(adev);
adev->vm_manager.enabled = false; adev->vm_manager.enabled = false;
} }
...@@ -1032,12 +1030,10 @@ static int gmc_v8_0_hw_fini(void *handle) ...@@ -1032,12 +1030,10 @@ static int gmc_v8_0_hw_fini(void *handle)
static int gmc_v8_0_suspend(void *handle) static int gmc_v8_0_suspend(void *handle)
{ {
int i;
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
if (adev->vm_manager.enabled) { if (adev->vm_manager.enabled) {
for (i = 0; i < AMDGPU_NUM_VM; ++i) amdgpu_vm_manager_fini(adev);
fence_put(adev->vm_manager.active[i]);
gmc_v8_0_vm_fini(adev); gmc_v8_0_vm_fini(adev);
adev->vm_manager.enabled = false; adev->vm_manager.enabled = false;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment