Please see inline. Best Regards Rex ________________________________ From: Alex Deucher <alexdeucher@xxxxxxxxx> Sent: Thursday, March 22, 2018 9:17 PM To: Zhu, Rex Cc: amd-gfx list Subject: Re: [PATCH 3/6] drm/amd/pp: Lock powerplay when reset pp table On Thu, Mar 22, 2018 at 7:40 AM, Rex Zhu <Rex.Zhu at amd.com> wrote: > Change-Id: Ib02cd71593bee9606822a466a56f2d01ac2e04cc > Signed-off-by: Rex Zhu <Rex.Zhu at amd.com> Please include a commit description. It's not clear to me what's happening here. Alex > --- > drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 28 +++++++++++++-------------- > 1 file changed, 14 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c > index 5d7d9ec..1ae4905 100644 > --- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c > +++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c > @@ -31,8 +31,6 @@ > #include "amdgpu.h" > #include "hwmgr.h" > > -static int pp_dpm_dispatch_tasks(void *handle, enum amd_pp_task task_id, > - enum amd_pm_state_type *user_state); > > static const struct amd_pm_funcs pp_dpm_funcs; > > @@ -146,10 +144,12 @@ static int pp_late_init(void *handle) > struct amdgpu_device *adev = handle; > struct pp_hwmgr *hwmgr = adev->powerplay.pp_handle; > > - if (hwmgr && hwmgr->pm_en) > - pp_dpm_dispatch_tasks(hwmgr, > + if (hwmgr && hwmgr->pm_en) { > + mutex_lock(&hwmgr->smu_lock); > + hwmgr_handle_task(hwmgr, > AMD_PP_TASK_COMPLETE_INIT, NULL); > - > + mutex_unlock(&hwmgr->smu_lock); > + } > return 0; > } Rex : use hwmgr_handle_task instand of pp_dpm_dispatch_tasks. because i think it is not make sense that call pp_function in ip_function. > @@ -620,7 +620,7 @@ static int amd_powerplay_reset(void *handle) > static int pp_dpm_set_pp_table(void *handle, const char *buf, size_t size) > { > struct pp_hwmgr *hwmgr = handle; > - int ret = 0; > + int ret = -ENOMEM; > > if (!hwmgr || !hwmgr->pm_en) > return -EINVAL; > @@ -630,28 +630,28 @@ static int pp_dpm_set_pp_table(void *handle, const char *buf, size_t size) > hwmgr->hardcode_pp_table = kmemdup(hwmgr->soft_pp_table, > hwmgr->soft_pp_table_size, > GFP_KERNEL); > - if (!hwmgr->hardcode_pp_table) { > - mutex_unlock(&hwmgr->smu_lock); > - return -ENOMEM; > - } > + if (!hwmgr->hardcode_pp_table) > + goto err; > } > > memcpy(hwmgr->hardcode_pp_table, buf, size); > > hwmgr->soft_pp_table = hwmgr->hardcode_pp_table; > - mutex_unlock(&hwmgr->smu_lock); > > ret = amd_powerplay_reset(handle); > if (ret) > - return ret; > + goto err; > > if (hwmgr->hwmgr_func->avfs_control) { > ret = hwmgr->hwmgr_func->avfs_control(hwmgr, false); > if (ret) > - return ret; > + goto err; > } > - > + mutex_unlock(&hwmgr->smu_lock); > return 0; > +err: > + mutex_unlock(&hwmgr->smu_lock); > + return ret; > } Rex: unlock mutex until set pp table complete to avoid other pp functions were called simultaneously<http://www.baidu.com/link?url=8RpXVOm53HQyZI9h-ZIs8Ipio9NEDj98vxJiiM0Wx4hbUUpanLuj7jZHEnm0Javd7_rpySIGVAwaxX_ICV-y2nDz_TZqF8mzUGZT8RPrw2WCcNsGFsoAh9nirArCSm9s>. > static int pp_dpm_force_clock_level(void *handle, > -- > 1.9.1 > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org. > https://lists.freedesktop.org/mailman/listinfo/amd-gfx amd-gfx Info Page - freedesktop.org<https://lists.freedesktop.org/mailman/listinfo/amd-gfx> lists.freedesktop.org Subscribing to amd-gfx: Subscribe to amd-gfx by filling out the following form. Use of all freedesktop.org lists is subject to our Code of ... -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20180322/95b90e71/attachment.html>