Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1515983

Re: [PATCH 2/2] kdb: Call vkdb_printf() from vprintk_default() only when wanted

Path csiph.com!aioe.org!gothmog.csi.it!bofh.it!news.nic.it!robomod
From Daniel Thompson <daniel.thompson@linaro.org>
Newsgroups linux.kernel
Subject Re: [PATCH 2/2] kdb: Call vkdb_printf() from vprintk_default() only when wanted
Date Mon, 07 Nov 2016 11:30:02 +0100
Message-ID <sAPlE-1P0-9@gated-at.bofh.it> (permalink)
References <suHAu-5DG-9@gated-at.bofh.it> <suHAv-5DG-43@gated-at.bofh.it>
X-Original-To Petr Mladek <pmladek@suse.com>, Jason Wessel <jason.wessel@windriver.com>
Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=E8YJY1PTAWQXocdSVpdhVQHlNapfHS8cuzQJ0Xd+Q4Y=; b=M58Y608Pvg2CfSAS+w5GYX80Yi7KQIeqJCcCnWZgxoMu9M3sbQfGfSDqZJPwTf5F0y DY0dFZ38IYsYeHX+TMnG1k0rRE5WqaToKi+OJ016etOrIghlUVfoJfhWaso5TsH7SKzk b4hFB8pugER2ceyHvBoBhocQyA42fUclh2fC8=
X-Google-Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=E8YJY1PTAWQXocdSVpdhVQHlNapfHS8cuzQJ0Xd+Q4Y=; b=eSDR2J5DjJ24JOZbM6vyXy9xH5NrACOt4g44M6cSGRy4d+KSVj9UJ0etH+X+d1NDe6 eJ6QnnTFOdAFDW6EBjhiXqIJi1GQpLzRfWrAlDhBilr0+po3VNLG4WVOXNDyJMva0MgE fh2rx0YdyZ0E2DSI4FQZTwelAWME55Dx1W0bmYOH649R2ka0p4GsnNSax68TKdkoigOb MFEKslq1BDrLjpOqWNigivRGAuu6O0wGCuSSB1TCrRYwOabaT+PMKp+9C3VJdj81egQe BHIihCQfGyA236tG9nFs19aAH1VbLlPxRP20G1gfu1BMvJWA59NyMP1sz/9d9LZAFssW ocIg==
X-Gm-Message-State ABUngvf/OF87hW2V4nuojnrarxmOOe7qu74lcoZJ8y4yGuxYHCdbPsd9+2MVqglgdXr1AM7P
X-Received by 10.28.125.136 with SMTP id y130mr9264849wmc.112.1478514263457; Mon, 07 Nov 2016 02:24:23 -0800 (PST)
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0
MIME-Version 1.0
Content-Type text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding 7bit
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 47
Organization linux.* mail to news gateway
X-Original-Cc Peter Zijlstra <peterz@infradead.org>, Andrew Morton <akpm@linux-foundation.org>, Sergey Senozhatsky <sergey.senozhatsky@gmail.com>, linux-kernel@vger.kernel.org
X-Original-Date Mon, 7 Nov 2016 10:24:22 +0000
X-Original-Message-ID <73b8fe23-4fc7-9d56-ed78-a3d6b398ad74@linaro.org>
X-Original-References <1477054235-1624-1-git-send-email-pmladek@suse.com> <1477054235-1624-3-git-send-email-pmladek@suse.com>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1515983

Show key headers only | View raw


On 21/10/16 13:50, Petr Mladek wrote:
> kdb_trap_printk allows to pass normal printk() messages to kdb via
> vkdb_printk(). For example, it is used to get backtrace using
> the classic show_stack(), see kdb_show_stack().
>
> vkdb_printf() tries to avoid a potential infinite loop by disabling
> the trap. But this approach is racy, for example:
>
> CPU1					CPU2
>
> vkdb_printf()
>   // assume that kdb_trap_printk == 0
>   saved_trap_printk = kdb_trap_printk;
>   kdb_trap_printk = 0;
>
> 					kdb_show_stack()
> 					  kdb_trap_printk++;

When kdb is running any of the commands that use kdb_trap_printk there 
is a single active CPU and the other CPUs should be in a holding pen 
inside kgdb_cpu_enter().

The only time this is violated is when there is a timeout waiting for 
the other CPUs to report to the holding pen.


> diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
> index d5e397315473..db73e33811e7 100644
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -1941,7 +1941,9 @@ int vprintk_default(const char *fmt, va_list args)
>  	int r;
>
>  #ifdef CONFIG_KGDB_KDB
> -	if (unlikely(kdb_trap_printk)) {
> +	/* Allow to pass printk() to kdb but avoid a recursion. */
> +	if (unlikely(kdb_trap_printk &&
> +		     kdb_printf_cpu != smp_processor_id())) {

Firstly, why !=?

Secondly, if kdb_trap_printk is set and the "wrong" CPU calls printk 
then we have an opportunity to trap a rouge processor in the holding pen 
meaning the test should probably be part of vkdb_printk() anyway.


Daniel.

Back to linux.kernel | Previous | Next | Find similar | Unroll thread


Thread

Re: [PATCH 2/2] kdb: Call vkdb_printf() from vprintk_default() only  when wanted Daniel Thompson <daniel.thompson@linaro.org> - 2016-11-07 11:30 +0100

csiph-web