Message ID | 20201209115132.98188-1-nirmoy.das@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,1/1] drm/amdgpu: clean up bo in vce and vcn test | expand |
Hi Christian, Can you please pick this up for drm-misc-next? Thanks, Nirmoy On 12/9/20 12:51 PM, Nirmoy Das wrote: > BO created with amdgpu_bo_create_reserved() wasn't clean > properly before, which causes: > > [ 21.056218] WARNING: CPU: 0 PID: 7 at drivers/gpu/drm/ttm/ttm_bo.c:518 ttm_bo_release+0x2bf/0x310 [ttm] > <snip> > [ 21.056430] Call Trace: > [ 21.056525] amdgpu_bo_unref+0x1a/0x30 [amdgpu] > [ 21.056635] amdgpu_vcn_dec_send_msg+0x1b2/0x270 [amdgpu] > [ 21.056740] amdgpu_vcn_dec_get_create_msg.constprop.0+0xd8/0x100 [amdgpu] > [ 21.056843] amdgpu_vcn_dec_ring_test_ib+0x27/0x180 [amdgpu] > [ 21.056936] amdgpu_ib_ring_tests+0xf1/0x150 [amdgpu] > [ 21.057024] amdgpu_device_delayed_init_work_handler+0x11/0x30 [amdgpu] > [ 21.057030] process_one_work+0x1df/0x370 > [ 21.057033] worker_thread+0x46/0x340 > [ 21.057034] ? process_one_work+0x370/0x370 > [ 21.057037] kthread+0x11b/0x140 > [ 21.057039] ? __kthread_bind_mask+0x60/0x60 > [ 21.057043] ret_from_fork+0x22/0x30 > > Signed-off-by: Nirmoy Das <nirmoy.das@amd.com> > Reviewed-by: Christian König <christian.koenig@amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 9 ++++++--- > 2 files changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > index ecaa2d7483b2..78a4dd9bf11f 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > @@ -1151,6 +1151,6 @@ int amdgpu_vce_ring_test_ib(struct amdgpu_ring *ring, long timeout) > error: > dma_fence_put(fence); > amdgpu_bo_unreserve(bo); > - amdgpu_bo_unref(&bo); > + amdgpu_bo_free_kernel(&bo, NULL, NULL); > return r; > } > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c > index 7e19a6656715..921b81054c1b 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c > @@ -465,6 +465,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, > struct amdgpu_job *job; > struct amdgpu_ib *ib; > uint64_t addr; > + void *msg = NULL; > int i, r; > > r = amdgpu_job_alloc_with_ib(adev, 64, > @@ -474,6 +475,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, > > ib = &job->ibs[0]; > addr = amdgpu_bo_gpu_offset(bo); > + msg = amdgpu_bo_kptr(bo); > ib->ptr[0] = PACKET0(adev->vcn.internal.data0, 0); > ib->ptr[1] = addr; > ib->ptr[2] = PACKET0(adev->vcn.internal.data1, 0); > @@ -492,7 +494,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, > > amdgpu_bo_fence(bo, f, false); > amdgpu_bo_unreserve(bo); > - amdgpu_bo_unref(&bo); > + amdgpu_bo_free_kernel(&bo, NULL, (void **)&msg); > > if (fence) > *fence = dma_fence_get(f); > @@ -505,7 +507,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, > > err: > amdgpu_bo_unreserve(bo); > - amdgpu_bo_unref(&bo); > + amdgpu_bo_free_kernel(&bo, NULL, (void **)&msg); > return r; > } > > @@ -761,6 +763,7 @@ int amdgpu_vcn_enc_ring_test_ib(struct amdgpu_ring *ring, long timeout) > error: > dma_fence_put(fence); > amdgpu_bo_unreserve(bo); > - amdgpu_bo_unref(&bo); > + amdgpu_bo_free_kernel(&bo, NULL, NULL); > + > return r; > } > -- > 2.29.2 >
Hi Nirmoy, oh, ok sure. I was thinking to merge it through amd-staging-drm-next instead, but going through drm-misc-next is even better. Regards, Christian. Am 09.12.20 um 12:57 schrieb Nirmoy: > Hi Christian, > > > Can you please pick this up for drm-misc-next? > > > Thanks, > > Nirmoy > > On 12/9/20 12:51 PM, Nirmoy Das wrote: >> BO created with amdgpu_bo_create_reserved() wasn't clean >> properly before, which causes: >> >> [ 21.056218] WARNING: CPU: 0 PID: 7 at >> drivers/gpu/drm/ttm/ttm_bo.c:518 ttm_bo_release+0x2bf/0x310 [ttm] >> <snip> >> [ 21.056430] Call Trace: >> [ 21.056525] amdgpu_bo_unref+0x1a/0x30 [amdgpu] >> [ 21.056635] amdgpu_vcn_dec_send_msg+0x1b2/0x270 [amdgpu] >> [ 21.056740] amdgpu_vcn_dec_get_create_msg.constprop.0+0xd8/0x100 >> [amdgpu] >> [ 21.056843] amdgpu_vcn_dec_ring_test_ib+0x27/0x180 [amdgpu] >> [ 21.056936] amdgpu_ib_ring_tests+0xf1/0x150 [amdgpu] >> [ 21.057024] amdgpu_device_delayed_init_work_handler+0x11/0x30 >> [amdgpu] >> [ 21.057030] process_one_work+0x1df/0x370 >> [ 21.057033] worker_thread+0x46/0x340 >> [ 21.057034] ? process_one_work+0x370/0x370 >> [ 21.057037] kthread+0x11b/0x140 >> [ 21.057039] ? __kthread_bind_mask+0x60/0x60 >> [ 21.057043] ret_from_fork+0x22/0x30 >> >> Signed-off-by: Nirmoy Das <nirmoy.das@amd.com> >> Reviewed-by: Christian König <christian.koenig@amd.com> >> --- >> drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 9 ++++++--- >> 2 files changed, 7 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >> index ecaa2d7483b2..78a4dd9bf11f 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >> @@ -1151,6 +1151,6 @@ int amdgpu_vce_ring_test_ib(struct amdgpu_ring >> *ring, long timeout) >> error: >> dma_fence_put(fence); >> amdgpu_bo_unreserve(bo); >> - amdgpu_bo_unref(&bo); >> + amdgpu_bo_free_kernel(&bo, NULL, NULL); >> return r; >> } >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >> index 7e19a6656715..921b81054c1b 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >> @@ -465,6 +465,7 @@ static int amdgpu_vcn_dec_send_msg(struct >> amdgpu_ring *ring, >> struct amdgpu_job *job; >> struct amdgpu_ib *ib; >> uint64_t addr; >> + void *msg = NULL; >> int i, r; >> >> r = amdgpu_job_alloc_with_ib(adev, 64, >> @@ -474,6 +475,7 @@ static int amdgpu_vcn_dec_send_msg(struct >> amdgpu_ring *ring, >> >> ib = &job->ibs[0]; >> addr = amdgpu_bo_gpu_offset(bo); >> + msg = amdgpu_bo_kptr(bo); >> ib->ptr[0] = PACKET0(adev->vcn.internal.data0, 0); >> ib->ptr[1] = addr; >> ib->ptr[2] = PACKET0(adev->vcn.internal.data1, 0); >> @@ -492,7 +494,7 @@ static int amdgpu_vcn_dec_send_msg(struct >> amdgpu_ring *ring, >> >> amdgpu_bo_fence(bo, f, false); >> amdgpu_bo_unreserve(bo); >> - amdgpu_bo_unref(&bo); >> + amdgpu_bo_free_kernel(&bo, NULL, (void **)&msg); >> >> if (fence) >> *fence = dma_fence_get(f); >> @@ -505,7 +507,7 @@ static int amdgpu_vcn_dec_send_msg(struct >> amdgpu_ring *ring, >> >> err: >> amdgpu_bo_unreserve(bo); >> - amdgpu_bo_unref(&bo); >> + amdgpu_bo_free_kernel(&bo, NULL, (void **)&msg); >> return r; >> } >> >> @@ -761,6 +763,7 @@ int amdgpu_vcn_enc_ring_test_ib(struct >> amdgpu_ring *ring, long timeout) >> error: >> dma_fence_put(fence); >> amdgpu_bo_unreserve(bo); >> - amdgpu_bo_unref(&bo); >> + amdgpu_bo_free_kernel(&bo, NULL, NULL); >> + >> return r; >> } >> -- >> 2.29.2 >>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c index ecaa2d7483b2..78a4dd9bf11f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c @@ -1151,6 +1151,6 @@ int amdgpu_vce_ring_test_ib(struct amdgpu_ring *ring, long timeout) error: dma_fence_put(fence); amdgpu_bo_unreserve(bo); - amdgpu_bo_unref(&bo); + amdgpu_bo_free_kernel(&bo, NULL, NULL); return r; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index 7e19a6656715..921b81054c1b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -465,6 +465,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, struct amdgpu_job *job; struct amdgpu_ib *ib; uint64_t addr; + void *msg = NULL; int i, r; r = amdgpu_job_alloc_with_ib(adev, 64, @@ -474,6 +475,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, ib = &job->ibs[0]; addr = amdgpu_bo_gpu_offset(bo); + msg = amdgpu_bo_kptr(bo); ib->ptr[0] = PACKET0(adev->vcn.internal.data0, 0); ib->ptr[1] = addr; ib->ptr[2] = PACKET0(adev->vcn.internal.data1, 0); @@ -492,7 +494,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, amdgpu_bo_fence(bo, f, false); amdgpu_bo_unreserve(bo); - amdgpu_bo_unref(&bo); + amdgpu_bo_free_kernel(&bo, NULL, (void **)&msg); if (fence) *fence = dma_fence_get(f); @@ -505,7 +507,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, err: amdgpu_bo_unreserve(bo); - amdgpu_bo_unref(&bo); + amdgpu_bo_free_kernel(&bo, NULL, (void **)&msg); return r; } @@ -761,6 +763,7 @@ int amdgpu_vcn_enc_ring_test_ib(struct amdgpu_ring *ring, long timeout) error: dma_fence_put(fence); amdgpu_bo_unreserve(bo); - amdgpu_bo_unref(&bo); + amdgpu_bo_free_kernel(&bo, NULL, NULL); + return r; }