]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: create PTL sysfs after XGMI reset-on-init restore
authorPerry Yuan <perry.yuan@amd.com>
Tue, 3 Mar 2026 08:37:11 +0000 (16:37 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 11 May 2026 19:55:56 +0000 (15:55 -0400)
Create PTL sysfs in xgmi_reset_on_init restore path for MINIMAL_XGMI

Signed-off-by: Perry Yuan <perry.yuan@amd.com>
Reviewed-by: Yifan Zhang <yifan1.zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c
drivers/gpu/drm/amd/include/amdgpu_ptl.h

index a1db694063b1aeec6560aaa87845269752875eac..aec284c6b6d7d490c801fb18637462674a4f83e7 100644 (file)
@@ -1543,18 +1543,34 @@ static umode_t amdgpu_ptl_is_visible(struct kobject *kobj, struct attribute *att
 
 int amdgpu_ptl_sysfs_init(struct amdgpu_device *adev)
 {
-       if (!adev->psp.ptl.hw_supported)
+       struct amdgpu_ptl *ptl = &adev->psp.ptl;
+       int ret;
+
+       if (!ptl->hw_supported)
                return 0;
 
-       return sysfs_create_group(&adev->dev->kobj, &amdgpu_ptl_attr_group);
+       if (ptl->ptl_sysfs_created)
+               return 0;
+
+       ret = sysfs_create_group(&adev->dev->kobj, &amdgpu_ptl_attr_group);
+       if (!ret)
+               ptl->ptl_sysfs_created = true;
+
+       return ret;
 }
 
 void amdgpu_ptl_sysfs_fini(struct amdgpu_device *adev)
 {
-       if (!adev->psp.ptl.hw_supported)
+       struct amdgpu_ptl *ptl = &adev->psp.ptl;
+
+       if (!ptl->hw_supported)
+               return;
+
+       if (!ptl->ptl_sysfs_created)
                return;
 
        sysfs_remove_group(&adev->dev->kobj, &amdgpu_ptl_attr_group);
+       ptl->ptl_sysfs_created = false;
 }
 
 int psp_spatial_partition(struct psp_context *psp, int mode)
index 1b982b803e6f3c8b98360093a179cf92d4c6eca6..428c3cbc4a401bb4bb885c928a40af78d4432ca4 100644 (file)
@@ -90,6 +90,7 @@ static int amdgpu_reset_xgmi_reset_on_init_restore_hwctxt(
                        kgd2kfd_init_zone_device(tmp_adev);
                        amdgpu_amdkfd_device_init(tmp_adev);
                        amdgpu_amdkfd_drm_client_create(tmp_adev);
+                       amdgpu_ptl_sysfs_init(tmp_adev);
                }
        }
 
index dc74119d91c8ced06991682b4f59c998b98278ad..154b8da3bfa92771f2fadd98b070ee9a773ad7cd 100644 (file)
@@ -49,6 +49,7 @@ struct amdgpu_ptl {
        atomic_t                        disable_ref;
        struct mutex                    mutex;
        DECLARE_BITMAP(disable_bitmap, AMDGPU_PTL_DISABLE_MAX);
+       bool                            ptl_sysfs_created;
 };
 
 int amdgpu_ptl_perf_monitor_ctrl(struct amdgpu_device *adev, u32 req_code,