Commit 8640faed authored by Junwei Zhang's avatar Junwei Zhang Committed by Alex Deucher

drm/amdgpu: free the BO in kernel by helper amdgpu_bo_free_kernel()

Signed-off-by: default avatarJunwei Zhang <Jerry.Zhang@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent aa1d562e
...@@ -119,8 +119,6 @@ int amdgpu_ih_ring_init(struct amdgpu_device *adev, unsigned ring_size, ...@@ -119,8 +119,6 @@ int amdgpu_ih_ring_init(struct amdgpu_device *adev, unsigned ring_size,
*/ */
void amdgpu_ih_ring_fini(struct amdgpu_device *adev) void amdgpu_ih_ring_fini(struct amdgpu_device *adev)
{ {
int r;
if (adev->irq.ih.use_bus_addr) { if (adev->irq.ih.use_bus_addr) {
if (adev->irq.ih.ring) { if (adev->irq.ih.ring) {
/* add 8 bytes for the rptr/wptr shadows and /* add 8 bytes for the rptr/wptr shadows and
...@@ -132,17 +130,9 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev) ...@@ -132,17 +130,9 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev)
adev->irq.ih.ring = NULL; adev->irq.ih.ring = NULL;
} }
} else { } else {
if (adev->irq.ih.ring_obj) { amdgpu_bo_free_kernel(&adev->irq.ih.ring_obj,
r = amdgpu_bo_reserve(adev->irq.ih.ring_obj, false); &adev->irq.ih.gpu_addr,
if (likely(r == 0)) { (void **)&adev->irq.ih.ring);
amdgpu_bo_kunmap(adev->irq.ih.ring_obj);
amdgpu_bo_unpin(adev->irq.ih.ring_obj);
amdgpu_bo_unreserve(adev->irq.ih.ring_obj);
}
amdgpu_bo_unref(&adev->irq.ih.ring_obj);
adev->irq.ih.ring = NULL;
adev->irq.ih.ring_obj = NULL;
}
amdgpu_wb_free(adev, adev->irq.ih.wptr_offs); amdgpu_wb_free(adev, adev->irq.ih.wptr_offs);
amdgpu_wb_free(adev, adev->irq.ih.rptr_offs); amdgpu_wb_free(adev, adev->irq.ih.rptr_offs);
} }
......
...@@ -252,28 +252,17 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, ...@@ -252,28 +252,17 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
*/ */
void amdgpu_ring_fini(struct amdgpu_ring *ring) void amdgpu_ring_fini(struct amdgpu_ring *ring)
{ {
int r;
struct amdgpu_bo *ring_obj;
ring_obj = ring->ring_obj;
ring->ready = false; ring->ready = false;
ring->ring = NULL;
ring->ring_obj = NULL;
amdgpu_wb_free(ring->adev, ring->cond_exe_offs); amdgpu_wb_free(ring->adev, ring->cond_exe_offs);
amdgpu_wb_free(ring->adev, ring->fence_offs); amdgpu_wb_free(ring->adev, ring->fence_offs);
amdgpu_wb_free(ring->adev, ring->rptr_offs); amdgpu_wb_free(ring->adev, ring->rptr_offs);
amdgpu_wb_free(ring->adev, ring->wptr_offs); amdgpu_wb_free(ring->adev, ring->wptr_offs);
if (ring_obj) { amdgpu_bo_free_kernel(&ring->ring_obj,
r = amdgpu_bo_reserve(ring_obj, false); &ring->gpu_addr,
if (likely(r == 0)) { (void **)&ring->ring);
amdgpu_bo_kunmap(ring_obj);
amdgpu_bo_unpin(ring_obj);
amdgpu_bo_unreserve(ring_obj);
}
amdgpu_bo_unref(&ring_obj);
}
amdgpu_debugfs_ring_fini(ring); amdgpu_debugfs_ring_fini(ring);
} }
......
...@@ -249,22 +249,13 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev) ...@@ -249,22 +249,13 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
int amdgpu_uvd_sw_fini(struct amdgpu_device *adev) int amdgpu_uvd_sw_fini(struct amdgpu_device *adev)
{ {
int r;
kfree(adev->uvd.saved_bo); kfree(adev->uvd.saved_bo);
amd_sched_entity_fini(&adev->uvd.ring.sched, &adev->uvd.entity); amd_sched_entity_fini(&adev->uvd.ring.sched, &adev->uvd.entity);
if (adev->uvd.vcpu_bo) { amdgpu_bo_free_kernel(&adev->uvd.vcpu_bo,
r = amdgpu_bo_reserve(adev->uvd.vcpu_bo, false); &adev->uvd.gpu_addr,
if (!r) { (void **)&adev->uvd.cpu_addr);
amdgpu_bo_kunmap(adev->uvd.vcpu_bo);
amdgpu_bo_unpin(adev->uvd.vcpu_bo);
amdgpu_bo_unreserve(adev->uvd.vcpu_bo);
}
amdgpu_bo_unref(&adev->uvd.vcpu_bo);
}
amdgpu_ring_fini(&adev->uvd.ring); amdgpu_ring_fini(&adev->uvd.ring);
......
...@@ -4490,9 +4490,9 @@ static int gfx_v7_0_sw_fini(void *handle) ...@@ -4490,9 +4490,9 @@ static int gfx_v7_0_sw_fini(void *handle)
int i; int i;
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
amdgpu_bo_unref(&adev->gds.oa_gfx_bo); amdgpu_bo_free_kernel(&adev->gds.oa_gfx_bo, NULL, NULL);
amdgpu_bo_unref(&adev->gds.gws_gfx_bo); amdgpu_bo_free_kernel(&adev->gds.gws_gfx_bo, NULL, NULL);
amdgpu_bo_unref(&adev->gds.gds_gfx_bo); amdgpu_bo_free_kernel(&adev->gds.gds_gfx_bo, NULL, NULL);
for (i = 0; i < adev->gfx.num_gfx_rings; i++) for (i = 0; i < adev->gfx.num_gfx_rings; i++)
amdgpu_ring_fini(&adev->gfx.gfx_ring[i]); amdgpu_ring_fini(&adev->gfx.gfx_ring[i]);
......
...@@ -2109,9 +2109,9 @@ static int gfx_v8_0_sw_fini(void *handle) ...@@ -2109,9 +2109,9 @@ static int gfx_v8_0_sw_fini(void *handle)
int i; int i;
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
amdgpu_bo_unref(&adev->gds.oa_gfx_bo); amdgpu_bo_free_kernel(&adev->gds.oa_gfx_bo, NULL, NULL);
amdgpu_bo_unref(&adev->gds.gws_gfx_bo); amdgpu_bo_free_kernel(&adev->gds.gws_gfx_bo, NULL, NULL);
amdgpu_bo_unref(&adev->gds.gds_gfx_bo); amdgpu_bo_free_kernel(&adev->gds.gds_gfx_bo, NULL, NULL);
for (i = 0; i < adev->gfx.num_gfx_rings; i++) for (i = 0; i < adev->gfx.num_gfx_rings; i++)
amdgpu_ring_fini(&adev->gfx.gfx_ring[i]); amdgpu_ring_fini(&adev->gfx.gfx_ring[i]);
......
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