From: Heiko Carstens <heiko.carstens@de.ibm.com>
To: Peter Zijlstra <a.p.zijlstra@chello.nl>,
Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: linux-kernel@vger.kernel.org,
Christof Schmitt <christof.schmitt@de.ibm.com>,
Frank Blaschka <frank.blaschka@de.ibm.com>,
Horst Hartmann <horsth@linux.vnet.ibm.com>,
Heiko Carstens <heiko.carstens@de.ibm.com>
Subject: [patch 1/3] printk: fix wake_up_klogd() vs cpu hotplug
Date: Fri, 26 Nov 2010 13:00:58 +0100 [thread overview]
Message-ID: <20101126120235.091835714@de.ibm.com> (raw)
In-Reply-To: 20101126120057.879397696@de.ibm.com
[-- Attachment #1: 001_printk_preempt.diff --]
[-- Type: text/plain, Size: 1118 bytes --]
From: Heiko Carstens <heiko.carstens@de.ibm.com>
wake_up_klogd() may get called from preemtible context but uses
__raw_get_cpu_var() to write to a per cpu variable. If it gets preempted between
getting the address and writing to it, the cpu in question could be offline if
the process gets scheduled back and hence writes to the per cpu data of an offline
cpu.
No idea why that behaviour was introduced with fa33507a "printk: robustify
printk, fix #2" which was supposed to fix a "using smp_processor_id() in
preemptible" warning.
Let's use get_cpu_var() instead which disables preemption and makes sure that
the outlined scenario cannot happen.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
kernel/printk.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -1087,8 +1087,10 @@ int printk_needs_cpu(int cpu)
void wake_up_klogd(void)
{
- if (waitqueue_active(&log_wait))
- __raw_get_cpu_var(printk_pending) = 1;
+ if (waitqueue_active(&log_wait)) {
+ get_cpu_var(printk_pending) = 1;
+ put_cpu_var(printk_pending);
+ }
}
/**
next prev parent reply other threads:[~2010-11-26 12:02 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-26 12:00 [patch 0/3] three cpu hotplug fixes Heiko Carstens
2010-11-26 12:00 ` Heiko Carstens [this message]
2010-11-26 12:10 ` [patch 1/3] printk: fix wake_up_klogd() vs cpu hotplug Peter Zijlstra
2010-11-26 12:13 ` Heiko Carstens
2010-11-26 12:15 ` Peter Zijlstra
2010-11-26 12:35 ` Eric Dumazet
2010-11-26 12:42 ` Heiko Carstens
2010-11-26 13:01 ` Eric Dumazet
2010-11-26 15:02 ` [tip:sched/urgent] printk: Fix " tip-bot for Heiko Carstens
2010-11-26 12:00 ` [patch 2/3] nohz: fix printk_needs_cpu() return value on offline cpus Heiko Carstens
2010-11-26 12:11 ` Peter Zijlstra
2010-12-07 21:32 ` [stable] " Greg KH
2010-12-08 8:07 ` Heiko Carstens
2010-12-08 11:13 ` Peter Zijlstra
2010-11-26 15:02 ` [tip:sched/urgent] nohz: Fix " tip-bot for Heiko Carstens
2010-11-26 16:22 ` [PATCH] printk: use this_cpu_{read|write} api on printk_pending Eric Dumazet
2010-11-26 16:29 ` Peter Zijlstra
2010-11-26 16:40 ` Christoph Lameter
2010-11-26 16:59 ` Eric Dumazet
2010-11-26 17:11 ` Christoph Lameter
2010-11-26 17:20 ` Eric Dumazet
2010-11-26 17:27 ` Christoph Lameter
2010-12-08 20:41 ` [tip:sched/core] printk: Use " tip-bot for Eric Dumazet
2010-12-08 21:47 ` Christoph Lameter
2010-12-09 1:43 ` Eric Dumazet
2010-12-09 23:38 ` Christoph Lameter
2010-11-26 12:01 ` [patch 3/3] nohz/s390: fix arch_needs_cpu() return value on offline cpus Heiko Carstens
2010-11-26 12:14 ` Peter Zijlstra
2010-11-26 12:17 ` Heiko Carstens
2010-12-01 9:11 ` Heiko Carstens
2010-12-01 12:19 ` Peter Zijlstra
2010-12-08 20:41 ` [tip:sched/urgent] nohz: Fix get_next_timer_interrupt() vs cpu hotplug tip-bot for Heiko Carstens
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=20101126120235.091835714@de.ibm.com \
--to=heiko.carstens@de.ibm.com \
--cc=a.p.zijlstra@chello.nl \
--cc=christof.schmitt@de.ibm.com \
--cc=frank.blaschka@de.ibm.com \
--cc=horsth@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=schwidefsky@de.ibm.com \
--cc=tglx@linutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox