]> git.baikalelectronics.ru Git - kernel.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:33:54 +0000 (13:33 +0100)
[ Upstream commit 9bb2436be14e3066d88860386c9c74fecd2753d1 ]

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 087147f09933aa6f20698a6fd3fcc8729a097ddb..3b8825a3e233668be7627eeb957eefec0374eff4 100644 (file)
@@ -1695,7 +1695,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;
@@ -1762,7 +1762,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;
@@ -1830,7 +1830,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;