extends the critical section of 'ptl_mutex' to cover the PTL sysfs update operation.
Signed-off-by: Perry Yuan <[email protected]> Reviewed-by: Harish Kasiviswanathan <[email protected]> --- drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index 682a0e4adafd..982494abbf1d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -1336,14 +1336,16 @@ static ssize_t ptl_enable_store(struct device *dev, uint32_t ptl_state, fmt1, fmt2; int ret; - if (sysfs_streq(buf, "enabled") || sysfs_streq(buf, "1")) + mutex_lock(&psp->ptl_mutex); + if (sysfs_streq(buf, "enabled") || sysfs_streq(buf, "1")) { enable = true; - else if (sysfs_streq(buf, "disabled") || sysfs_streq(buf, "0")) + } else if (sysfs_streq(buf, "disabled") || sysfs_streq(buf, "0")) { enable = false; - else + } else { + mutex_unlock(&psp->ptl_mutex); return -EINVAL; + } - mutex_lock(&psp->ptl_mutex); fmt1 = psp->ptl_fmt1; fmt2 = psp->ptl_fmt2; ptl_state = enable ? 1 : 0; @@ -1390,17 +1392,22 @@ static ssize_t ptl_format_store(struct device *dev, if (!psp->ptl_enabled) return -EPERM; + mutex_lock(&psp->ptl_mutex); /* Parse input, expecting "FMT1,FMT2" */ - if (sscanf(buf, "%7[^,],%7s", fmt1_str, fmt2_str) != 2) + if (sscanf(buf, "%7[^,],%7s", fmt1_str, fmt2_str) != 2) { + mutex_unlock(&psp->ptl_mutex); return -EINVAL; + } fmt1_enum = str_to_ptl_fmt(fmt1_str); fmt2_enum = str_to_ptl_fmt(fmt2_str); if (fmt1_enum >= AMDGPU_PTL_FMT_INVALID || fmt2_enum >= AMDGPU_PTL_FMT_INVALID || - fmt1_enum == fmt2_enum) + fmt1_enum == fmt2_enum) { + mutex_unlock(&psp->ptl_mutex); return -EINVAL; + } ptl_state = psp->ptl_enabled; fmt1 = fmt1_enum; @@ -1408,8 +1415,10 @@ static ssize_t ptl_format_store(struct device *dev, ret = psp_performance_monitor_hw(psp, PSP_PTL_PERF_MON_SET, &ptl_state, &fmt1, &fmt2); if (ret) { dev_err(adev->dev, "Failed to update PTL err = %d\n", ret); + mutex_unlock(&psp->ptl_mutex); return ret; } + mutex_unlock(&psp->ptl_mutex); return count; } -- 2.34.1
