All of lore.kernel.org
 help / color / mirror / Atom feed
From: Silas Boyd-Wickizer <sbw@mit.edu>
To: Jean Delvare <khali@linux-fr.org>
Cc: linux-kernel@vger.kernel.org,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	Guenter Roeck <linux@roeck-us.net>,
	Thomas Gleixner <tglx@linutronix.de>,
	Harald Welte <laforge@openezx.org>,
	x86@kernel.org
Subject: Re: [PATCH 3/3] Use get_online_cpus to avoid races involving for_each_online_cpu
Date: Fri, 3 Aug 2012 11:53:24 -0700	[thread overview]
Message-ID: <20120803185323.GA3525@mit.edu> (raw)
In-Reply-To: <20120803155640.7e2356fb@endymion.delvare>

On Fri, Aug 03, 2012 at 03:56:40PM +0200, Jean Delvare wrote:
> Hi Silas,
> 
> On Thu, 2 Aug 2012 17:07:08 -0700, Silas Boyd-Wickizer wrote:
> > via_cputemp_init in drivers/hwmon/via-cputemp.c loops with
> > for_each_online_cpu, adding platform_devices, then calls
> > register_hotcpu_notifier.  If a CPU is offlined between the loop and
> > register_hotcpu_notifier, then later onlined, via_cputemp_device_add
> > will attempt to platform devices with the same ID.
> 
> Missing word in this last sentence.

Fixed.

> 
> > 
> > This fix surrounds for_each_online_cpu and register_hotcpu_notifier
> > with get_online_cpus+put_online_cpus.
> > 
> > Build tested.
> 
> Thanks for reporting and for the fix. Two questions:
> 
> What about via_cputemp_exit()? While less obvious, I suspect it is racy
> too. The notifier is unregistered first. If a CPU gets offline before
> the devices are removed, we will have a device pointing to a
> non-existent CPU for a short time. I think we should play it safe and
> use get/put_online_cpus() there too, as I seem to understand it
> guarantees CPUs can't go offline when we wouldn't handle that event
> properly. Alternatively, unregistering the platform driver first might
> close the race.

I added get/put_online_cpus().

> 
> Secondly, drivers/hwmon/coretemp.c is very similar to via-cputemp.c, so
> I think it needs the exact same fix(es).

Indeed -- I'll submit a fix for this.

Silas

> 
> > 
> > Signed-off-by: Silas Boyd-Wickizer <sbw@mit.edu>
> > ---
> >  drivers/hwmon/via-cputemp.c |    3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/drivers/hwmon/via-cputemp.c b/drivers/hwmon/via-cputemp.c
> > index 8689664..9ad07c3 100644
> > --- a/drivers/hwmon/via-cputemp.c
> > +++ b/drivers/hwmon/via-cputemp.c
> > @@ -328,6 +328,7 @@ static int __init via_cputemp_init(void)
> >  	if (err)
> >  		goto exit;
> >  
> > +	get_online_cpus();
> >  	for_each_online_cpu(i) {
> >  		struct cpuinfo_x86 *c = &cpu_data(i);
> >  
> > @@ -347,12 +348,14 @@ static int __init via_cputemp_init(void)
> >  
> >  #ifndef CONFIG_HOTPLUG_CPU
> >  	if (list_empty(&pdev_list)) {
> > +		put_online_cpus();
> >  		err = -ENODEV;
> >  		goto exit_driver_unreg;
> >  	}
> >  #endif
> >  
> >  	register_hotcpu_notifier(&via_cputemp_cpu_notifier);
> > +	put_online_cpus();
> >  	return 0;
> >  
> >  #ifndef CONFIG_HOTPLUG_CPU
> 
> 
> -- 
> Jean Delvare

      reply	other threads:[~2012-08-03 18:57 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-03  0:07 [PATCH 3/3] Use get_online_cpus to avoid races involving for_each_online_cpu Silas Boyd-Wickizer
2012-08-03  7:24 ` Harald Welte
2012-08-03 13:56 ` Jean Delvare
2012-08-03 18:53   ` Silas Boyd-Wickizer [this message]

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=20120803185323.GA3525@mit.edu \
    --to=sbw@mit.edu \
    --cc=khali@linux-fr.org \
    --cc=laforge@openezx.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=tglx@linutronix.de \
    --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.