All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Rusty Russell <rusty@rustcorp.com.au>
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 07:00:44 +0100	[thread overview]
Message-ID: <20090315060044.GE20949@elte.hu> (raw)
In-Reply-To: <200903151326.34114.rusty@rustcorp.com.au>


* Rusty Russell <rusty@rustcorp.com.au> wrote:

> 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);

Sigh, there are two bugs here:

   1) what if the GFP_KERNEL allocation fails?

   2) this code is called with interrupts disabled, so a 
      GFP_KERNEL allocation can be lethal.

c1e_mask should stay a static cpumask...

Why do we convert static, standalone masks to cpumask_var?

	Ingo

  reply	other threads:[~2009-03-15  6:01 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
2009-03-15  6:00                           ` Ingo Molnar [this message]
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=20090315060044.GE20949@elte.hu \
    --to=mingo@elte.hu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rusty@rustcorp.com.au \
    --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.