]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: remove oem i2c adapter on finish
authorGeoffrey McRae <geoffrey.mcrae@amd.com>
Thu, 28 Aug 2025 12:26:22 +0000 (22:26 +1000)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 9 Sep 2025 16:27:52 +0000 (12:27 -0400)
Fixes a bug where unbinding of the GPU would leave the oem i2c adapter
registered resulting in a null pointer dereference when applications try
to access the invalid device.

Fixes: 3d5470c97314 ("drm/amd/display/dm: add support for OEM i2c bus")
Cc: Harry Wentland <harry.wentland@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Geoffrey McRae <geoffrey.mcrae@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 89923fb7ead4fdd37b78dd49962d9bb5892403e6)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 352b3dcd0e0e1403d101d5d517b99c70f9c1e8e2..4e86370ae70599259533c9743a1ddd52fe69e399 100644 (file)
@@ -2913,6 +2913,17 @@ static int dm_oem_i2c_hw_init(struct amdgpu_device *adev)
        return 0;
 }
 
+static void dm_oem_i2c_hw_fini(struct amdgpu_device *adev)
+{
+       struct amdgpu_display_manager *dm = &adev->dm;
+
+       if (dm->oem_i2c) {
+               i2c_del_adapter(&dm->oem_i2c->base);
+               kfree(dm->oem_i2c);
+               dm->oem_i2c = NULL;
+       }
+}
+
 /**
  * dm_hw_init() - Initialize DC device
  * @ip_block: Pointer to the amdgpu_ip_block for this hw instance.
@@ -2963,7 +2974,7 @@ static int dm_hw_fini(struct amdgpu_ip_block *ip_block)
 {
        struct amdgpu_device *adev = ip_block->adev;
 
-       kfree(adev->dm.oem_i2c);
+       dm_oem_i2c_hw_fini(adev);
 
        amdgpu_dm_hpd_fini(adev);