All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lance Yang <lance.yang@linux.dev>
To: Feng Tang <feng.tang@linux.alibaba.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Petr Mladek <pmladek@suse.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH RFC 2/3] kernel/hung_task: add option to dump system info when hung task detected
Date: Thu, 8 May 2025 11:02:22 +0800	[thread overview]
Message-ID: <6eb27fe4-9dad-4ea5-afd0-a5d1e3f60acb@linux.dev> (raw)
In-Reply-To: <20250507104322.30700-3-feng.tang@linux.alibaba.com>

Hi Feng,

Thanks for the patch series!

On 2025/5/7 18:43, Feng Tang wrote:
> Kernel panic code utilizes sys_show_info() to dump needed system
> information to help debugging. Similarly, add this debug option for
> task hung case, and 'hungtask_print' is the knob to control what
> information should be printed out.
> 
> Also clean up the code about dumping locks and triggering backtrace
> for all CPUs. One todo may be to merge this 'hungtask_print' with
> some sysctl knobs in hung_task.c.
> 
> Signed-off-by: Feng Tang <feng.tang@linux.alibaba.com>
> ---
>   kernel/hung_task.c | 29 ++++++++++++++++-------------
>   1 file changed, 16 insertions(+), 13 deletions(-)
> 
> diff --git a/kernel/hung_task.c b/kernel/hung_task.c
> index dc898ec93463..8229637be2c7 100644
> --- a/kernel/hung_task.c
> +++ b/kernel/hung_task.c
> @@ -58,12 +58,20 @@ static unsigned long __read_mostly sysctl_hung_task_check_interval_secs;
>   static int __read_mostly sysctl_hung_task_warnings = 10;
>   
>   static int __read_mostly did_panic;
> -static bool hung_task_show_lock;
>   static bool hung_task_call_panic;
> -static bool hung_task_show_all_bt;
>   
>   static struct task_struct *watchdog_task;
>   
> +/*
> + * A bitmask to control what kinds of system info to be printed when a
> + * hung task is detected, it could be task, memory, lock etc. Refer panic.h
> + * for details of bit definition.
> + */
> +unsigned long hungtask_print;
> +core_param(hungtask_print, hungtask_print, ulong, 0644);

how about lockup_debug_print_mask?

It could be useful for debugging, but there are a few concerns:

1) SYS_PRINT_* vs. hung_task_* priority conflict
- If SYS_PRINT_ALL_CPU_BT is set on the command line but
hung_task_all_cpu_backtrace is disabled, which one wins?
- Or should SYS_PRINT_ALL_CPU_BT force-enable hung_task_all_cpu_backtrace?

2) Duplicate prints
With SYS_PRINT_BLOCKED_TASKS enabled, processes in D state will be printed
twice, right?

Also, we really should document how those command-line parameters work ;)

Thansk,
Lance

> +
> +static unsigned long cur_hungtask_print;
> +
>   #ifdef CONFIG_SMP
>   /*
>    * Should we dump all CPUs backtraces in a hung task event?
> @@ -163,11 +171,12 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
>   	 */
>   	sysctl_hung_task_detect_count++;
>   
> +	cur_hungtask_print = hungtask_print;
>   	trace_sched_process_hang(t);
>   
>   	if (sysctl_hung_task_panic) {
>   		console_verbose();
> -		hung_task_show_lock = true;
> +		cur_hungtask_print |= SYS_PRINT_LOCK_INFO;
>   		hung_task_call_panic = true;
>   	}
>   
> @@ -190,10 +199,10 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
>   			" disables this message.\n");
>   		sched_show_task(t);
>   		debug_show_blocker(t);
> -		hung_task_show_lock = true;
> +		cur_hungtask_print |= SYS_PRINT_LOCK_INFO;
>   
>   		if (sysctl_hung_task_all_cpu_backtrace)
> -			hung_task_show_all_bt = true;
> +			cur_hungtask_print |= SYS_PRINT_ALL_CPU_BT;
>   		if (!sysctl_hung_task_warnings)
>   			pr_info("Future hung task reports are suppressed, see sysctl kernel.hung_task_warnings\n");
>   	}
> @@ -242,7 +251,7 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout)
>   	if (test_taint(TAINT_DIE) || did_panic)
>   		return;
>   
> -	hung_task_show_lock = false;
> +	cur_hungtask_print = 0;
>   	rcu_read_lock();
>   	for_each_process_thread(g, t) {
>   		unsigned int state;
> @@ -266,14 +275,8 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout)
>   	}
>    unlock:
>   	rcu_read_unlock();
> -	if (hung_task_show_lock)
> -		debug_show_all_locks();
> -
> -	if (hung_task_show_all_bt) {
> -		hung_task_show_all_bt = false;
> -		trigger_all_cpu_backtrace();
> -	}
>   
> +	sys_show_info(cur_hungtask_print);
>   	if (hung_task_call_panic)
>   		panic("hung_task: blocked tasks");
>   }


  reply	other threads:[~2025-05-08  3:02 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-07 10:43 [PATCH RFC 0/3] generalize panic_print's dump function to be Feng Tang
2025-05-07 10:43 ` [PATCH RFC 1/3] kernel/panic: generalize panic_print's function to show sys info Feng Tang
2025-05-07 10:43 ` [PATCH RFC 2/3] kernel/hung_task: add option to dump system info when hung task detected Feng Tang
2025-05-08  3:02   ` Lance Yang [this message]
2025-05-08  5:45     ` Feng Tang
2025-05-09  4:44       ` Lance Yang
2025-05-09  6:35         ` Feng Tang
2025-05-07 10:43 ` [PATCH RFC 3/3] kernel/watchdog: add option to dump system info when system is locked up Feng Tang
2025-05-09  2:26 ` [PATCH RFC 0/3] generalize panic_print's dump function to be Lance Yang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6eb27fe4-9dad-4ea5-afd0-a5d1e3f60acb@linux.dev \
    --to=lance.yang@linux.dev \
    --cc=akpm@linux-foundation.org \
    --cc=feng.tang@linux.alibaba.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.