From: Michel Dänzer <michel.daenzer@xxxxxxx> dm_log_to_buffer logs unconditionally, so calling it directly resulted in the main message being logged even when the event type isn't enabled in the event mask. To fix this, remove the trailing newline from the format string and call dm_logger_append instead. Fixes spurious messages like [drm] {1920x1200, 2080x1235 at 154000Khz} in dmesg when a mode is set. Signed-off-by: Michel Dänzer <michel.daenzer at amd.com> --- drivers/gpu/drm/amd/display/dc/basics/log_helpers.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c b/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c index 785b943b60ed..02d43e29ded5 100644 --- a/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c +++ b/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c @@ -60,6 +60,8 @@ void dc_conn_log(struct dc_context *ctx, va_list args; struct log_entry entry = { 0 }; enum signal_type signal; + char *msg_no_newline = (char*)msg; + size_t msg_len = strlen(msg) - 1; if (link->local_sink) signal = link->local_sink->sink_signal; @@ -79,17 +81,15 @@ void dc_conn_log(struct dc_context *ctx, signal_type_info_tbl[i].name, link->link_index); - va_start(args, msg); - entry.buf_offset += dm_log_to_buffer( - &entry.buf[entry.buf_offset], - LOG_MAX_LINE_SIZE - entry.buf_offset, - msg, args); - - if (entry.buf[strlen(entry.buf) - 1] == '\n') { - entry.buf[strlen(entry.buf) - 1] = '\0'; - entry.buf_offset--; + if (msg[msg_len] == '\n') { + msg_no_newline = kstrdup(msg, GFP_KERNEL); + msg_no_newline[msg_len] = '\0'; } + dm_logger_append(&entry, msg_no_newline, args); + if (msg_no_newline != msg) + kfree(msg_no_newline); + if (hex_data) for (i = 0; i < hex_data_count; i++) dm_logger_append(&entry, "%2.2X ", hex_data[i]); @@ -97,6 +97,4 @@ void dc_conn_log(struct dc_context *ctx, dm_logger_append(&entry, "^\n"); dm_helpers_dc_conn_log(ctx, &entry, event); dm_logger_close(&entry); - - va_end(args); } -- 2.15.0