On Wednesday, May 22, 2013 02:02:13 PM Stephen Rothwell wrote: > Hi all, Hi Stephen, Thanks for fixing this up! Hi Greg, What about merging my acpi-hotplug branch into the driver-core tree? That would make the Linus' life easier going forward I suppose. Thanks, Rafael > On Wed, 22 May 2013 13:47:41 +1000 Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote: > > > > Today's linux-next merge of the driver-core tree got a conflict in > > drivers/base/cpu.c between commit 0902a9044fa5 ("Driver core: Use generic > > offline/online for CPU offline/online") from the pm tree and commit > > 1c4e2d70afb1 ("cpu: make sure that cpu/online file created before > > KOBJ_ADD is emitted") from the driver-core tree. > > > > I fixed it up (they do some bits in common - see below) and can carry the > > fix as necessary (no action is required). > > > > diff --cc drivers/base/cpu.c > > index 7431ba6,c377673..0000000 > > --- a/drivers/base/cpu.c > > +++ b/drivers/base/cpu.c > > @@@ -38,39 -34,66 +38,48 @@@ static void change_cpu_under_node(struc > > cpu->node_id = to_nid; > > } > > > > -static ssize_t show_online(struct device *dev, > > - struct device_attribute *attr, > > - char *buf) > > +static int __ref cpu_subsys_online(struct device *dev) > > { > > struct cpu *cpu = container_of(dev, struct cpu, dev); > > + int cpuid = dev->id; > > + int from_nid, to_nid; > > + int ret; > > + > > + cpu_hotplug_driver_lock(); > > + > > + from_nid = cpu_to_node(cpuid); > > + ret = cpu_up(cpuid); > > + /* > > + * When hot adding memory to memoryless node and enabling a cpu > > + * on the node, node number of the cpu may internally change. > > + */ > > + to_nid = cpu_to_node(cpuid); > > + if (from_nid != to_nid) > > + change_cpu_under_node(cpu, from_nid, to_nid); > > > > - return sprintf(buf, "%u\n", !!cpu_online(cpu->dev.id)); > > + cpu_hotplug_driver_unlock(); > > + return ret; > > } > > > > -static ssize_t __ref store_online(struct device *dev, > > - struct device_attribute *attr, > > - const char *buf, size_t count) > > +static int cpu_subsys_offline(struct device *dev) > > { > > - struct cpu *cpu = container_of(dev, struct cpu, dev); > > - int cpuid = cpu->dev.id; > > - int from_nid, to_nid; > > - ssize_t ret; > > + int ret; > > > > cpu_hotplug_driver_lock(); > > - switch (buf[0]) { > > - case '0': > > - ret = cpu_down(cpuid); > > - if (!ret) > > - kobject_uevent(&dev->kobj, KOBJ_OFFLINE); > > - break; > > - case '1': > > - from_nid = cpu_to_node(cpuid); > > - ret = cpu_up(cpuid); > > - > > - /* > > - * When hot adding memory to memoryless node and enabling a cpu > > - * on the node, node number of the cpu may internally change. > > - */ > > - to_nid = cpu_to_node(cpuid); > > - if (from_nid != to_nid) > > - change_cpu_under_node(cpu, from_nid, to_nid); > > - > > - if (!ret) > > - kobject_uevent(&dev->kobj, KOBJ_ONLINE); > > - break; > > - default: > > - ret = -EINVAL; > > - } > > + ret = cpu_down(dev->id); > > cpu_hotplug_driver_unlock(); > > - > > - if (ret >= 0) > > - ret = count; > > return ret; > > } > > -static DEVICE_ATTR(online, 0644, show_online, store_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; > > @@@ -102,20 -125,8 +111,19 @@@ static ssize_t cpu_release_store(struc > > 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 */ > > - > > #endif /* CONFIG_HOTPLUG_CPU */ > > > > +struct bus_type cpu_subsys = { > > + .name = "cpu", > > + .dev_name = "cpu", > > + .match = cpu_subsys_match, > > +#ifdef CONFIG_HOTPLUG_CPU > > + .online = cpu_subsys_online, > > + .offline = cpu_subsys_offline, > > +#endif > > +}; > > +EXPORT_SYMBOL_GPL(cpu_subsys); > > + > > #ifdef CONFIG_KEXEC > > #include <linux/kexec.h> > > OK, after doing that I got this error: > > drivers/base/cpu.c:75:3: error: 'dev_attr_online' undeclared here (not in a function) > &dev_attr_online.attr, > ^ > > So I applied this merge fix patch: > > diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c > index 811bb5a..ff97614 100644 > --- a/drivers/base/cpu.c > +++ b/drivers/base/cpu.c > @@ -71,15 +71,6 @@ static int cpu_subsys_offline(struct device *dev) > return ret; > } > > -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; > @@ -182,9 +173,6 @@ 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 > }; > > Better ideas welcome :-) > -- I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center. -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html