]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amdgpu: fix ttm_bo calltrace warning in psp_hw_fini
authorHoratio Zhang <Hongkun.Zhang@amd.com>
Fri, 24 Feb 2023 05:55:44 +0000 (13:55 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Mar 2023 12:37:56 +0000 (13:37 +0100)
[ Upstream commit 23f4a2d29ba57bf88095f817de5809d427fcbe7e ]

The call trace occurs when the amdgpu is removed after
the mode1 reset. During mode1 reset, from suspend to resume,
there is no need to reinitialize the ta firmware buffer
which caused the bo pin_count increase redundantly.

[  489.885525] Call Trace:
[  489.885525]  <TASK>
[  489.885526]  amdttm_bo_put+0x34/0x50 [amdttm]
[  489.885529]  amdgpu_bo_free_kernel+0xe8/0x130 [amdgpu]
[  489.885620]  psp_free_shared_bufs+0xb7/0x150 [amdgpu]
[  489.885720]  psp_hw_fini+0xce/0x170 [amdgpu]
[  489.885815]  amdgpu_device_fini_hw+0x2ff/0x413 [amdgpu]
[  489.885960]  ? blocking_notifier_chain_unregister+0x56/0xb0
[  489.885962]  amdgpu_driver_unload_kms+0x51/0x60 [amdgpu]
[  489.886049]  amdgpu_pci_remove+0x5a/0x140 [amdgpu]
[  489.886132]  ? __pm_runtime_resume+0x60/0x90
[  489.886134]  pci_device_remove+0x3e/0xb0
[  489.886135]  __device_release_driver+0x1ab/0x2a0
[  489.886137]  driver_detach+0xf3/0x140
[  489.886138]  bus_remove_driver+0x6c/0xf0
[  489.886140]  driver_unregister+0x31/0x60
[  489.886141]  pci_unregister_driver+0x40/0x90
[  489.886142]  amdgpu_exit+0x15/0x451 [amdgpu]

Signed-off-by: Horatio Zhang <Hongkun.Zhang@amd.com>
Signed-off-by: longlyao <Longlong.Yao@amd.com>
Reviewed-by: Guchun Chen <guchun.chen@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c

index ba092072308fac6989fbb5521648b63c9b4dbaff..1b4105110f39809b919532d9ad580b767d2223d7 100644 (file)
@@ -1685,7 +1685,7 @@ static int psp_hdcp_initialize(struct psp_context *psp)
        psp->hdcp_context.context.mem_context.shared_mem_size = PSP_HDCP_SHARED_MEM_SIZE;
        psp->hdcp_context.context.ta_load_type = GFX_CMD_ID_LOAD_TA;
 
-       if (!psp->hdcp_context.context.initialized) {
+       if (!psp->hdcp_context.context.mem_context.shared_buf) {
                ret = psp_ta_init_shared_buf(psp, &psp->hdcp_context.context.mem_context);
                if (ret)
                        return ret;
@@ -1752,7 +1752,7 @@ static int psp_dtm_initialize(struct psp_context *psp)
        psp->dtm_context.context.mem_context.shared_mem_size = PSP_DTM_SHARED_MEM_SIZE;
        psp->dtm_context.context.ta_load_type = GFX_CMD_ID_LOAD_TA;
 
-       if (!psp->dtm_context.context.initialized) {
+       if (!psp->dtm_context.context.mem_context.shared_buf) {
                ret = psp_ta_init_shared_buf(psp, &psp->dtm_context.context.mem_context);
                if (ret)
                        return ret;
@@ -1820,7 +1820,7 @@ static int psp_rap_initialize(struct psp_context *psp)
        psp->rap_context.context.mem_context.shared_mem_size = PSP_RAP_SHARED_MEM_SIZE;
        psp->rap_context.context.ta_load_type = GFX_CMD_ID_LOAD_TA;
 
-       if (!psp->rap_context.context.initialized) {
+       if (!psp->rap_context.context.mem_context.shared_buf) {
                ret = psp_ta_init_shared_buf(psp, &psp->rap_context.context.mem_context);
                if (ret)
                        return ret;