| From b3b840ca0f542a303b22f8c9aae05f3dd78c6ab7 Mon Sep 17 00:00:00 2001 |
| From: "qiankun.wang" <qiankun.wang@amlogic.com> |
| Date: Fri, 12 May 2023 15:09:23 +0800 |
| Subject: [PATCH] debug: misc modifications [1/1] |
| |
| PD#SWPL-114632 |
| |
| Problem: |
| gki optimize |
| |
| Solution: |
| code optimize |
| |
| Verify: |
| s4 |
| |
| Change-Id: I4561d2c235baacaf73fd82e5b850dda74148724e |
| Signed-off-by: qiankun.wang <qiankun.wang@amlogic.com> |
| --- |
| drivers/base/dd.c | 14 ++++++++++++++ |
| init/main.c | 37 +++++++++++++++++++++++++++++++++++++ |
| kernel/module/version.c | 11 +++++++++++ |
| kernel/sched/topology.c | 8 +++++++- |
| kernel/workqueue.c | 8 ++++++++ |
| 5 files changed, 77 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/base/dd.c b/drivers/base/dd.c |
| index 0c3725c3eefa..551d7d2ea9ef 100644 |
| --- a/drivers/base/dd.c |
| +++ b/drivers/base/dd.c |
| @@ -57,6 +57,11 @@ static LIST_HEAD(deferred_probe_active_list); |
| static atomic_t deferred_trigger_count = ATOMIC_INIT(0); |
| static bool initcalls_done; |
| |
| +#if IS_ENABLED(CONFIG_AMLOGIC_BGKI_DEBUG_MISC) |
| +static int deferred_probe_printk; |
| +core_param(deferred_probe_printk, deferred_probe_printk, int, 0644); |
| +#endif |
| + |
| /* Save the async probe drivers' name from kernel cmdline */ |
| #define ASYNC_DRV_NAMES_MAX_LEN 256 |
| static char async_probe_drv_names[ASYNC_DRV_NAMES_MAX_LEN]; |
| @@ -184,6 +189,15 @@ void driver_deferred_probe_trigger(void) |
| */ |
| mutex_lock(&deferred_probe_mutex); |
| atomic_inc(&deferred_trigger_count); |
| +#if IS_ENABLED(CONFIG_AMLOGIC_BGKI_DEBUG_MISC) |
| + if (deferred_probe_printk && !list_empty(&deferred_probe_pending_list)) { |
| + struct device_private *p; |
| + |
| + pr_warn("deferred probe trigger count %d\n", atomic_read(&deferred_trigger_count)); |
| + list_for_each_entry(p, &deferred_probe_pending_list, deferred_probe) |
| + dev_info(p->device, "deferred probe pending\n"); |
| + } |
| +#endif |
| list_splice_tail_init(&deferred_probe_pending_list, |
| &deferred_probe_active_list); |
| mutex_unlock(&deferred_probe_mutex); |
| diff --git a/init/main.c b/init/main.c |
| index 77183d0cec69..2380307e5274 100644 |
| --- a/init/main.c |
| +++ b/init/main.c |
| @@ -568,6 +568,19 @@ static int __init unknown_bootoption(char *param, char *val, |
| } |
| argv_init[i] = param; |
| } |
| +#ifdef CONFIG_AMLOGIC_ENV_DEBUG |
| + if (panic_later) { |
| + int k; |
| + |
| + pr_err("Dump init args\n"); |
| + for (k = 0; argv_init[k] && k < MAX_INIT_ARGS; k++) |
| + pr_err("[%2d]: %s\n", k, argv_init[k]); |
| + |
| + pr_err("Dump env args\n"); |
| + for (k = 0; envp_init[k] && k < MAX_INIT_ENVS; k++) |
| + pr_err("[%2d]: %s\n", k, envp_init[k]); |
| + } |
| +#endif |
| return 0; |
| } |
| |
| @@ -1150,10 +1163,34 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn) |
| strreplace(fn_name, ' ', '\0'); |
| |
| list_for_each_entry(entry, &blacklisted_initcalls, next) { |
| +#if IS_ENABLED(CONFIG_AMLOGIC_BGKI_DEBUG_MISC) |
| + char *str = strstr(fn_name, entry->buf); |
| + |
| + if (!str) |
| + continue; |
| + /* |
| + * The judgment condition before "||" is for gcc compiler |
| + * and atfer "||" for clang compiler. |
| + * clang compiler will modify kernel symbol,the first character |
| + * before the kernel symbol is always '_',and the first two |
| + * characters are always numbers. we use this format to check |
| + * blacklisted init method. |
| + * |
| + * for example: |
| + * fn_name = __initstub__kmod_amlogic_debug__289_21_debug_main_init4 |
| + * entry->buf = debug_main_init |
| + */ |
| + if (str == fn_name || |
| + ((str >= fn_name + 2) && *(str - 1) == '_' && isdigit(*(str - 2)))) { |
| + pr_info("initcall %s blacklisted, fn_name: %s\n", entry->buf, fn_name); |
| + return true; |
| + } |
| +#else |
| if (!strcmp(fn_name, entry->buf)) { |
| pr_debug("initcall %s blacklisted\n", fn_name); |
| return true; |
| } |
| +#endif |
| } |
| |
| return false; |
| diff --git a/kernel/module/version.c b/kernel/module/version.c |
| index 53f43ac5a73e..5f9600c2c795 100644 |
| --- a/kernel/module/version.c |
| +++ b/kernel/module/version.c |
| @@ -10,6 +10,11 @@ |
| #include <linux/printk.h> |
| #include "internal.h" |
| |
| +#if IS_ENABLED(CONFIG_AMLOGIC_BGKI_DEBUG_MISC) |
| +static int ignore_check_version = 1; |
| +core_param(ignore_check_version, ignore_check_version, int, 0644); |
| +#endif |
| + |
| int check_version(const struct load_info *info, |
| const char *symname, |
| struct module *mod, |
| @@ -52,7 +57,13 @@ int check_version(const struct load_info *info, |
| |
| bad_version: |
| pr_warn("%s: disagrees about version of symbol %s\n", info->name, symname); |
| +#if IS_ENABLED(CONFIG_AMLOGIC_BGKI_DEBUG_MISC) |
| + pr_warn("!!!MUST FIX!!! %s: ko need recompile.\n", info->name); |
| + dump_stack(); |
| + return ignore_check_version; |
| +#else |
| return 0; |
| +#endif |
| } |
| |
| int check_modstruct_version(const struct load_info *info, |
| diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c |
| index 96b92ba022a5..6c96e220c7d1 100644 |
| --- a/kernel/sched/topology.c |
| +++ b/kernel/sched/topology.c |
| @@ -1419,8 +1419,12 @@ static void asym_cpu_capacity_scan(void) |
| * Initializers for schedule domains |
| * Non-inlined to reduce accumulated stack pressure in build_sched_domains() |
| */ |
| - |
| +#if IS_ENABLED(CONFIG_AMLOGIC_BGKI_DEBUG_MISC) |
| +/* default enable SD_BALANCE_WAKE */ |
| +static int default_relax_domain_level = 1; |
| +#else |
| static int default_relax_domain_level = -1; |
| +#endif |
| int sched_domain_level_max; |
| |
| static int __init setup_relax_domain_level(char *str) |
| @@ -1581,7 +1585,9 @@ sd_init(struct sched_domain_topology_level *tl, |
| | 1*SD_BALANCE_EXEC |
| | 1*SD_BALANCE_FORK |
| | 0*SD_BALANCE_WAKE |
| +#if !IS_ENABLED(CONFIG_AMLOGIC_BGKI_DEBUG_MISC) |
| | 1*SD_WAKE_AFFINE |
| +#endif |
| | 0*SD_SHARE_CPUCAPACITY |
| | 0*SD_SHARE_PKG_RESOURCES |
| | 0*SD_SERIALIZE |
| diff --git a/kernel/workqueue.c b/kernel/workqueue.c |
| index 9002282e3a98..586132eff632 100644 |
| --- a/kernel/workqueue.c |
| +++ b/kernel/workqueue.c |
| @@ -2555,6 +2555,14 @@ __acquires(&pool->lock) |
| struct lockdep_map lockdep_map; |
| |
| lockdep_copy_map(&lockdep_map, &work->lockdep_map); |
| +#endif |
| +#if IS_ENABLED(CONFIG_AMLOGIC_BGKI_DEBUG_MISC) |
| + if (!pwq) { |
| + WARN_ONCE(1, "<%s> pwq_NULL <%lx> <%ps>, <%ps> %s\n", |
| + __func__, atomic_long_read(&work->data), |
| + work->func, worker->current_func, worker->desc); |
| + return; |
| + } |
| #endif |
| /* ensure we're on the correct CPU */ |
| WARN_ON_ONCE(!(pool->flags & POOL_DISASSOCIATED) && |
| -- |
| 2.29.0 |
| |