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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Jesse
Zhang
Sent: Wednesday, November 6, 2019 2:31 PM
To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx
Cc: Zhang, Zhexi (Jesse) <Zhexi.Zhang@xxxxxxx>
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@xxxxxxx>
---
  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@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

_______________________________________________
amd-gfx mailing list
amd-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/amd-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux