FAILED: patch "[PATCH] drm/amd/powerplay: add sensor lock support for smu" failed to apply to 5.3-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.3-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 00921306751001b539ebee34171485cd9c749024 Mon Sep 17 00:00:00 2001
From: Kevin Wang <[email protected]>
Date: Thu, 26 Sep 2019 16:22:13 +0800
Subject: [PATCH] drm/amd/powerplay: add sensor lock support for smu
when multithreading access sysfs of amdgpu_pm_info at the sametime. the swsmu driver cause smu firmware hang.
eg:
single thread access:
Message A + Param A ==> right
Message B + Param B ==> right
Message C + Param C ==> right
multithreading access:
Message A + Param B ==> error
Message B + Param A ==> error
Message C + Param C ==> right
the patch will add sensor lock(mutex) to avoid this error.
drivers/gpu/drm/amd/powerplay/amdgpu_smu.c +2 -0
@@ -843,6 +843,8 @@ static int smu_sw_init(void *handle) smu->smu_baco.state =SMU_BACO_STATE_EXIT ; smu->smu_baco.platform_support = false; +mutex_init (&smu->sensor_lock); + smu->watermarks_bitmap =0 ; smu->power_profile_mode =PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT ; smu->default_power_profile_mode =PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT ;
drivers/gpu/drm/amd/powerplay/arcturus_ppt.c +2 -0
@@ -1018,6 +1018,7 @@ static int arcturus_read_sensor(struct smu_context *smu,if (!data || !size)return -EINVAL ; +mutex_lock (&smu->sensor_lock);switch (sensor) {case AMDGPU_PP_SENSOR_MAX_FAN_RPM : *(uint32_t *)data = pptable->FanMaximumRpm;
@@ -1044,6 +1045,7 @@ static int arcturus_read_sensor(struct smu_context *smu,default : ret =smu_smc_read_sensor (smu, sensor, data, size); } +mutex_unlock (&smu->sensor_lock);return ret; }
drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h +1 -0
@@ -344,6 +344,7 @@ struct smu_contextconst struct smu_funcs *funcs;const struct pptable_funcs *ppt_funcs;struct mutex mutex; +struct mutex sensor_lock;uint64_t pool_size;struct smu_table_context smu_table;
drivers/gpu/drm/amd/powerplay/navi10_ppt.c +2 -0
@@ -1386,6 +1386,7 @@ static int navi10_read_sensor(struct smu_context *smu,if (!data || !size)return -EINVAL ; +mutex_lock (&smu->sensor_lock);switch (sensor) {case AMDGPU_PP_SENSOR_MAX_FAN_RPM : *(uint32_t *)data = pptable->FanMaximumRpm;
@@ -1409,6 +1410,7 @@ static int navi10_read_sensor(struct smu_context *smu,default : ret =smu_smc_read_sensor (smu, sensor, data, size); } +mutex_unlock (&smu->sensor_lock);return ret; }
drivers/gpu/drm/amd/powerplay/vega20_ppt.c +2 -0
@@ -3023,6 +3023,7 @@ static int vega20_read_sensor(struct smu_context *smu,if (!data || !size)return -EINVAL ; +mutex_lock (&smu->sensor_lock);switch (sensor) {case AMDGPU_PP_SENSOR_MAX_FAN_RPM : *(uint32_t *)data = pptable->FanMaximumRpm;
@@ -3048,6 +3049,7 @@ static int vega20_read_sensor(struct smu_context *smu,default : ret =smu_smc_read_sensor (smu, sensor, data, size); } +mutex_unlock (&smu->sensor_lock);return ret; }