All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Quan, Evan" <Evan.Quan@amd.com>
To: "Chen, Guchun" <Guchun.Chen@amd.com>,
	"amd-gfx@lists.freedesktop.org" <amd-gfx@lists.freedesktop.org>
Cc: "Deucher, Alexander" <Alexander.Deucher@amd.com>,
	"Lazar, Lijo" <Lijo.Lazar@amd.com>
Subject: RE: [PATCH V2 1/7] drm/amd/pm: drop unneeded lock protection smu->mutex
Date: Fri, 21 Jan 2022 07:09:00 +0000	[thread overview]
Message-ID: <DM6PR12MB2619065891D4ED20AB464769E45B9@DM6PR12MB2619.namprd12.prod.outlook.com> (raw)
In-Reply-To: <DM5PR12MB2469529EEF35A5313E3DD3D9F15A9@DM5PR12MB2469.namprd12.prod.outlook.com>

[Public]



> -----Original Message-----
> From: Chen, Guchun <Guchun.Chen@amd.com>
> Sent: Thursday, January 20, 2022 9:38 PM
> To: Quan, Evan <Evan.Quan@amd.com>; amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>; Lazar, Lijo
> <Lijo.Lazar@amd.com>
> Subject: RE: [PATCH V2 1/7] drm/amd/pm: drop unneeded lock protection
> smu->mutex
> 
> [Public]
> 
> 	if (!smu_table->hardcode_pptable)
>  		smu_table->hardcode_pptable = kzalloc(size, GFP_KERNEL);
> -	if (!smu_table->hardcode_pptable) {
> -		ret = -ENOMEM;
> -		goto failed;
> -	}
> +	if (!smu_table->hardcode_pptable)
> +		return -ENOMEM;
> 
> I guess it's better to put the second check of hardcode_pptable into first if
> condition section like:
> if (!smu_table->hardcode_pptable) {
> 	smu_table->hardcode_pptable = kzalloc(size, GFP_KERNEL);
> 	if (!smu_table->hardcode_pptable)
> 		return -ENOMEM;
> }
[Quan, Evan] Thanks! Fixed in V3.

BR
Evan
> 
> 
> Regards,
> Guchun
> 
> -----Original Message-----
> From: Quan, Evan <Evan.Quan@amd.com>
> Sent: Monday, January 17, 2022 1:42 PM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher@amd.com>; Lazar, Lijo
> <Lijo.Lazar@amd.com>; Chen, Guchun <Guchun.Chen@amd.com>; Quan,
> Evan <Evan.Quan@amd.com>
> Subject: [PATCH V2 1/7] drm/amd/pm: drop unneeded lock protection smu-
> >mutex
> 
> As all those APIs are already protected either by adev->pm.mutex or smu-
> >message_lock.
> 
> Signed-off-by: Evan Quan <evan.quan@amd.com>
> Change-Id: I1db751fba9caabc5ca1314992961d3674212f9b0
> ---
>  drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c     | 315 ++----------------
>  drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h |   1 -
>  .../gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c |   2 -
>  .../gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c   |   2 -
>  .../amd/pm/swsmu/smu11/sienna_cichlid_ppt.c   |   2 -
>  .../drm/amd/pm/swsmu/smu13/aldebaran_ppt.c    |   2 -
>  6 files changed, 25 insertions(+), 299 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> index 828cb932f6a9..411f03eb4523 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> @@ -55,8 +55,7 @@ static int smu_force_smuclk_levels(struct smu_context
> *smu,
>  				   uint32_t mask);
>  static int smu_handle_task(struct smu_context *smu,
>  			   enum amd_dpm_forced_level level,
> -			   enum amd_pp_task task_id,
> -			   bool lock_needed);
> +			   enum amd_pp_task task_id);
>  static int smu_reset(struct smu_context *smu);  static int
> smu_set_fan_speed_pwm(void *handle, u32 speed);  static int
> smu_set_fan_control_mode(void *handle, u32 value); @@ -68,36 +67,22
> @@ static int smu_sys_get_pp_feature_mask(void *handle,
>  				       char *buf)
>  {
>  	struct smu_context *smu = handle;
> -	int size = 0;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
> -	size = smu_get_pp_feature_mask(smu, buf);
> -
> -	mutex_unlock(&smu->mutex);
> -
> -	return size;
> +	return smu_get_pp_feature_mask(smu, buf);
>  }
> 
>  static int smu_sys_set_pp_feature_mask(void *handle,
>  				       uint64_t new_mask)
>  {
>  	struct smu_context *smu = handle;
> -	int ret = 0;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
> -	ret = smu_set_pp_feature_mask(smu, new_mask);
> -
> -	mutex_unlock(&smu->mutex);
> -
> -	return ret;
> +	return smu_set_pp_feature_mask(smu, new_mask);
>  }
> 
>  int smu_get_status_gfxoff(struct smu_context *smu, uint32_t *value) @@
> -117,16 +102,12 @@ int smu_set_soft_freq_range(struct smu_context *smu,
> {
>  	int ret = 0;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->set_soft_freq_limited_range)
>  		ret = smu->ppt_funcs->set_soft_freq_limited_range(smu,
>  								  clk_type,
>  								  min,
>  								  max);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -140,16 +121,12 @@ int smu_get_dpm_freq_range(struct smu_context
> *smu,
>  	if (!min && !max)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->get_dpm_ultimate_freq)
>  		ret = smu->ppt_funcs->get_dpm_ultimate_freq(smu,
>  							    clk_type,
>  							    min,
>  							    max);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -482,7 +459,6 @@ static int smu_sys_get_pp_table(void *handle,  {
>  	struct smu_context *smu = handle;
>  	struct smu_table_context *smu_table = &smu->smu_table;
> -	uint32_t powerplay_table_size;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> @@ -490,18 +466,12 @@ static int smu_sys_get_pp_table(void *handle,
>  	if (!smu_table->power_play_table && !smu_table-
> >hardcode_pptable)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu_table->hardcode_pptable)
>  		*table = smu_table->hardcode_pptable;
>  	else
>  		*table = smu_table->power_play_table;
> 
> -	powerplay_table_size = smu_table->power_play_table_size;
> -
> -	mutex_unlock(&smu->mutex);
> -
> -	return powerplay_table_size;
> +	return smu_table->power_play_table_size;
>  }
> 
>  static int smu_sys_set_pp_table(void *handle, @@ -521,13 +491,10 @@
> static int smu_sys_set_pp_table(void *handle,
>  		return -EIO;
>  	}
> 
> -	mutex_lock(&smu->mutex);
>  	if (!smu_table->hardcode_pptable)
>  		smu_table->hardcode_pptable = kzalloc(size, GFP_KERNEL);
> -	if (!smu_table->hardcode_pptable) {
> -		ret = -ENOMEM;
> -		goto failed;
> -	}
> +	if (!smu_table->hardcode_pptable)
> +		return -ENOMEM;
> 
>  	memcpy(smu_table->hardcode_pptable, buf, size);
>  	smu_table->power_play_table = smu_table->hardcode_pptable;
> @@ -545,8 +512,6 @@ static int smu_sys_set_pp_table(void *handle,
> 
>  	smu->uploading_custom_pp_table = false;
> 
> -failed:
> -	mutex_unlock(&smu->mutex);
>  	return ret;
>  }
> 
> @@ -633,7 +598,6 @@ static int smu_early_init(void *handle)
>  	smu->adev = adev;
>  	smu->pm_enabled = !!amdgpu_dpm;
>  	smu->is_apu = false;
> -	mutex_init(&smu->mutex);
>  	mutex_init(&smu->smu_baco.mutex);
>  	smu->smu_baco.state = SMU_BACO_STATE_EXIT;
>  	smu->smu_baco.platform_support = false; @@ -736,8 +700,7 @@
> static int smu_late_init(void *handle)
> 
>  	smu_handle_task(smu,
>  			smu->smu_dpm.dpm_level,
> -			AMD_PP_TASK_COMPLETE_INIT,
> -			false);
> +			AMD_PP_TASK_COMPLETE_INIT);
> 
>  	smu_restore_dpm_user_profile(smu);
> 
> @@ -1013,12 +976,8 @@ static void smu_interrupt_work_fn(struct
> work_struct *work)
>  	struct smu_context *smu = container_of(work, struct smu_context,
>  					       interrupt_work);
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs && smu->ppt_funcs->interrupt_work)
>  		smu->ppt_funcs->interrupt_work(smu);
> -
> -	mutex_unlock(&smu->mutex);
>  }
> 
>  static int smu_sw_init(void *handle)
> @@ -1632,8 +1591,6 @@ static int smu_display_configuration_change(void
> *handle,
>  	if (!display_config)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	smu_set_min_dcef_deep_sleep(smu,
>  				    display_config-
> >min_dcef_deep_sleep_set_clk / 100);
> 
> @@ -1642,8 +1599,6 @@ static int smu_display_configuration_change(void
> *handle,
>  			num_of_active_display++;
>  	}
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return 0;
>  }
> 
> @@ -1766,22 +1721,18 @@ static int
> smu_adjust_power_state_dynamic(struct smu_context *smu,
> 
>  static int smu_handle_task(struct smu_context *smu,
>  			   enum amd_dpm_forced_level level,
> -			   enum amd_pp_task task_id,
> -			   bool lock_needed)
> +			   enum amd_pp_task task_id)
>  {
>  	int ret = 0;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	if (lock_needed)
> -		mutex_lock(&smu->mutex);
> -
>  	switch (task_id) {
>  	case AMD_PP_TASK_DISPLAY_CONFIG_CHANGE:
>  		ret = smu_pre_display_config_changed(smu);
>  		if (ret)
> -			goto out;
> +			return ret;
>  		ret = smu_adjust_power_state_dynamic(smu, level, false);
>  		break;
>  	case AMD_PP_TASK_COMPLETE_INIT:
> @@ -1792,10 +1743,6 @@ static int smu_handle_task(struct smu_context
> *smu,
>  		break;
>  	}
> 
> -out:
> -	if (lock_needed)
> -		mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -1806,7 +1753,7 @@ static int smu_handle_dpm_task(void *handle,
>  	struct smu_context *smu = handle;
>  	struct smu_dpm_context *smu_dpm = &smu->smu_dpm;
> 
> -	return smu_handle_task(smu, smu_dpm->dpm_level, task_id, true);
> +	return smu_handle_task(smu, smu_dpm->dpm_level, task_id);
> 
>  }
> 
> @@ -1825,8 +1772,6 @@ static int smu_switch_power_profile(void *handle,
>  	if (!(type < PP_SMC_POWER_PROFILE_CUSTOM))
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (!en) {
>  		smu->workload_mask &= ~(1 << smu-
> >workload_prority[type]);
>  		index = fls(smu->workload_mask);
> @@ -1843,8 +1788,6 @@ static int smu_switch_power_profile(void *handle,
>  		smu_dpm_ctx->dpm_level !=
> AMD_DPM_FORCED_LEVEL_PERF_DETERMINISM)
>  		smu_bump_power_profile_mode(smu, &workload, 0);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return 0;
>  }
> 
> @@ -1852,7 +1795,6 @@ static enum amd_dpm_forced_level
> smu_get_performance_level(void *handle)  {
>  	struct smu_context *smu = handle;
>  	struct smu_dpm_context *smu_dpm_ctx = &(smu->smu_dpm);
> -	enum amd_dpm_forced_level level;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> @@ -1860,11 +1802,7 @@ static enum amd_dpm_forced_level
> smu_get_performance_level(void *handle)
>  	if (!smu->is_apu && !smu_dpm_ctx->dpm_context)
>  		return -EINVAL;
> 
> -	mutex_lock(&(smu->mutex));
> -	level = smu_dpm_ctx->dpm_level;
> -	mutex_unlock(&(smu->mutex));
> -
> -	return level;
> +	return smu_dpm_ctx->dpm_level;
>  }
> 
>  static int smu_force_performance_level(void *handle, @@ -1880,19
> +1818,12 @@ static int smu_force_performance_level(void *handle,
>  	if (!smu->is_apu && !smu_dpm_ctx->dpm_context)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	ret = smu_enable_umd_pstate(smu, &level);
> -	if (ret) {
> -		mutex_unlock(&smu->mutex);
> +	if (ret)
>  		return ret;
> -	}
> 
>  	ret = smu_handle_task(smu, level,
> -			      AMD_PP_TASK_READJUST_POWER_STATE,
> -			      false);
> -
> -	mutex_unlock(&smu->mutex);
> +			      AMD_PP_TASK_READJUST_POWER_STATE);
> 
>  	/* reset user dpm clock state */
>  	if (!ret && smu_dpm_ctx->dpm_level !=
> AMD_DPM_FORCED_LEVEL_MANUAL) { @@ -1906,16 +1837,11 @@ static int
> smu_force_performance_level(void *handle,  static int
> smu_set_display_count(void *handle, uint32_t count)  {
>  	struct smu_context *smu = handle;
> -	int ret = 0;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -	ret = smu_init_display_count(smu, count);
> -	mutex_unlock(&smu->mutex);
> -
> -	return ret;
> +	return smu_init_display_count(smu, count);
>  }
> 
>  static int smu_force_smuclk_levels(struct smu_context *smu, @@ -1933,8
> +1859,6 @@ static int smu_force_smuclk_levels(struct smu_context *smu,
>  		return -EINVAL;
>  	}
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs && smu->ppt_funcs->force_clk_levels) {
>  		ret = smu->ppt_funcs->force_clk_levels(smu, clk_type,
> mask);
>  		if (!ret && !(smu->user_dpm_profile.flags &
> SMU_DPM_USER_PROFILE_RESTORE)) { @@ -1943,8 +1867,6 @@ static int
> smu_force_smuclk_levels(struct smu_context *smu,
>  		}
>  	}
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2003,14 +1925,10 @@ static int smu_set_mp1_state(void *handle,
>  	if (!smu->pm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs &&
>  	    smu->ppt_funcs->set_mp1_state)
>  		ret = smu->ppt_funcs->set_mp1_state(smu, mp1_state);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2026,14 +1944,10 @@ static int smu_set_df_cstate(void *handle,
>  	if (!smu->ppt_funcs || !smu->ppt_funcs->set_df_cstate)
>  		return 0;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	ret = smu->ppt_funcs->set_df_cstate(smu, state);
>  	if (ret)
>  		dev_err(smu->adev->dev, "[SetDfCstate] failed!\n");
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2047,38 +1961,25 @@ int smu_allow_xgmi_power_down(struct
> smu_context *smu, bool en)
>  	if (!smu->ppt_funcs || !smu->ppt_funcs->allow_xgmi_power_down)
>  		return 0;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	ret = smu->ppt_funcs->allow_xgmi_power_down(smu, en);
>  	if (ret)
>  		dev_err(smu->adev->dev, "[AllowXgmiPowerDown]
> failed!\n");
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
>  int smu_write_watermarks_table(struct smu_context *smu)  {
> -	int ret = 0;
> -
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
> -	ret = smu_set_watermarks_table(smu, NULL);
> -
> -	mutex_unlock(&smu->mutex);
> -
> -	return ret;
> +	return smu_set_watermarks_table(smu, NULL);
>  }
> 
>  static int smu_set_watermarks_for_clock_ranges(void *handle,
>  					       struct pp_smu_wm_range_sets
> *clock_ranges)  {
>  	struct smu_context *smu = handle;
> -	int ret = 0;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> @@ -2086,13 +1987,7 @@ static int
> smu_set_watermarks_for_clock_ranges(void *handle,
>  	if (smu->disable_watermark)
>  		return 0;
> 
> -	mutex_lock(&smu->mutex);
> -
> -	ret = smu_set_watermarks_table(smu, clock_ranges);
> -
> -	mutex_unlock(&smu->mutex);
> -
> -	return ret;
> +	return smu_set_watermarks_table(smu, clock_ranges);
>  }
> 
>  int smu_set_ac_dc(struct smu_context *smu) @@ -2106,14 +2001,12 @@
> int smu_set_ac_dc(struct smu_context *smu)
>  	if (smu->dc_controlled_by_gpio)
>  		return 0;
> 
> -	mutex_lock(&smu->mutex);
>  	ret = smu_set_power_source(smu,
>  				   smu->adev->pm.ac_power ?
> SMU_POWER_SOURCE_AC :
>  				   SMU_POWER_SOURCE_DC);
>  	if (ret)
>  		dev_err(smu->adev->dev, "Failed to switch to %s mode!\n",
>  		       smu->adev->pm.ac_power ? "AC" : "DC");
> -	mutex_unlock(&smu->mutex);
> 
>  	return ret;
>  }
> @@ -2200,13 +2093,9 @@ static int smu_set_gfx_cgpg(struct smu_context
> *smu, bool enabled)  {
>  	int ret = 0;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->set_gfx_cgpg)
>  		ret = smu->ppt_funcs->set_gfx_cgpg(smu, enabled);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2224,8 +2113,6 @@ static int smu_set_fan_speed_rpm(void *handle,
> uint32_t speed)
>  	if (speed == U32_MAX)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	ret = smu->ppt_funcs->set_fan_speed_rpm(smu, speed);
>  	if (!ret && !(smu->user_dpm_profile.flags &
> SMU_DPM_USER_PROFILE_RESTORE)) {
>  		smu->user_dpm_profile.flags |=
> SMU_CUSTOM_FAN_SPEED_RPM; @@ -2236,8 +2123,6 @@ static int
> smu_set_fan_speed_rpm(void *handle, uint32_t speed)
>  		smu->user_dpm_profile.fan_speed_pwm = 0;
>  	}
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2293,8 +2178,6 @@ int smu_get_power_limit(void *handle,
>  		break;
>  	}
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (limit_type != SMU_DEFAULT_PPT_LIMIT) {
>  		if (smu->ppt_funcs->get_ppt_limit)
>  			ret = smu->ppt_funcs->get_ppt_limit(smu, limit,
> limit_type, limit_level); @@ -2328,8 +2211,6 @@ int
> smu_get_power_limit(void *handle,
>  		}
>  	}
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2342,21 +2223,16 @@ static int smu_set_power_limit(void *handle,
> uint32_t limit)
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	limit &= (1<<24)-1;
>  	if (limit_type != SMU_DEFAULT_PPT_LIMIT)
> -		if (smu->ppt_funcs->set_power_limit) {
> -			ret = smu->ppt_funcs->set_power_limit(smu,
> limit_type, limit);
> -			goto out;
> -		}
> +		if (smu->ppt_funcs->set_power_limit)
> +			return smu->ppt_funcs->set_power_limit(smu,
> limit_type, limit);
> 
>  	if (limit > smu->max_power_limit) {
>  		dev_err(smu->adev->dev,
>  			"New power limit (%d) is over the max
> allowed %d\n",
>  			limit, smu->max_power_limit);
> -		ret = -EINVAL;
> -		goto out;
> +		return -EINVAL;
>  	}
> 
>  	if (!limit)
> @@ -2368,9 +2244,6 @@ static int smu_set_power_limit(void *handle,
> uint32_t limit)
>  			smu->user_dpm_profile.power_limit = limit;
>  	}
> 
> -out:
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2381,13 +2254,9 @@ static int smu_print_smuclk_levels(struct
> smu_context *smu, enum smu_clk_type cl
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->print_clk_levels)
>  		ret = smu->ppt_funcs->print_clk_levels(smu, clk_type, buf);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2444,14 +2313,10 @@ static int smu_od_edit_dpm_table(void *handle,
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->od_edit_dpm_table) {
>  		ret = smu->ppt_funcs->od_edit_dpm_table(smu, type, input,
> size);
>  	}
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2475,8 +2340,6 @@ static int smu_read_sensor(void *handle,
>  	size_val = *size_arg;
>  	size = &size_val;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->read_sensor)
>  		if (!smu->ppt_funcs->read_sensor(smu, sensor, data, size))
>  			goto unlock;
> @@ -2517,8 +2380,6 @@ static int smu_read_sensor(void *handle,
>  	}
> 
>  unlock:
> -	mutex_unlock(&smu->mutex);
> -
>  	// assign uint32_t to int
>  	*size_arg = size_val;
> 
> @@ -2528,7 +2389,6 @@ static int smu_read_sensor(void *handle,  static int
> smu_get_power_profile_mode(void *handle, char *buf)  {
>  	struct smu_context *smu = handle;
> -	int ret = 0;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled ||
>  	    !smu->ppt_funcs->get_power_profile_mode)
> @@ -2536,13 +2396,7 @@ static int smu_get_power_profile_mode(void
> *handle, char *buf)
>  	if (!buf)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
> -	ret = smu->ppt_funcs->get_power_profile_mode(smu, buf);
> -
> -	mutex_unlock(&smu->mutex);
> -
> -	return ret;
> +	return smu->ppt_funcs->get_power_profile_mode(smu, buf);
>  }
> 
>  static int smu_set_power_profile_mode(void *handle, @@ -2550,19
> +2404,12 @@ static int smu_set_power_profile_mode(void *handle,
>  				      uint32_t param_size)
>  {
>  	struct smu_context *smu = handle;
> -	int ret = 0;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled ||
>  	    !smu->ppt_funcs->set_power_profile_mode)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
> -	smu_bump_power_profile_mode(smu, param, param_size);
> -
> -	mutex_unlock(&smu->mutex);
> -
> -	return ret;
> +	return smu_bump_power_profile_mode(smu, param, param_size);
>  }
> 
> 
> @@ -2579,12 +2426,8 @@ static int smu_get_fan_control_mode(void
> *handle, u32 *fan_mode)
>  	if (!fan_mode)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	*fan_mode = smu->ppt_funcs->get_fan_control_mode(smu);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return 0;
>  }
> 
> @@ -2602,8 +2445,6 @@ static int smu_set_fan_control_mode(void *handle,
> u32 value)
>  	if (value == U32_MAX)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	ret = smu->ppt_funcs->set_fan_control_mode(smu, value);
>  	if (ret)
>  		goto out;
> @@ -2620,8 +2461,6 @@ static int smu_set_fan_control_mode(void *handle,
> u32 value)
>  	}
> 
>  out:
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2639,12 +2478,8 @@ static int smu_get_fan_speed_pwm(void *handle,
> u32 *speed)
>  	if (!speed)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	ret = smu->ppt_funcs->get_fan_speed_pwm(smu, speed);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2662,8 +2497,6 @@ static int smu_set_fan_speed_pwm(void *handle,
> u32 speed)
>  	if (speed == U32_MAX)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	ret = smu->ppt_funcs->set_fan_speed_pwm(smu, speed);
>  	if (!ret && !(smu->user_dpm_profile.flags &
> SMU_DPM_USER_PROFILE_RESTORE)) {
>  		smu->user_dpm_profile.flags |=
> SMU_CUSTOM_FAN_SPEED_PWM; @@ -2674,8 +2507,6 @@ static int
> smu_set_fan_speed_pwm(void *handle, u32 speed)
>  		smu->user_dpm_profile.fan_speed_rpm = 0;
>  	}
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2693,30 +2524,19 @@ static int smu_get_fan_speed_rpm(void *handle,
> uint32_t *speed)
>  	if (!speed)
>  		return -EINVAL;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	ret = smu->ppt_funcs->get_fan_speed_rpm(smu, speed);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
>  static int smu_set_deep_sleep_dcefclk(void *handle, uint32_t clk)  {
>  	struct smu_context *smu = handle;
> -	int ret = 0;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
> -	ret = smu_set_min_dcef_deep_sleep(smu, clk);
> -
> -	mutex_unlock(&smu->mutex);
> -
> -	return ret;
> +	return smu_set_min_dcef_deep_sleep(smu, clk);
>  }
> 
>  static int smu_get_clock_by_type_with_latency(void *handle, @@ -2730,8
> +2550,6 @@ static int smu_get_clock_by_type_with_latency(void *handle,
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->get_clock_by_type_with_latency) {
>  		switch (type) {
>  		case amd_pp_sys_clock:
> @@ -2748,15 +2566,12 @@ static int
> smu_get_clock_by_type_with_latency(void *handle,
>  			break;
>  		default:
>  			dev_err(smu->adev->dev, "Invalid clock type!\n");
> -			mutex_unlock(&smu->mutex);
>  			return -EINVAL;
>  		}
> 
>  		ret = smu->ppt_funcs-
> >get_clock_by_type_with_latency(smu, clk_type, clocks);
>  	}
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2769,13 +2584,9 @@ static int smu_display_clock_voltage_request(void
> *handle,
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->display_clock_voltage_request)
>  		ret = smu->ppt_funcs->display_clock_voltage_request(smu,
> clock_req);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2789,13 +2600,9 @@ static int
> smu_display_disable_memory_clock_switch(void *handle,
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->display_disable_memory_clock_switch)
>  		ret = smu->ppt_funcs-
> >display_disable_memory_clock_switch(smu,
> disable_memory_clock_switch);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2808,13 +2615,9 @@ static int smu_set_xgmi_pstate(void *handle,
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->set_xgmi_pstate)
>  		ret = smu->ppt_funcs->set_xgmi_pstate(smu, pstate);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	if(ret)
>  		dev_err(smu->adev->dev, "Failed to set XGMI pstate!\n");
> 
> @@ -2824,21 +2627,16 @@ static int smu_set_xgmi_pstate(void *handle,
> static int smu_get_baco_capability(void *handle, bool *cap)  {
>  	struct smu_context *smu = handle;
> -	int ret = 0;
> 
>  	*cap = false;
> 
>  	if (!smu->pm_enabled)
>  		return 0;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs && smu->ppt_funcs->baco_is_support)
>  		*cap = smu->ppt_funcs->baco_is_support(smu);
> 
> -	mutex_unlock(&smu->mutex);
> -
> -	return ret;
> +	return 0;
>  }
> 
>  static int smu_baco_set_state(void *handle, int state) @@ -2850,20
> +2648,11 @@ static int smu_baco_set_state(void *handle, int state)
>  		return -EOPNOTSUPP;
> 
>  	if (state == 0) {
> -		mutex_lock(&smu->mutex);
> -
>  		if (smu->ppt_funcs->baco_exit)
>  			ret = smu->ppt_funcs->baco_exit(smu);
> -
> -		mutex_unlock(&smu->mutex);
>  	} else if (state == 1) {
> -		mutex_lock(&smu->mutex);
> -
>  		if (smu->ppt_funcs->baco_enter)
>  			ret = smu->ppt_funcs->baco_enter(smu);
> -
> -		mutex_unlock(&smu->mutex);
> -
>  	} else {
>  		return -EINVAL;
>  	}
> @@ -2882,13 +2671,9 @@ bool smu_mode1_reset_is_support(struct
> smu_context *smu)
>  	if (!smu->pm_enabled)
>  		return false;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs && smu->ppt_funcs->mode1_reset_is_support)
>  		ret = smu->ppt_funcs->mode1_reset_is_support(smu);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2899,13 +2684,9 @@ bool smu_mode2_reset_is_support(struct
> smu_context *smu)
>  	if (!smu->pm_enabled)
>  		return false;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs && smu->ppt_funcs->mode2_reset_is_support)
>  		ret = smu->ppt_funcs->mode2_reset_is_support(smu);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2916,13 +2697,9 @@ int smu_mode1_reset(struct smu_context *smu)
>  	if (!smu->pm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->mode1_reset)
>  		ret = smu->ppt_funcs->mode1_reset(smu);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2934,13 +2711,9 @@ static int smu_mode2_reset(void *handle)
>  	if (!smu->pm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->mode2_reset)
>  		ret = smu->ppt_funcs->mode2_reset(smu);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	if (ret)
>  		dev_err(smu->adev->dev, "Mode2 reset failed!\n");
> 
> @@ -2956,13 +2729,9 @@ static int
> smu_get_max_sustainable_clocks_by_dc(void *handle,
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->get_max_sustainable_clocks_by_dc)
>  		ret = smu->ppt_funcs-
> >get_max_sustainable_clocks_by_dc(smu, max_clocks);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2976,13 +2745,9 @@ static int smu_get_uclk_dpm_states(void *handle,
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->get_uclk_dpm_states)
>  		ret = smu->ppt_funcs->get_uclk_dpm_states(smu,
> clock_values_in_khz, num_states);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -2994,13 +2759,9 @@ static enum amd_pm_state_type
> smu_get_current_power_state(void *handle)
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->get_current_power_state)
>  		pm_state = smu->ppt_funcs-
> >get_current_power_state(smu);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return pm_state;
>  }
> 
> @@ -3013,20 +2774,15 @@ static int smu_get_dpm_clock_table(void
> *handle,
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->get_dpm_clock_table)
>  		ret = smu->ppt_funcs->get_dpm_clock_table(smu,
> clock_table);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
>  static ssize_t smu_sys_get_gpu_metrics(void *handle, void **table)  {
>  	struct smu_context *smu = handle;
> -	ssize_t size;
> 
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> @@ -3034,13 +2790,7 @@ static ssize_t smu_sys_get_gpu_metrics(void
> *handle, void **table)
>  	if (!smu->ppt_funcs->get_gpu_metrics)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
> -	size = smu->ppt_funcs->get_gpu_metrics(smu, table);
> -
> -	mutex_unlock(&smu->mutex);
> -
> -	return size;
> +	return smu->ppt_funcs->get_gpu_metrics(smu, table);
>  }
> 
>  static int smu_enable_mgpu_fan_boost(void *handle) @@ -3051,13 +2801,9
> @@ static int smu_enable_mgpu_fan_boost(void *handle)
>  	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
>  		return -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
> -
>  	if (smu->ppt_funcs->enable_mgpu_fan_boost)
>  		ret = smu->ppt_funcs->enable_mgpu_fan_boost(smu);
> 
> -	mutex_unlock(&smu->mutex);
> -
>  	return ret;
>  }
> 
> @@ -3067,10 +2813,8 @@ static int smu_gfx_state_change_set(void
> *handle,
>  	struct smu_context *smu = handle;
>  	int ret = 0;
> 
> -	mutex_lock(&smu->mutex);
>  	if (smu->ppt_funcs->gfx_state_change_set)
>  		ret = smu->ppt_funcs->gfx_state_change_set(smu, state);
> -	mutex_unlock(&smu->mutex);
> 
>  	return ret;
>  }
> @@ -3079,10 +2823,8 @@ int smu_handle_passthrough_sbr(struct
> smu_context *smu, bool enable)  {
>  	int ret = 0;
> 
> -	mutex_lock(&smu->mutex);
>  	if (smu->ppt_funcs->smu_handle_passthrough_sbr)
>  		ret = smu->ppt_funcs->smu_handle_passthrough_sbr(smu,
> enable);
> -	mutex_unlock(&smu->mutex);
> 
>  	return ret;
>  }
> @@ -3091,11 +2833,9 @@ int smu_get_ecc_info(struct smu_context *smu,
> void *umc_ecc)  {
>  	int ret = -EOPNOTSUPP;
> 
> -	mutex_lock(&smu->mutex);
>  	if (smu->ppt_funcs &&
>  		smu->ppt_funcs->get_ecc_info)
>  		ret = smu->ppt_funcs->get_ecc_info(smu, umc_ecc);
> -	mutex_unlock(&smu->mutex);
> 
>  	return ret;
> 
> @@ -3112,12 +2852,10 @@ static int smu_get_prv_buffer_details(void
> *handle, void **addr, size_t *size)
> 
>  	*addr = NULL;
>  	*size = 0;
> -	mutex_lock(&smu->mutex);
>  	if (memory_pool->bo) {
>  		*addr = memory_pool->cpu_addr;
>  		*size = memory_pool->size;
>  	}
> -	mutex_unlock(&smu->mutex);
> 
>  	return 0;
>  }
> @@ -3181,11 +2919,8 @@ int smu_wait_for_event(struct smu_context
> *smu, enum smu_event_type event,  {
>  	int ret = -EINVAL;
> 
> -	if (smu->ppt_funcs->wait_for_event) {
> -		mutex_lock(&smu->mutex);
> +	if (smu->ppt_funcs->wait_for_event)
>  		ret = smu->ppt_funcs->wait_for_event(smu, event,
> event_arg);
> -		mutex_unlock(&smu->mutex);
> -	}
> 
>  	return ret;
>  }
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
> b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
> index 3fdab6a44901..00760f3c6da5 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
> +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
> @@ -488,7 +488,6 @@ struct smu_context
>  	const struct cmn2asic_mapping	*table_map;
>  	const struct cmn2asic_mapping	*pwr_src_map;
>  	const struct cmn2asic_mapping	*workload_map;
> -	struct mutex			mutex;
>  	struct mutex			sensor_lock;
>  	struct mutex			metrics_lock;
>  	struct mutex			message_lock;
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
> b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
> index d3963bfe5c89..addb0472d040 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
> @@ -2118,9 +2118,7 @@ static int arcturus_i2c_xfer(struct i2c_adapter
> *i2c_adap,
>  			}
>  		}
>  	}
> -	mutex_lock(&smu->mutex);
>  	r = smu_cmn_update_table(smu, SMU_TABLE_I2C_COMMANDS, 0,
> req, true);
> -	mutex_unlock(&smu->mutex);
>  	if (r)
>  		goto fail;
> 
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
> b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
> index 37e11716e919..fe17b3c1ece7 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
> @@ -2826,9 +2826,7 @@ static int navi10_i2c_xfer(struct i2c_adapter
> *i2c_adap,
>  			}
>  		}
>  	}
> -	mutex_lock(&smu->mutex);
>  	r = smu_cmn_update_table(smu, SMU_TABLE_I2C_COMMANDS, 0,
> req, true);
> -	mutex_unlock(&smu->mutex);
>  	if (r)
>  		goto fail;
> 
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
> b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
> index 9766870987db..93caaf45a2db 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
> @@ -3483,9 +3483,7 @@ static int sienna_cichlid_i2c_xfer(struct i2c_adapter
> *i2c_adap,
>  			}
>  		}
>  	}
> -	mutex_lock(&smu->mutex);
>  	r = smu_cmn_update_table(smu, SMU_TABLE_I2C_COMMANDS, 0,
> req, true);
> -	mutex_unlock(&smu->mutex);
>  	if (r)
>  		goto fail;
> 
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
> b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
> index ac8ba5e0e697..2546f79c8511 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
> @@ -1521,9 +1521,7 @@ static int aldebaran_i2c_xfer(struct i2c_adapter
> *i2c_adap,
>  			}
>  		}
>  	}
> -	mutex_lock(&smu->mutex);
>  	r = smu_cmn_update_table(smu, SMU_TABLE_I2C_COMMANDS, 0,
> req, true);
> -	mutex_unlock(&smu->mutex);
>  	if (r)
>  		goto fail;
> 
> --
> 2.29.0

  reply	other threads:[~2022-01-21  7:09 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-17  5:41 [PATCH V2 1/7] drm/amd/pm: drop unneeded lock protection smu->mutex Evan Quan
2022-01-17  5:41 ` [PATCH V2 2/7] drm/amd/pm: drop unneeded vcn/jpeg_gate_lock Evan Quan
2022-01-17  5:41 ` [PATCH V2 3/7] drm/amd/pm: drop unneeded smu->metrics_lock Evan Quan
2022-01-17  5:41 ` [PATCH V2 4/7] drm/amd/pm: drop unneeded smu->sensor_lock Evan Quan
2022-01-17  5:41 ` [PATCH V2 5/7] drm/amd/pm: drop unneeded smu_baco->mutex Evan Quan
2022-01-17  5:41 ` [PATCH V2 6/7] drm/amd/pm: drop unneeded feature->mutex Evan Quan
2022-01-17  5:41 ` [PATCH V2 7/7] drm/amd/pm: drop unneeded hwmgr->smu_lock Evan Quan
2022-01-20 11:51   ` Quan, Evan
2022-01-20 13:41     ` Chen, Guchun
2022-01-20 13:37 ` [PATCH V2 1/7] drm/amd/pm: drop unneeded lock protection smu->mutex Chen, Guchun
2022-01-21  7:09   ` Quan, Evan [this message]
2022-01-20 15:23 ` Lazar, Lijo
2022-01-21  7:08   ` Quan, Evan
2022-01-20 15:59 ` Lazar, Lijo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DM6PR12MB2619065891D4ED20AB464769E45B9@DM6PR12MB2619.namprd12.prod.outlook.com \
    --to=evan.quan@amd.com \
    --cc=Alexander.Deucher@amd.com \
    --cc=Guchun.Chen@amd.com \
    --cc=Lijo.Lazar@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.