Message ID | 20210811165211.6811-1-michel@daenzer.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] drm/amdgpu: Use mod_delayed_work in amdgpu_gfx_off_ctrl | expand |
[AMD Official Use Only] Reviewed-by: Evan Quan <evan.quan@amd.com> > -----Original Message----- > From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of > Michel Dänzer > Sent: Thursday, August 12, 2021 12:52 AM > To: Deucher, Alexander <Alexander.Deucher@amd.com>; Koenig, Christian > <Christian.Koenig@amd.com> > Cc: Liu, Leo <Leo.Liu@amd.com>; Zhu, James <James.Zhu@amd.com>; amd- > gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org > Subject: [PATCH 1/2] drm/amdgpu: Use mod_delayed_work in > amdgpu_gfx_off_ctrl > > From: Michel Dänzer <mdaenzer@redhat.com> > > In contrast to schedule_delayed_work, this pushes back the work if it > was already scheduled before. Specific behaviour change: > > Before: > > amdgpu_device_delay_enable_gfx_off ran ~100 ms after the first time > GFXOFF was disabled and re-enabled, even if GFXOFF was disabled and > re-enabled again during those 100 ms. > > After: > > amdgpu_device_delay_enable_gfx_off runs ~100 ms after the last time > GFXOFF is disabled and re-enabled. > > The former resulted in frame drops / stutter with the upcoming mutter > 41 release on Navi 14, due to constantly enabling GFXOFF in the HW and > disabling it again (for getting the GPU clock counter). > > Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > index a0be0772c8b3..9cfef56b2aee 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > @@ -569,7 +569,7 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_device > *adev, bool enable) > adev->gfx.gfx_off_req_count--; > > if (enable && !adev->gfx.gfx_off_state && !adev- > >gfx.gfx_off_req_count) { > - schedule_delayed_work(&adev->gfx.gfx_off_delay_work, > GFX_OFF_DELAY_ENABLE); > + mod_delayed_work(system_wq, &adev- > >gfx.gfx_off_delay_work, GFX_OFF_DELAY_ENABLE); > } else if (!enable && adev->gfx.gfx_off_state) { > if (!amdgpu_dpm_set_powergating_by_smu(adev, > AMD_IP_BLOCK_TYPE_GFX, false)) { > adev->gfx.gfx_off_state = false; > -- > 2.32.0
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c index a0be0772c8b3..9cfef56b2aee 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c @@ -569,7 +569,7 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable) adev->gfx.gfx_off_req_count--; if (enable && !adev->gfx.gfx_off_state && !adev->gfx.gfx_off_req_count) { - schedule_delayed_work(&adev->gfx.gfx_off_delay_work, GFX_OFF_DELAY_ENABLE); + mod_delayed_work(system_wq, &adev->gfx.gfx_off_delay_work, GFX_OFF_DELAY_ENABLE); } else if (!enable && adev->gfx.gfx_off_state) { if (!amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_GFX, false)) { adev->gfx.gfx_off_state = false;