put_online_cpus();
        return rc ? rc : count;
  }
 -static SYSDEV_ATTR(configure, 0644, cpu_configure_show, cpu_configure_store);
 +static DEVICE_ATTR(configure, 0644, cpu_configure_show, cpu_configure_store);
  #endif /* CONFIG_HOTPLUG_CPU */
  
- static ssize_t cpu_polarization_show(struct device *dev,
-                                    struct device_attribute *attr, char *buf)
- {
-       int cpu = dev->id;
-       ssize_t count;
- 
-       mutex_lock(&smp_cpu_state_mutex);
-       switch (smp_cpu_polarization[cpu]) {
-       case POLARIZATION_HRZ:
-               count = sprintf(buf, "horizontal\n");
-               break;
-       case POLARIZATION_VL:
-               count = sprintf(buf, "vertical:low\n");
-               break;
-       case POLARIZATION_VM:
-               count = sprintf(buf, "vertical:medium\n");
-               break;
-       case POLARIZATION_VH:
-               count = sprintf(buf, "vertical:high\n");
-               break;
-       default:
-               count = sprintf(buf, "unknown\n");
-               break;
-       }
-       mutex_unlock(&smp_cpu_state_mutex);
-       return count;
- }
- static DEVICE_ATTR(polarization, 0444, cpu_polarization_show, NULL);
- 
 -static ssize_t show_cpu_address(struct sys_device *dev,
 -                              struct sysdev_attribute *attr, char *buf)
 +static ssize_t show_cpu_address(struct device *dev,
 +                              struct device_attribute *attr, char *buf)
  {
        return sprintf(buf, "%d\n", __cpu_logical_map[dev->id]);
  }
 -static SYSDEV_ATTR(address, 0444, show_cpu_address, NULL);
 +static DEVICE_ATTR(address, 0444, show_cpu_address, NULL);
  
- 
  static struct attribute *cpu_common_attrs[] = {
  #ifdef CONFIG_HOTPLUG_CPU
 -      &attr_configure.attr,
 +      &dev_attr_configure.attr,
  #endif
 -      &attr_address.attr,
 +      &dev_attr_address.attr,
-       &dev_attr_polarization.attr,
        NULL,
  };
  
        rc = smp_rescan_cpus();
        return rc ? rc : count;
  }
 -static SYSDEV_CLASS_ATTR(rescan, 0200, NULL, rescan_store);
 +static DEVICE_ATTR(rescan, 0200, NULL, rescan_store);
  #endif /* CONFIG_HOTPLUG_CPU */
  
- static ssize_t dispatching_show(struct device *dev,
-                               struct device_attribute *attr,
-                               char *buf)
- {
-       ssize_t count;
- 
-       mutex_lock(&smp_cpu_state_mutex);
-       count = sprintf(buf, "%d\n", cpu_management);
-       mutex_unlock(&smp_cpu_state_mutex);
-       return count;
- }
- 
- static ssize_t dispatching_store(struct device *dev,
-                                struct device_attribute *attr,
-                                const char *buf,
-                                size_t count)
- {
-       int val, rc;
-       char delim;
- 
-       if (sscanf(buf, "%d %c", &val, &delim) != 1)
-               return -EINVAL;
-       if (val != 0 && val != 1)
-               return -EINVAL;
-       rc = 0;
-       get_online_cpus();
-       mutex_lock(&smp_cpu_state_mutex);
-       if (cpu_management == val)
-               goto out;
-       rc = topology_set_cpu_management(val);
-       if (!rc)
-               cpu_management = val;
- out:
-       mutex_unlock(&smp_cpu_state_mutex);
-       put_online_cpus();
-       return rc ? rc : count;
- }
- static DEVICE_ATTR(dispatching, 0644, dispatching_show,
-                        dispatching_store);
- 
- static int __init topology_init(void)
+ static int __init s390_smp_init(void)
  {
-       int cpu;
-       int rc;
+       int cpu, rc;
  
        register_cpu_notifier(&smp_cpu_nb);
- 
  #ifdef CONFIG_HOTPLUG_CPU
 -      rc = sysdev_class_create_file(&cpu_sysdev_class, &attr_rescan);
 +      rc = device_create_file(cpu_subsys.dev_root, &dev_attr_rescan);
        if (rc)
                return rc;
  #endif
 
        store_topology(info);
        pr_info("The CPU configuration topology of the machine is:");
        for (i = 0; i < TOPOLOGY_NR_MAG; i++)
-               printk(" %d", info->mag[i]);
-       printk(" / %d\n", info->mnest);
+               printk(KERN_CONT " %d", info->mag[i]);
+       printk(KERN_CONT " / %d\n", info->mnest);
        alloc_masks(info, &core_info, 1);
- #ifdef CONFIG_SCHED_BOOK
        alloc_masks(info, &book_info, 2);
- #endif
  }
 -static ssize_t dispatching_show(struct sysdev_class *class,
 -                              struct sysdev_class_attribute *attr,
+ 
+ static int cpu_management;
+ 
 -static ssize_t dispatching_store(struct sysdev_class *dev,
 -                               struct sysdev_class_attribute *attr,
++static ssize_t dispatching_show(struct device *dev,
++                              struct device_attribute *attr,
+                               char *buf)
+ {
+       ssize_t count;
+ 
+       mutex_lock(&smp_cpu_state_mutex);
+       count = sprintf(buf, "%d\n", cpu_management);
+       mutex_unlock(&smp_cpu_state_mutex);
+       return count;
+ }
+ 
 -static SYSDEV_CLASS_ATTR(dispatching, 0644, dispatching_show,
++static ssize_t dispatching_store(struct device *dev,
++                               struct device_attribute *attr,
+                                const char *buf,
+                                size_t count)
+ {
+       int val, rc;
+       char delim;
+ 
+       if (sscanf(buf, "%d %c", &val, &delim) != 1)
+               return -EINVAL;
+       if (val != 0 && val != 1)
+               return -EINVAL;
+       rc = 0;
+       get_online_cpus();
+       mutex_lock(&smp_cpu_state_mutex);
+       if (cpu_management == val)
+               goto out;
+       rc = topology_set_cpu_management(val);
+       if (rc)
+               goto out;
+       cpu_management = val;
+       topology_expect_change();
+ out:
+       mutex_unlock(&smp_cpu_state_mutex);
+       put_online_cpus();
+       return rc ? rc : count;
+ }
 -static ssize_t cpu_polarization_show(struct sys_device *dev,
 -                                   struct sysdev_attribute *attr, char *buf)
++static DEVICE_ATTR(dispatching, 0644, dispatching_show,
+                        dispatching_store);
+ 
 -static SYSDEV_ATTR(polarization, 0444, cpu_polarization_show, NULL);
++static ssize_t cpu_polarization_show(struct device *dev,
++                                   struct device_attribute *attr, char *buf)
+ {
+       int cpu = dev->id;
+       ssize_t count;
+ 
+       mutex_lock(&smp_cpu_state_mutex);
+       switch (cpu_read_polarization(cpu)) {
+       case POLARIZATION_HRZ:
+               count = sprintf(buf, "horizontal\n");
+               break;
+       case POLARIZATION_VL:
+               count = sprintf(buf, "vertical:low\n");
+               break;
+       case POLARIZATION_VM:
+               count = sprintf(buf, "vertical:medium\n");
+               break;
+       case POLARIZATION_VH:
+               count = sprintf(buf, "vertical:high\n");
+               break;
+       default:
+               count = sprintf(buf, "unknown\n");
+               break;
+       }
+       mutex_unlock(&smp_cpu_state_mutex);
+       return count;
+ }
 -      &attr_polarization.attr,
++static DEVICE_ATTR(polarization, 0444, cpu_polarization_show, NULL);
+ 
+ static struct attribute *topology_cpu_attrs[] = {
 -      return sysfs_create_group(&cpu->sysdev.kobj, &topology_cpu_attr_group);
++      &dev_attr_polarization.attr,
+       NULL,
+ };
+ 
+ static struct attribute_group topology_cpu_attr_group = {
+       .attrs = topology_cpu_attrs,
+ };
+ 
+ int topology_cpu_init(struct cpu *cpu)
+ {
 -      return sysdev_class_create_file(&cpu_sysdev_class, &attr_dispatching);
++      return sysfs_create_group(&cpu->dev.kobj, &topology_cpu_attr_group);
+ }
+ 
+ static int __init topology_init(void)
+ {
+       if (!MACHINE_HAS_TOPOLOGY) {
+               topology_update_polarization_simple();
+               goto out;
+       }
+       set_topology_timer();
+ out:
+       update_cpu_core_map();
++      return device_create_file(cpu_subsys.dev_root, &dev_attr_dispatching);
+ }
+ device_initcall(topology_init);