From 8dd18e6f5e2df8cee4da4db0fe3388b94a37e4ee Mon Sep 17 00:00:00 2001 From: Philip Elcan Date: Fri, 8 Nov 2019 16:55:05 -0500 Subject: [PATCH] gpu: nvgpu: init: reduce CCM for nvgpu_finalize_poweron Change how nvgpu_finalize_poweron() detects and reports units that do not need initializing. This reduces the Code Complexity of this function. This update reduces the TCC metric from 12 to 9. JIRA NVGPU-4327 Change-Id: I95a5d60bc90fe09358ed47a54eca700bd51d688f Signed-off-by: Philip Elcan Reviewed-on: https://git-master.nvidia.com/r/2235339 Reviewed-by: svc-mobile-coverity Reviewed-by: svc-mobile-misra Reviewed-by: svc-mobile-cert GVS: Gerrit_Virtual_Submit Reviewed-by: Deepak Nibade Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/init/nvgpu_init.c | 26 +++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/nvgpu/common/init/nvgpu_init.c b/drivers/gpu/nvgpu/common/init/nvgpu_init.c index 7f6ea65a5..d1a5e1149 100644 --- a/drivers/gpu/nvgpu/common/init/nvgpu_init.c +++ b/drivers/gpu/nvgpu/common/init/nvgpu_init.c @@ -482,8 +482,14 @@ struct nvgpu_init_table_t { }; #define NVGPU_INIT_TABLE_ENTRY(ops_ptr, enable_flag) \ { (ops_ptr), #ops_ptr, (enable_flag) } - #define NO_FLAG 0U + +static bool needs_init(struct gk20a *g, nvgpu_init_func_t func, u32 enable_flag) +{ + return ((enable_flag == NO_FLAG) || + nvgpu_is_enabled(g, enable_flag)) && (func != NULL); +} + int nvgpu_finalize_poweron(struct gk20a *g) { int err = 0; @@ -597,26 +603,25 @@ int nvgpu_finalize_poweron(struct gk20a *g) #endif for (i = 0; i < ARRAY_SIZE(nvgpu_init_table); i++) { - if ((nvgpu_init_table[i].enable_flag != 0ULL) && - !nvgpu_is_enabled(g, nvgpu_init_table[i].enable_flag)) { - nvgpu_log_info(g, "Skipping initializing %s (not enabled)", - nvgpu_init_table[i].name); - } else if (nvgpu_init_table[i].func == NULL) { - nvgpu_log_info(g, "Skipping initializing %s (NULL func)", - nvgpu_init_table[i].name); + if (!needs_init(g, nvgpu_init_table[i].func, + nvgpu_init_table[i].enable_flag)) { + nvgpu_log_info(g, "Skipping initializing %s (enable_flag=%u func=%p)", + nvgpu_init_table[i].name, + nvgpu_init_table[i].enable_flag, + nvgpu_init_table[i].func); } else { nvgpu_log_info(g, "Initializing %s", nvgpu_init_table[i].name); err = nvgpu_init_table[i].func(g); if (err != 0) { nvgpu_err(g, "Failed initialization for: %s", - nvgpu_init_table[i].name); + nvgpu_init_table[i].name); goto done; } } } - goto exit; + return err; done: if (have_tpc_pg_lock) { @@ -628,7 +633,6 @@ done: } nvgpu_falcons_sw_free(g); -exit: return err; }