[jimc:dd-ratelimit 57/81] lib/dynamic_debug.c:1987:3: warning: variable 'i' is uninitialized when used here
kernel test robot <[email protected]> Thu, 30 Jul 2026 09:08:10 +0800
| Newsgroups | dev.linux.lists.oe-kbuild-all |
|---|---|
| Message-ID | <[email protected]> |
tree: https://github.com/jimc/linux.git dd-ratelimit head: cbb49cd4279ef7137b7931337dbbc47d7f9532d0 commit: 75e0f7b4820647e0712c667269fc5c720aa378c5 [57/81] dyndbg: walk dd_mod_map intervals in dynamic_debug_init() config: hexagon-randconfig-002-20260729 (https://download.01.org/0day-ci/archive/20260730/[email protected]/config) compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260730/[email protected]/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <[email protected]> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ All warnings (new ones prefixed by >>): >> lib/dynamic_debug.c:1987:3: warning: variable 'i' is uninitialized when used here [-Wuninitialized] 1987 | i += mod_di.descs.len; | ^ lib/dynamic_debug.c:1910:7: note: initialize the variable 'i' to silence this warning 1910 | int i, ret = 0, mod_ct = 0; | ^ | = 0 1 warning generated. vim +/i +1987 lib/dynamic_debug.c 1934 1935 if (&__start___dyndbg_descs == &__stop___dyndbg_descs) { 1936 if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) { 1937 pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n"); 1938 return 1; 1939 } 1940 pr_info("Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build\n"); 1941 ddebug_init_success = 1; 1942 return 0; 1943 } 1944 /* 1945 * fill the 3 function, file, module trees with the values and 1946 * their intervals, and then walk the module intervals and 1947 * call add_module for each. 1948 */ 1949 ddebug_condense_sites(&di); 1950 1951 /* 1952 * under rcu-lock, gather the modules' descriptor intervals 1953 * into an atomically alloc'd list 1954 */ 1955 rcu_read_lock(); 1956 MA_STATE(mas, &dd_mod_map, 0, ULONG_MAX); 1957 mas_for_each(&mas, mod_name, ULONG_MAX) { 1958 mod_info = kmalloc(sizeof(*mod_info), GFP_ATOMIC); 1959 if (!mod_info) { 1960 pr_warn("kmalloc failed, some modules may not be processed\n"); 1961 break; 1962 } 1963 mod_info->mod_name = (const char *)mod_name; 1964 mod_info->start_addr = mas.index; 1965 mod_info->end_addr = mas.last; 1966 list_add_tail(&mod_info->link, &mod_list); 1967 } 1968 rcu_read_unlock(); 1969 1970 /* 1971 * walk the list, call ddebug_add_module for each, which may sleep 1972 */ 1973 list_for_each_entry_safe(mod_info, tmp, &mod_list, link) { 1974 struct _ddebug_info mod_di = di; 1975 1976 mod_di.mod_name = mod_info->mod_name; 1977 mod_di.descs.start = (struct _ddebug *)mod_info->start_addr; 1978 mod_di.descs.len = (mod_info->end_addr - mod_info->start_addr) / sizeof(struct _ddebug) + 1; 1979 1980 ret = ddebug_add_module(&mod_di); 1981 if (ret) { 1982 pr_err("Failed to add module %s, error %d\n", 1983 mod_di.mod_name, ret); 1984 goto out_err; 1985 } 1986 mod_ct++; > 1987 i += mod_di.descs.len; 1988 list_del(&mod_info->link); 1989 kfree(mod_info); 1990 } 1991 1992 ddebug_init_success = 1; 1993 vpr_info("%d prdebugs in %d modules, %d KiB in ddebug tables, %d+%d kiB in __dyndbg:_descs+_sites sections\n", 1994 i, mod_ct, (int)((mod_ct * sizeof(struct ddebug_table)) >> 10), 1995 (int)((i * sizeof(struct _ddebug)) >> 10), 1996 (int)((i * sizeof(struct _ddebug_site)) >> 10)); 1997 1998 if (di.maps.len) 1999 v2pr_info(" %d builtin ddebug class-maps\n", di.maps.len); 2000 2001 /* now that ddebug tables are loaded, process all boot args 2002 * again to find and activate queries given in dyndbg params. 2003 * While this has already been done for known boot params, it 2004 * ignored the unknown ones (dyndbg in particular). Reusing 2005 * parse_args avoids ad-hoc parsing. This will also attempt 2006 * to activate queries for not-yet-loaded modules, which is 2007 * slightly noisy if verbose, but harmless. 2008 */ 2009 cmdline = kstrdup(saved_command_line, GFP_KERNEL); 2010 parse_args("dyndbg params", cmdline, NULL, 2011 0, 0, 0, NULL, &ddebug_dyndbg_boot_param_cb); 2012 kfree(cmdline); 2013 return 0; 2014 2015 out_err: 2016 /* Clean up any remaining items in mod_list on error */ 2017 list_for_each_entry_safe(mod_info, tmp, &mod_list, link) { 2018 list_del(&mod_info->link); 2019 kfree(mod_info); 2020 } 2021 ddebug_remove_all_tables(); 2022 return ret; 2023 } 2024 /* Allow early initialization for boot messages via boot param */ 2025 early_initcall(dynamic_debug_init); 2026 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki