All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rusty Russell <rusty@rustcorp.com.au>
To: Ingo Molnar <mingo@elte.hu>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org,
	Mike Travis <travis@sgi.com>
Subject: Re: [PULL] x86 cpumask work
Date: Sun, 15 Mar 2009 13:26:33 +1030	[thread overview]
Message-ID: <200903151326.34114.rusty@rustcorp.com.au> (raw)
In-Reply-To: <20090313152742.GA11800@elte.hu>

On Saturday 14 March 2009 01:57:42 Ingo Molnar wrote:
> Note, it might have crashed in a cpu hotplug test i'm conducting 
> during bootup:
> 
> echo 0 > /sys/devices/system/cpu/cpu1/online

Indeed, thanks!

Subject: cpumask: fix crash when offlining cpus

Impact: Fix cpu offline when CONFIG_MAXSMP=y

Changeset bc9b83dd1f66402b870301c3c7117b9c1484abb4 "cpumask: convert c1e_mask
in arch/x86/kernel/process.c to cpumask_var_t" contained a bug: c1e_mask is
manipulated even if C1E isn't detected (and hence not allocated).  This is
simply fixed by checking for NULL (which gcc optimizes out anyway of
CONFIG_CPUMASK_OFFSTACK=n, since it knows ce1_mask can never be NULL).

In addition, fix a leak where select_idle_routine re-allocates (and re-clears)
c1e_mask on every cpu init.

Reported-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index cad5431..91a8c26 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -479,7 +479,8 @@ static int c1e_detected;
 
 void c1e_remove_cpu(int cpu)
 {
-	cpumask_clear_cpu(cpu, c1e_mask);
+	if (c1e_mask != NULL)
+		cpumask_clear_cpu(cpu, c1e_mask);
 }
 
 /*
@@ -556,8 +557,11 @@ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c)
 		pm_idle = mwait_idle;
 	} else if (check_c1e_idle(c)) {
 		printk(KERN_INFO "using C1E aware idle routine\n");
-		alloc_cpumask_var(&c1e_mask, GFP_KERNEL);
-		cpumask_clear(c1e_mask);
+		/* c1e_mask can only be NULL during boot of first cpu. */
+		if (c1e_mask == NULL) {
+			alloc_cpumask_var(&c1e_mask, GFP_KERNEL);
+			cpumask_clear(c1e_mask);
+		}
 		pm_idle = c1e_idle;
 	} else
 		pm_idle = default_idle;

  reply	other threads:[~2009-03-15  2:56 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-12  4:23 [PULL] x86 cpumask work Rusty Russell
2009-03-12 10:26 ` Ingo Molnar
2009-03-12 10:37   ` Ingo Molnar
2009-03-12 22:54     ` Rusty Russell
2009-03-13  0:57       ` Ingo Molnar
2009-03-13  2:46         ` Rusty Russell
2009-03-13  3:20           ` Ingo Molnar
2009-03-13  4:34             ` Rusty Russell
2009-03-13  4:55               ` Ingo Molnar
2009-03-13  5:27                 ` Ingo Molnar
2009-03-13  5:32                   ` Ingo Molnar
2009-03-13  6:44                     ` Rusty Russell
2009-03-13 13:12                     ` Rusty Russell
2009-03-13 13:45                       ` [tip:cpus4096] cpumask: convert node_to_cpumask_map[] to cpumask_var_t Rusty Russell
2009-03-13 15:27                       ` [PULL] x86 cpumask work Ingo Molnar
2009-03-15  2:56                         ` Rusty Russell [this message]
2009-03-15  6:00                           ` Ingo Molnar
2009-03-16  3:03                             ` Rusty Russell
2009-03-16  8:48                               ` Ingo Molnar
2009-03-17  4:20                                 ` Rusty Russell
2009-03-17 10:51                                   ` Ingo Molnar
2009-03-17 21:27                                     ` Rusty Russell
2009-03-18  8:51                                   ` [tip:cpus4096] cpumask: fix CONFIG_CPUMASK_OFFSTACK=y cpu hotunplug crash Rusty Russell
2009-03-13 13:13                     ` [PATCH] Move numa_node_id default implementation to topology.h Rusty Russell
2009-03-13 13:45                       ` [tip:cpus4096] numa, cpumask: move " Rusty Russell
  -- strict thread matches above, loose matches on Subject: below --
2009-03-17 18:56 [PULL] x86 cpumask work Cliff Wickman
2009-03-17 21:52 ` Rusty Russell
2009-03-18 12:57   ` Cliff Wickman

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=200903151326.34114.rusty@rustcorp.com.au \
    --to=rusty@rustcorp.com.au \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=travis@sgi.com \
    --cc=x86@kernel.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.