[PATCH 1/1] drm/amd/display: use GFP_ATOMIC in dcn20_resource_construct

Nirmoy nirmodas at amd.com
Fri Mar 19 18:19:38 UTC 2021


ping.

On 3/17/21 11:52 AM, Nirmoy Das wrote:
> Replace GFP_KERNEL with GFP_ATOMIC as dcn20_resource_construct()
> can't sleep.
>
> Partially fixes: https://bugzilla.kernel.org/show_bug.cgi?id=212311
> as dcn20_resource_construct() also calls into SMU functions which does
> mutex_lock().
>
> Signed-off-by: Nirmoy Das <nirmoy.das at amd.com>
> ---
>   drivers/gpu/drm/amd/display/dc/dce/dce_abm.c  |  2 +-
>   drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c |  6 ++---
>   .../gpu/drm/amd/display/dc/dcn20/dcn20_dccg.c |  2 +-
>   .../drm/amd/display/dc/dcn20/dcn20_resource.c | 26 +++++++++----------
>   4 files changed, 18 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
> index 4e87e70237e3..874b132fe1d7 100644
> --- a/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
> +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_abm.c
> @@ -283,7 +283,7 @@ struct abm *dce_abm_create(
>   	const struct dce_abm_shift *abm_shift,
>   	const struct dce_abm_mask *abm_mask)
>   {
> -	struct dce_abm *abm_dce = kzalloc(sizeof(*abm_dce), GFP_KERNEL);
> +	struct dce_abm *abm_dce = kzalloc(sizeof(*abm_dce), GFP_ATOMIC);
>   
>   	if (abm_dce == NULL) {
>   		BREAK_TO_DEBUGGER();
> diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
> index 4f864501e046..8cd841320ded 100644
> --- a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
> +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
> @@ -1133,7 +1133,7 @@ struct dmcu *dcn10_dmcu_create(
>   	const struct dce_dmcu_shift *dmcu_shift,
>   	const struct dce_dmcu_mask *dmcu_mask)
>   {
> -	struct dce_dmcu *dmcu_dce = kzalloc(sizeof(*dmcu_dce), GFP_KERNEL);
> +	struct dce_dmcu *dmcu_dce = kzalloc(sizeof(*dmcu_dce), GFP_ATOMIC);
>   
>   	if (dmcu_dce == NULL) {
>   		BREAK_TO_DEBUGGER();
> @@ -1154,7 +1154,7 @@ struct dmcu *dcn20_dmcu_create(
>   	const struct dce_dmcu_shift *dmcu_shift,
>   	const struct dce_dmcu_mask *dmcu_mask)
>   {
> -	struct dce_dmcu *dmcu_dce = kzalloc(sizeof(*dmcu_dce), GFP_KERNEL);
> +	struct dce_dmcu *dmcu_dce = kzalloc(sizeof(*dmcu_dce), GFP_ATOMIC);
>   
>   	if (dmcu_dce == NULL) {
>   		BREAK_TO_DEBUGGER();
> @@ -1175,7 +1175,7 @@ struct dmcu *dcn21_dmcu_create(
>   	const struct dce_dmcu_shift *dmcu_shift,
>   	const struct dce_dmcu_mask *dmcu_mask)
>   {
> -	struct dce_dmcu *dmcu_dce = kzalloc(sizeof(*dmcu_dce), GFP_KERNEL);
> +	struct dce_dmcu *dmcu_dce = kzalloc(sizeof(*dmcu_dce), GFP_ATOMIC);
>   
>   	if (dmcu_dce == NULL) {
>   		BREAK_TO_DEBUGGER();
> diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dccg.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dccg.c
> index 62cc2651e00c..8774406120fc 100644
> --- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dccg.c
> +++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dccg.c
> @@ -112,7 +112,7 @@ struct dccg *dccg2_create(
>   	const struct dccg_shift *dccg_shift,
>   	const struct dccg_mask *dccg_mask)
>   {
> -	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_KERNEL);
> +	struct dcn_dccg *dccg_dcn = kzalloc(sizeof(*dccg_dcn), GFP_ATOMIC);
>   	struct dccg *base;
>   
>   	if (dccg_dcn == NULL) {
> diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
> index 2307b3517821..25f8dd5db080 100644
> --- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
> +++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
> @@ -1106,7 +1106,7 @@ struct dpp *dcn20_dpp_create(
>   	uint32_t inst)
>   {
>   	struct dcn20_dpp *dpp =
> -		kzalloc(sizeof(struct dcn20_dpp), GFP_KERNEL);
> +		kzalloc(sizeof(struct dcn20_dpp), GFP_ATOMIC);
>   
>   	if (!dpp)
>   		return NULL;
> @@ -1124,7 +1124,7 @@ struct input_pixel_processor *dcn20_ipp_create(
>   	struct dc_context *ctx, uint32_t inst)
>   {
>   	struct dcn10_ipp *ipp =
> -		kzalloc(sizeof(struct dcn10_ipp), GFP_KERNEL);
> +		kzalloc(sizeof(struct dcn10_ipp), GFP_ATOMIC);
>   
>   	if (!ipp) {
>   		BREAK_TO_DEBUGGER();
> @@ -1141,7 +1141,7 @@ struct output_pixel_processor *dcn20_opp_create(
>   	struct dc_context *ctx, uint32_t inst)
>   {
>   	struct dcn20_opp *opp =
> -		kzalloc(sizeof(struct dcn20_opp), GFP_KERNEL);
> +		kzalloc(sizeof(struct dcn20_opp), GFP_ATOMIC);
>   
>   	if (!opp) {
>   		BREAK_TO_DEBUGGER();
> @@ -1158,7 +1158,7 @@ struct dce_aux *dcn20_aux_engine_create(
>   	uint32_t inst)
>   {
>   	struct aux_engine_dce110 *aux_engine =
> -		kzalloc(sizeof(struct aux_engine_dce110), GFP_KERNEL);
> +		kzalloc(sizeof(struct aux_engine_dce110), GFP_ATOMIC);
>   
>   	if (!aux_engine)
>   		return NULL;
> @@ -1196,7 +1196,7 @@ struct dce_i2c_hw *dcn20_i2c_hw_create(
>   	uint32_t inst)
>   {
>   	struct dce_i2c_hw *dce_i2c_hw =
> -		kzalloc(sizeof(struct dce_i2c_hw), GFP_KERNEL);
> +		kzalloc(sizeof(struct dce_i2c_hw), GFP_ATOMIC);
>   
>   	if (!dce_i2c_hw)
>   		return NULL;
> @@ -1209,7 +1209,7 @@ struct dce_i2c_hw *dcn20_i2c_hw_create(
>   struct mpc *dcn20_mpc_create(struct dc_context *ctx)
>   {
>   	struct dcn20_mpc *mpc20 = kzalloc(sizeof(struct dcn20_mpc),
> -					  GFP_KERNEL);
> +					  GFP_ATOMIC);
>   
>   	if (!mpc20)
>   		return NULL;
> @@ -1227,7 +1227,7 @@ struct hubbub *dcn20_hubbub_create(struct dc_context *ctx)
>   {
>   	int i;
>   	struct dcn20_hubbub *hubbub = kzalloc(sizeof(struct dcn20_hubbub),
> -					  GFP_KERNEL);
> +					  GFP_ATOMIC);
>   
>   	if (!hubbub)
>   		return NULL;
> @@ -1255,7 +1255,7 @@ struct timing_generator *dcn20_timing_generator_create(
>   		uint32_t instance)
>   {
>   	struct optc *tgn10 =
> -		kzalloc(sizeof(struct optc), GFP_KERNEL);
> +		kzalloc(sizeof(struct optc), GFP_ATOMIC);
>   
>   	if (!tgn10)
>   		return NULL;
> @@ -1334,7 +1334,7 @@ static struct clock_source *dcn20_clock_source_create(
>   	bool dp_clk_src)
>   {
>   	struct dce110_clk_src *clk_src =
> -		kzalloc(sizeof(struct dce110_clk_src), GFP_KERNEL);
> +		kzalloc(sizeof(struct dce110_clk_src), GFP_ATOMIC);
>   
>   	if (!clk_src)
>   		return NULL;
> @@ -1440,7 +1440,7 @@ struct display_stream_compressor *dcn20_dsc_create(
>   	struct dc_context *ctx, uint32_t inst)
>   {
>   	struct dcn20_dsc *dsc =
> -		kzalloc(sizeof(struct dcn20_dsc), GFP_KERNEL);
> +		kzalloc(sizeof(struct dcn20_dsc), GFP_ATOMIC);
>   
>   	if (!dsc) {
>   		BREAK_TO_DEBUGGER();
> @@ -1574,7 +1574,7 @@ struct hubp *dcn20_hubp_create(
>   	uint32_t inst)
>   {
>   	struct dcn20_hubp *hubp2 =
> -		kzalloc(sizeof(struct dcn20_hubp), GFP_KERNEL);
> +		kzalloc(sizeof(struct dcn20_hubp), GFP_ATOMIC);
>   
>   	if (!hubp2)
>   		return NULL;
> @@ -3396,7 +3396,7 @@ bool dcn20_mmhubbub_create(struct dc_context *ctx, struct resource_pool *pool)
>   
>   static struct pp_smu_funcs *dcn20_pp_smu_create(struct dc_context *ctx)
>   {
> -	struct pp_smu_funcs *pp_smu = kzalloc(sizeof(*pp_smu), GFP_KERNEL);
> +	struct pp_smu_funcs *pp_smu = kzalloc(sizeof(*pp_smu), GFP_ATOMIC);
>   
>   	if (!pp_smu)
>   		return pp_smu;
> @@ -4042,7 +4042,7 @@ struct resource_pool *dcn20_create_resource_pool(
>   		struct dc *dc)
>   {
>   	struct dcn20_resource_pool *pool =
> -		kzalloc(sizeof(struct dcn20_resource_pool), GFP_KERNEL);
> +		kzalloc(sizeof(struct dcn20_resource_pool), GFP_ATOMIC);
>   
>   	if (!pool)
>   		return NULL;


More information about the amd-gfx mailing list