Commit 1dfd2864 authored by Geoffrey McRae's avatar Geoffrey McRae Committed by Alex Deucher
Browse files

drm/amd/display: remove oem i2c adapter on finish



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: 3d5470c9 ("drm/amd/display/dm: add support for OEM i2c bus")
Cc: Harry Wentland <harry.wentland@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarGeoffrey McRae <geoffrey.mcrae@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 89923fb7)
Cc: stable@vger.kernel.org
parent 60f71f0d
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -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);