public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Heiko Carstens <heiko.carstens@de.ibm.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
	eric.dumazet@gmail.com, a.p.zijlstra@chello.nl,
	heiko.carstens@de.ibm.com, tglx@linutronix.de, mingo@elte.hu
Subject: [tip:sched/urgent] printk: Fix wake_up_klogd() vs cpu hotplug
Date: Fri, 26 Nov 2010 15:02:06 GMT	[thread overview]
Message-ID: <tip-49f4138346b3cec2706adff02658fe27ceb1e46f@git.kernel.org> (raw)
In-Reply-To: <20101126124247.GC7023@osiris.boeblingen.de.ibm.com>

Commit-ID:  49f4138346b3cec2706adff02658fe27ceb1e46f
Gitweb:     http://git.kernel.org/tip/49f4138346b3cec2706adff02658fe27ceb1e46f
Author:     Heiko Carstens <heiko.carstens@de.ibm.com>
AuthorDate: Fri, 26 Nov 2010 13:42:47 +0100
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Fri, 26 Nov 2010 15:03:11 +0100

printk: Fix wake_up_klogd() vs cpu hotplug

wake_up_klogd() may get called from preemptible 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.

This buggy 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 this_cpu_write() instead which disables preemption and makes sure
that the outlined scenario cannot happen.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20101126124247.GC7023@osiris.boeblingen.de.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 kernel/printk.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kernel/printk.c b/kernel/printk.c
index 9a2264f..cf7588e 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -1088,7 +1088,7 @@ int printk_needs_cpu(int cpu)
 void wake_up_klogd(void)
 {
 	if (waitqueue_active(&log_wait))
-		__raw_get_cpu_var(printk_pending) = 1;
+		this_cpu_write(printk_pending, 1);
 }
 
 /**

  parent reply	other threads:[~2010-11-26 15: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 ` [patch 1/3] printk: fix wake_up_klogd() vs cpu hotplug Heiko Carstens
2010-11-26 12:10   ` 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-bot for Heiko Carstens [this message]
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=tip-49f4138346b3cec2706adff02658fe27ceb1e46f@git.kernel.org \
    --to=heiko.carstens@de.ibm.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=eric.dumazet@gmail.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=mingo@redhat.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