Am 13.12.2016 um 07:41 schrieb Dave Airlie: > From: Dave Airlie <airlied at redhat.com> > > While I'm sure this is useful I think we should bring it back later. Actually we have a trace point in the amdgpu module whenever we access a register. If I'm not completely mistaken this allows us to have all the same functionality as this code. Regards, Christian. > > It's usage of pid/tgid is incorrect, you have to get/put > pid/tgids not store them away. > > Signed-off-by: Dave Airlie <airlied at redhat.com> > --- > .../drm/amd/display/amdgpu_dm/amdgpu_dm_services.c | 10 -- > drivers/gpu/drm/amd/display/dc/basics/Makefile | 2 +- > .../drm/amd/display/dc/basics/register_logger.c | 197 --------------------- > drivers/gpu/drm/amd/display/dc/dm_services.h | 16 -- > .../drm/amd/display/include/dal_register_logger.h | 42 ----- > 5 files changed, 1 insertion(+), 266 deletions(-) > delete mode 100644 drivers/gpu/drm/amd/display/dc/basics/register_logger.c > delete mode 100644 drivers/gpu/drm/amd/display/include/dal_register_logger.h > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c > index 9c852a3..565be05 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c > @@ -447,13 +447,3 @@ void dal_notify_setmode_complete(struct dc_context *ctx, > /*TODO*/ > } > /* End of calls to notification */ > - > -long dm_get_pid(void) > -{ > - return current->pid; > -} > - > -long dm_get_tgid(void) > -{ > - return current->tgid; > -} > diff --git a/drivers/gpu/drm/amd/display/dc/basics/Makefile b/drivers/gpu/drm/amd/display/dc/basics/Makefile > index a263cad..0658162 100644 > --- a/drivers/gpu/drm/amd/display/dc/basics/Makefile > +++ b/drivers/gpu/drm/amd/display/dc/basics/Makefile > @@ -4,7 +4,7 @@ > # subcomponents. > > BASICS = conversion.o fixpt31_32.o fixpt32_32.o grph_object_id.o \ > - logger.o log_helpers.o register_logger.o signal_types.o vector.o > + logger.o log_helpers.o signal_types.o vector.o > > AMD_DAL_BASICS = $(addprefix $(AMDDALPATH)/dc/basics/,$(BASICS)) > > diff --git a/drivers/gpu/drm/amd/display/dc/basics/register_logger.c b/drivers/gpu/drm/amd/display/dc/basics/register_logger.c > deleted file mode 100644 > index b8d57d9..0000000 > --- a/drivers/gpu/drm/amd/display/dc/basics/register_logger.c > +++ /dev/null > @@ -1,197 +0,0 @@ > -/* > - * Copyright 2012-15 Advanced Micro Devices, Inc. > - * > - * Permission is hereby granted, free of charge, to any person obtaining a > - * copy of this software and associated documentation files (the "Software"), > - * to deal in the Software without restriction, including without limitation > - * the rights to use, copy, modify, merge, publish, distribute, sublicense, > - * and/or sell copies of the Software, and to permit persons to whom the > - * Software is furnished to do so, subject to the following conditions: > - * > - * The above copyright notice and this permission notice shall be included in > - * all copies or substantial portions of the Software. > - * > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR > - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR > - * OTHER DEALINGS IN THE SOFTWARE. > - * > - * Authors: AMD > - * > - */ > - > -#include "dm_services.h" > -#include "include/dal_types.h" > -#include "include/logger_interface.h" > -#include "logger.h" > - > -/****************************************************************************** > - * Register Logger. > - * A facility to create register R/W logs. > - * Currently used for DAL Test. > - *****************************************************************************/ > - > -/****************************************************************************** > - * Private structures > - *****************************************************************************/ > -struct dal_reg_dump_stack_location { > - const char *current_caller_func; > - long current_pid; > - long current_tgid; > - uint32_t rw_count;/* register access counter for current function. */ > -}; > - > -/* This the maximum number of nested calls to the 'reg_dump' facility. */ > -#define DAL_REG_DUMP_STACK_MAX_SIZE 32 > - > -struct dal_reg_dump_stack { > - int32_t stack_pointer; > - struct dal_reg_dump_stack_location > - stack_locations[DAL_REG_DUMP_STACK_MAX_SIZE]; > - uint32_t total_rw_count; /* Total count for *all* functions. */ > -}; > - > -static struct dal_reg_dump_stack reg_dump_stack = {0}; > - > -/****************************************************************************** > - * Private functions > - *****************************************************************************/ > - > -/* Check if current process is the one which requested register dump. > - * The reason for the check: > - * mmCRTC_STATUS_FRAME_COUNT is accessed by dal_controller_get_vblank_counter(). > - * Which runs all the time when at least one display is connected. > - * (Triggered by drm_mode_page_flip_ioctl()). */ > -static bool is_reg_dump_process(void) > -{ > - uint32_t i; > - > - /* walk the list of our processes */ > - for (i = 0; i < reg_dump_stack.stack_pointer; i++) { > - struct dal_reg_dump_stack_location *stack_location > - = ®_dump_stack.stack_locations[i]; > - > - if (stack_location->current_pid == dm_get_pid() > - && stack_location->current_tgid == dm_get_tgid()) > - return true; > - } > - > - return false; > -} > - > -static bool dal_reg_dump_stack_is_empty(void) > -{ > - if (reg_dump_stack.stack_pointer <= 0) > - return true; > - else > - return false; > -} > - > -static struct dal_reg_dump_stack_location *dal_reg_dump_stack_push(void) > -{ > - struct dal_reg_dump_stack_location *current_location = NULL; > - > - if (reg_dump_stack.stack_pointer >= DAL_REG_DUMP_STACK_MAX_SIZE) { > - /* stack is full */ > - dm_output_to_console("[REG_DUMP]: %s: stack is full!\n", > - __func__); > - } else { > - current_location = > - ®_dump_stack.stack_locations[reg_dump_stack.stack_pointer]; > - ++reg_dump_stack.stack_pointer; > - } > - > - return current_location; > -} > - > -static struct dal_reg_dump_stack_location *dal_reg_dump_stack_pop(void) > -{ > - struct dal_reg_dump_stack_location *current_location = NULL; > - > - if (dal_reg_dump_stack_is_empty()) { > - /* stack is empty */ > - dm_output_to_console("[REG_DUMP]: %s: stack is empty!\n", > - __func__); > - } else { > - --reg_dump_stack.stack_pointer; > - current_location = > - ®_dump_stack.stack_locations[reg_dump_stack.stack_pointer]; > - } > - > - return current_location; > -} > - > -/****************************************************************************** > - * Public functions > - *****************************************************************************/ > - > -void dal_reg_logger_push(const char *caller_func) > -{ > - struct dal_reg_dump_stack_location *free_stack_location; > - > - free_stack_location = dal_reg_dump_stack_push(); > - > - if (NULL == free_stack_location) > - return; > - > - memset(free_stack_location, 0, sizeof(*free_stack_location)); > - > - free_stack_location->current_caller_func = caller_func; > - free_stack_location->current_pid = dm_get_pid(); > - free_stack_location->current_tgid = dm_get_tgid(); > - > - dm_output_to_console("[REG_DUMP]:%s - start (pid:%ld, tgid:%ld)\n", > - caller_func, > - free_stack_location->current_pid, > - free_stack_location->current_tgid); > -} > - > -void dal_reg_logger_pop(void) > -{ > - struct dal_reg_dump_stack_location *top_stack_location; > - > - top_stack_location = dal_reg_dump_stack_pop(); > - > - if (NULL == top_stack_location) { > - dm_output_to_console("[REG_DUMP]:%s - Stack is Empty!\n", > - __func__); > - return; > - } > - > - dm_output_to_console( > - "[REG_DUMP]:%s - end."\ > - " Reg R/W Count: Total=%d Function=%d. (pid:%ld, tgid:%ld)\n", > - top_stack_location->current_caller_func, > - reg_dump_stack.total_rw_count, > - top_stack_location->rw_count, > - dm_get_pid(), > - dm_get_tgid()); > - > - memset(top_stack_location, 0, sizeof(*top_stack_location)); > -} > - > -void dal_reg_logger_rw_count_increment(void) > -{ > - ++reg_dump_stack.total_rw_count; > - > - ++reg_dump_stack.stack_locations > - [reg_dump_stack.stack_pointer - 1].rw_count; > -} > - > -bool dal_reg_logger_should_dump_register(void) > -{ > - if (true == dal_reg_dump_stack_is_empty()) > - return false; > - > - if (false == is_reg_dump_process()) > - return false; > - > - return true; > -} > - > -/****************************************************************************** > - * End of File. > - *****************************************************************************/ > diff --git a/drivers/gpu/drm/amd/display/dc/dm_services.h b/drivers/gpu/drm/amd/display/dc/dm_services.h > index 7a3f103..f3f9a40 100644 > --- a/drivers/gpu/drm/amd/display/dc/dm_services.h > +++ b/drivers/gpu/drm/amd/display/dc/dm_services.h > @@ -109,12 +109,6 @@ static inline uint32_t dm_read_reg_func( > > value = cgs_read_register(ctx->cgs_device, address); > > -#if defined(__DAL_REGISTER_LOGGER__) > - if (true == dal_reg_logger_should_dump_register()) { > - dal_reg_logger_rw_count_increment(); > - DRM_INFO("%s DC_READ_REG: 0x%x 0x%x\n", func_name, address, value); > - } > -#endif > return value; > } > > @@ -127,13 +121,6 @@ static inline void dm_write_reg_func( > uint32_t value, > const char *func_name) > { > -#if defined(__DAL_REGISTER_LOGGER__) > - if (true == dal_reg_logger_should_dump_register()) { > - dal_reg_logger_rw_count_increment(); > - DRM_INFO("%s DC_WRITE_REG: 0x%x 0x%x\n", func_name, address, value); > - } > -#endif > - > if (address == 0) { > DC_ERR("invalid register write. address = 0"); > return; > @@ -418,7 +405,4 @@ bool dm_dmcu_set_pipe(struct dc_context *ctx, unsigned int controller_id); > #define dm_log_to_buffer(buffer, size, fmt, args)\ > vsnprintf(buffer, size, fmt, args) > > -long dm_get_pid(void); > -long dm_get_tgid(void); > - > #endif /* __DM_SERVICES_H__ */ > diff --git a/drivers/gpu/drm/amd/display/include/dal_register_logger.h b/drivers/gpu/drm/amd/display/include/dal_register_logger.h > deleted file mode 100644 > index 00dfcd7..0000000 > --- a/drivers/gpu/drm/amd/display/include/dal_register_logger.h > +++ /dev/null > @@ -1,42 +0,0 @@ > -/* > - * Copyright 2012-15 Advanced Micro Devices, Inc. > - * > - * Permission is hereby granted, free of charge, to any person obtaining a > - * copy of this software and associated documentation files (the "Software"), > - * to deal in the Software without restriction, including without limitation > - * the rights to use, copy, modify, merge, publish, distribute, sublicense, > - * and/or sell copies of the Software, and to permit persons to whom the > - * Software is furnished to do so, subject to the following conditions: > - * > - * The above copyright notice and this permission notice shall be included in > - * all copies or substantial portions of the Software. > - * > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR > - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR > - * OTHER DEALINGS IN THE SOFTWARE. > - * > - * Authors: AMD > - * > - */ > - > -#ifndef __DAL_REGISTER_LOGGER__ > -#define __DAL_REGISTER_LOGGER__ > - > -/**************** > - * API functions > - ***************/ > - > -/* dal_reg_logger_push - begin Register Logging */ > -void dal_reg_logger_push(const char *caller_func); > -/* dal_reg_logger_pop - stop Register Logging */ > -void dal_reg_logger_pop(void); > - > -/* for internal use of the Logger only */ > -void dal_reg_logger_rw_count_increment(void); > -bool dal_reg_logger_should_dump_register(void); > - > -#endif /* __DAL_REGISTER_LOGGER__ */