From: Linus Torvalds Date: Mon, 9 Jan 2012 16:11:13 +0000 (-0800) Subject: Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux X-Git-Tag: v3.3-rc1~157 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=72f318897e50c29b91efd1ed24515a93c138a2ba;p=profile%2Fivi%2Fkernel-x86-ivi.git Merge branch 'for-linus' of git://git./linux/kernel/git/s390/linux * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (31 commits) [S390] disassembler: mark exception causing instructions [S390] Enable exception traces by default [S390] return address of compat signals [S390] sysctl: get rid of dead declaration [S390] dasd: fix fixpoint divide exception in define_extent [S390] dasd: add sanity check to detect path connection error [S390] qdio: fix kernel panic for zfcp 31-bit [S390] Add s390x description to Documentation/kdump/kdump.txt [S390] Add VMCOREINFO_SYMBOL(high_memory) to vmcoreinfo [S390] dasd: fix expiration handling for recovery requests [S390] outstanding interrupts vs. smp_send_stop [S390] ipc: call generic sys_ipc demultiplexer [S390] zcrypt: Fix error return codes. [S390] zcrypt: Rework length parameter checking. [S390] cleanup trap handling [S390] Remove Kerntypes leftovers [S390] topology: increase poll frequency if change is anticipated [S390] entry[64].S improvements [S390] make arch/s390 subdirectories depend on config option [S390] kvm: move cmf host id constant out of lowcore ... Fix up conflicts in arch/s390/kernel/{smp.c,topology.c} due to the sysdev removal clashing with "topology: get rid of ifdefs" which moved some of that code around. --- 72f318897e50c29b91efd1ed24515a93c138a2ba diff --cc arch/s390/kernel/smp.c index 66cca03,b1cd329..2398ce6 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c @@@ -889,52 -923,21 +923,21 @@@ out 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, }; @@@ -1108,58 -1120,16 +1120,16 @@@ static ssize_t __ref rescan_store(struc 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 diff --cc arch/s390/kernel/topology.c index 6e0e29b,e06fb85..7370a41 --- a/arch/s390/kernel/topology.c +++ b/arch/s390/kernel/topology.c @@@ -357,10 -358,108 +358,108 @@@ void __init s390_init_cpu_topology(void 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 int cpu_management; + -static ssize_t dispatching_show(struct sysdev_class *class, - 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 ssize_t dispatching_store(struct sysdev_class *dev, - struct sysdev_class_attribute *attr, ++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 SYSDEV_CLASS_ATTR(dispatching, 0644, dispatching_show, ++static DEVICE_ATTR(dispatching, 0644, dispatching_show, + dispatching_store); + -static ssize_t cpu_polarization_show(struct sys_device *dev, - struct sysdev_attribute *attr, char *buf) ++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; + } -static SYSDEV_ATTR(polarization, 0444, cpu_polarization_show, NULL); ++static DEVICE_ATTR(polarization, 0444, cpu_polarization_show, NULL); + + static struct attribute *topology_cpu_attrs[] = { - &attr_polarization.attr, ++ &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 sysfs_create_group(&cpu->sysdev.kobj, &topology_cpu_attr_group); ++ 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 sysdev_class_create_file(&cpu_sysdev_class, &attr_dispatching); ++ return device_create_file(cpu_subsys.dev_root, &dev_attr_dispatching); + } + device_initcall(topology_init);