[PATCH] drm/amd/powerplay: Protect backend resource when unload driver

Christian König ckoenig.leichtzumerken at gmail.com
Wed Nov 6 09:36:51 UTC 2019


Again that looks like the wrong approach to me.

How are the UVD/VCE power gate functions called here?

We most likely just forget to cancel/flush some background worker instead.

Regards,
Christian.

Am 06.11.19 um 10:13 schrieb Quan, Evan:
> I kind of feeling the changes of VCE and UVD(of vega10_hwmgr.c) are not needed as there is already lock protection in pp_dpm_powergate_uvd/vce.
> Can you help to confirm that?
>
> Regards,
> Evan
>> -----Original Message-----
>> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Jesse
>> Zhang
>> Sent: Wednesday, November 6, 2019 2:31 PM
>> To: amd-gfx at lists.freedesktop.org
>> Cc: Zhang, Zhexi (Jesse) <Zhexi.Zhang at amd.com>
>> Subject: [PATCH] drm/amd/powerplay: Protect backend resource when unload
>> driver
>>
>> Guest driver can be unloaded while engines still using some backend resources
>> which whould lead to guest driver unload failure.
>>
>> Need to add mutex lock to protect backend resources from concurrent
>> operations
>>
>> Before entering powergating mode, VCE and UVD need to check if backend
>> resources are still available.
>>
>> Change-Id: Icc34f93818743856c4efbbbf9480e4d9f2e0d1e1
>> Signed-off-by: Jesse Zhang <zhexi.zhang at amd.com>
>> ---
>>   drivers/gpu/drm/amd/powerplay/amd_powerplay.c      | 4 ++++
>>   drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 6 ++++++
>>   2 files changed, 10 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
>> b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
>> index 0314476..c82570b 100644
>> --- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
>> +++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
>> @@ -134,7 +134,9 @@ static int pp_hw_fini(void *handle)
>>   	struct amdgpu_device *adev = handle;
>>   	struct pp_hwmgr *hwmgr = adev->powerplay.pp_handle;
>>
>> +	mutex_lock(&hwmgr->smu_lock);
>>   	hwmgr_hw_fini(hwmgr);
>> +	mutex_unlock(&hwmgr->smu_lock);
>>
>>   	return 0;
>>   }
>> @@ -662,7 +664,9 @@ static int amd_powerplay_reset(void *handle)
>>   	struct pp_hwmgr *hwmgr = handle;
>>   	int ret;
>>
>> +	mutex_lock(&hwmgr->smu_lock);
>>   	ret = hwmgr_hw_fini(hwmgr);
>> +	mutex_unlock(&hwmgr->smu_lock);
>>   	if (ret)
>>   		return ret;
>>
>> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
>> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
>> index 46538233..f72ba70 100644
>> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
>> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
>> @@ -4616,6 +4616,9 @@ static void vega10_power_gate_vce(struct
>> pp_hwmgr *hwmgr, bool bgate)
>>   {
>>   	struct vega10_hwmgr *data = hwmgr->backend;
>>
>> +	if (!data)
>> +		return;
>> +
>>   	data->vce_power_gated = bgate;
>>   	vega10_enable_disable_vce_dpm(hwmgr, !bgate);
>>   }
>> @@ -4624,6 +4627,9 @@ static void vega10_power_gate_uvd(struct
>> pp_hwmgr *hwmgr, bool bgate)
>>   {
>>   	struct vega10_hwmgr *data = hwmgr->backend;
>>
>> +	if (!data)
>> +		return;
>> +
>>   	data->uvd_power_gated = bgate;
>>   	vega10_enable_disable_uvd_dpm(hwmgr, !bgate);
>>   }
>> --
>> 2.7.4
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx



More information about the amd-gfx mailing list