Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1515983
| 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
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