From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org,
chuck.anderson@oracle.com
Subject: Re: [PATCH 2/2] cpu: make sure that cpu/online file created before KOBJ_ADD is emitted
Date: Tue, 14 May 2013 09:17:04 -0400 [thread overview]
Message-ID: <20130514131704.GE5558@phenom.dumpdata.com> (raw)
In-Reply-To: <1368482732-25554-3-git-send-email-imammedo@redhat.com>
On Tue, May 14, 2013 at 12:05:32AM +0200, Igor Mammedov wrote:
> Fixes race between udev and hotplugged CPU registration, described at
> https://lkml.org/lkml/2012/4/30/198
It would be better if you copy-n-pasted the contents of that URL in here.
> by defining "online" attribute statically so that device_add() would
> create it before notifying udev about new CPU.
>
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> ---
> drivers/base/cpu.c | 34 +++++++++++++++++++++-------------
> 1 files changed, 21 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
> index 02e4d73..6578030 100644
> --- a/drivers/base/cpu.c
> +++ b/drivers/base/cpu.c
> @@ -64,18 +64,21 @@ static ssize_t __ref store_online(struct device *dev,
> }
> static DEVICE_ATTR(online, 0644, show_online, store_online);
>
> -static void __cpuinit register_cpu_control(struct cpu *cpu)
> -{
> - device_create_file(&cpu->dev, &dev_attr_online);
> -}
> +static struct attribute *hotplug_cpu_attrs[] = {
> + &dev_attr_online.attr,
> + NULL
> +};
> +
> +static struct attribute_group hotplug_cpu_attr_group = {
> + .attrs = hotplug_cpu_attrs,
> +};
> +
> void unregister_cpu(struct cpu *cpu)
> {
> int logical_cpu = cpu->dev.id;
>
> unregister_cpu_under_node(logical_cpu, cpu_to_node(logical_cpu));
>
> - device_remove_file(&cpu->dev, &dev_attr_online);
> -
> device_unregister(&cpu->dev);
> per_cpu(cpu_sys_devices, logical_cpu) = NULL;
> return;
> @@ -101,11 +104,6 @@ static ssize_t cpu_release_store(struct device *dev,
> static DEVICE_ATTR(probe, S_IWUSR, NULL, cpu_probe_store);
> static DEVICE_ATTR(release, S_IWUSR, NULL, cpu_release_store);
> #endif /* CONFIG_ARCH_CPU_PROBE_RELEASE */
> -
> -#else /* ... !CONFIG_HOTPLUG_CPU */
> -static inline void register_cpu_control(struct cpu *cpu)
> -{
> -}
> #endif /* CONFIG_HOTPLUG_CPU */
>
> #ifdef CONFIG_KEXEC
> @@ -150,6 +148,16 @@ static const struct attribute_group *common_cpu_attr_groups[] = {
> NULL
> };
>
> +static const struct attribute_group *hotplugable_cpu_attr_groups[] = {
> +#ifdef CONFIG_KEXEC
> + &crash_note_cpu_attr_group,
> +#endif
> +#ifdef CONFIG_HOTPLUG_CPU
> + &hotplug_cpu_attr_group,
> +#endif
> + NULL
> +};
> +
> /*
> * Print cpu online, possible, present, and system maps
> */
> @@ -265,9 +273,9 @@ int __cpuinit register_cpu(struct cpu *cpu, int num)
> cpu->dev.bus->uevent = arch_cpu_uevent;
> #endif
> cpu->dev.groups = common_cpu_attr_groups;
> + if (cpu->hotpluggable)
> + cpu->dev.groups = hotplugable_cpu_attr_groups;
> error = device_register(&cpu->dev);
> - if (!error && cpu->hotpluggable)
> - register_cpu_control(cpu);
> if (!error)
> per_cpu(cpu_sys_devices, num) = &cpu->dev;
> if (!error)
> --
> 1.7.1
>
next prev parent reply other threads:[~2013-05-14 13:17 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20120430153623.GA23485@phenom.dumpdata.com>
2012-04-30 15:37 ` udev races with 'arch_register_cpu' to write 1 to /sys/devices/system/cpu/cpu1/online (which is not yet created) Konrad Rzeszutek Wilk
2012-04-30 15:50 ` Greg KH
2012-04-30 15:51 ` Greg KH
2012-04-30 16:17 ` Konrad Rzeszutek Wilk
2013-05-10 16:34 ` Igor Mammedov
2013-05-13 13:31 ` Konrad Rzeszutek Wilk
2013-05-13 14:25 ` Greg KH
2013-05-13 22:05 ` [RFC 0/2] cpu: fix leak and udev race in register_cpu() Igor Mammedov
2013-05-14 13:19 ` Konrad Rzeszutek Wilk
2013-05-14 14:45 ` Greg KH
2013-05-13 22:05 ` [PATCH 1/2] cpu: fix "crash_notes" leak " Igor Mammedov
2013-05-14 13:16 ` Konrad Rzeszutek Wilk
2013-05-13 22:05 ` [PATCH 2/2] cpu: make sure that cpu/online file created before KOBJ_ADD is emitted Igor Mammedov
2013-05-14 13:17 ` Konrad Rzeszutek Wilk [this message]
2013-05-14 14:46 [PATCH 0/2 v2] cpu: fix leaks and udev race in register_cpu() Igor Mammedov
2013-05-14 14:46 ` [PATCH 2/2] cpu: make sure that cpu/online file created before KOBJ_ADD is emitted Igor Mammedov
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=20130514131704.GE5558@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=chuck.anderson@oracle.com \
--cc=gregkh@linuxfoundation.org \
--cc=imammedo@redhat.com \
--cc=linux-kernel@vger.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.