mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Merge branch 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull smp hotplug updates from Thomas Gleixner: "This is the final round of converting the notifier mess to the state machine. The removal of the notifiers and the related infrastructure will happen around rc1, as there are conversions outstanding in other trees. The whole exercise removed about 2000 lines of code in total and in course of the conversion several dozen bugs got fixed. The new mechanism allows to test almost every hotplug step standalone, so usage sites can exercise all transitions extensively. There is more room for improvement, like integrating all the pointlessly different architecture mechanisms of synchronizing, setting cpus online etc into the core code" * 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (60 commits) tracing/rb: Init the CPU mask on allocation soc/fsl/qbman: Convert to hotplug state machine soc/fsl/qbman: Convert to hotplug state machine zram: Convert to hotplug state machine KVM/PPC/Book3S HV: Convert to hotplug state machine arm64/cpuinfo: Convert to hotplug state machine arm64/cpuinfo: Make hotplug notifier symmetric mm/compaction: Convert to hotplug state machine iommu/vt-d: Convert to hotplug state machine mm/zswap: Convert pool to hotplug state machine mm/zswap: Convert dst-mem to hotplug state machine mm/zsmalloc: Convert to hotplug state machine mm/vmstat: Convert to hotplug state machine mm/vmstat: Avoid on each online CPU loops mm/vmstat: Drop get_online_cpus() from init_cpu_node_state/vmstat_cpu_dead() tracing/rb: Convert to hotplug state machine oprofile/nmi timer: Convert to hotplug state machine net/iucv: Use explicit clean up labels in iucv_init() x86/pci/amd-bus: Convert to hotplug state machine x86/oprofile/nmi: Convert to hotplug state machine ...
This commit is contained in:
commit
e71c3978d6
52 changed files with 894 additions and 1657 deletions
|
|
@ -498,57 +498,30 @@ err:
|
|||
return rc;
|
||||
}
|
||||
|
||||
static void cache_remove_dev(unsigned int cpu)
|
||||
static int cacheinfo_cpu_online(unsigned int cpu)
|
||||
{
|
||||
if (!cpumask_test_cpu(cpu, &cache_dev_map))
|
||||
return;
|
||||
cpumask_clear_cpu(cpu, &cache_dev_map);
|
||||
int rc = detect_cache_attributes(cpu);
|
||||
|
||||
cpu_cache_sysfs_exit(cpu);
|
||||
if (rc)
|
||||
return rc;
|
||||
rc = cache_add_dev(cpu);
|
||||
if (rc)
|
||||
free_cache_attributes(cpu);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int cacheinfo_cpu_callback(struct notifier_block *nfb,
|
||||
unsigned long action, void *hcpu)
|
||||
static int cacheinfo_cpu_pre_down(unsigned int cpu)
|
||||
{
|
||||
unsigned int cpu = (unsigned long)hcpu;
|
||||
int rc = 0;
|
||||
if (cpumask_test_and_clear_cpu(cpu, &cache_dev_map))
|
||||
cpu_cache_sysfs_exit(cpu);
|
||||
|
||||
switch (action & ~CPU_TASKS_FROZEN) {
|
||||
case CPU_ONLINE:
|
||||
rc = detect_cache_attributes(cpu);
|
||||
if (!rc)
|
||||
rc = cache_add_dev(cpu);
|
||||
break;
|
||||
case CPU_DEAD:
|
||||
cache_remove_dev(cpu);
|
||||
free_cache_attributes(cpu);
|
||||
break;
|
||||
}
|
||||
return notifier_from_errno(rc);
|
||||
free_cache_attributes(cpu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init cacheinfo_sysfs_init(void)
|
||||
{
|
||||
int cpu, rc = 0;
|
||||
|
||||
cpu_notifier_register_begin();
|
||||
|
||||
for_each_online_cpu(cpu) {
|
||||
rc = detect_cache_attributes(cpu);
|
||||
if (rc)
|
||||
goto out;
|
||||
rc = cache_add_dev(cpu);
|
||||
if (rc) {
|
||||
free_cache_attributes(cpu);
|
||||
pr_err("error populating cacheinfo..cpu%d\n", cpu);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
__hotcpu_notifier(cacheinfo_cpu_callback, 0);
|
||||
|
||||
out:
|
||||
cpu_notifier_register_done();
|
||||
return rc;
|
||||
return cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "base/cacheinfo:online",
|
||||
cacheinfo_cpu_online, cacheinfo_cpu_pre_down);
|
||||
}
|
||||
|
||||
device_initcall(cacheinfo_sysfs_init);
|
||||
|
|
|
|||
|
|
@ -118,51 +118,19 @@ static int topology_add_dev(unsigned int cpu)
|
|||
return sysfs_create_group(&dev->kobj, &topology_attr_group);
|
||||
}
|
||||
|
||||
static void topology_remove_dev(unsigned int cpu)
|
||||
static int topology_remove_dev(unsigned int cpu)
|
||||
{
|
||||
struct device *dev = get_cpu_device(cpu);
|
||||
|
||||
sysfs_remove_group(&dev->kobj, &topology_attr_group);
|
||||
}
|
||||
|
||||
static int topology_cpu_callback(struct notifier_block *nfb,
|
||||
unsigned long action, void *hcpu)
|
||||
{
|
||||
unsigned int cpu = (unsigned long)hcpu;
|
||||
int rc = 0;
|
||||
|
||||
switch (action) {
|
||||
case CPU_UP_PREPARE:
|
||||
case CPU_UP_PREPARE_FROZEN:
|
||||
rc = topology_add_dev(cpu);
|
||||
break;
|
||||
case CPU_UP_CANCELED:
|
||||
case CPU_UP_CANCELED_FROZEN:
|
||||
case CPU_DEAD:
|
||||
case CPU_DEAD_FROZEN:
|
||||
topology_remove_dev(cpu);
|
||||
break;
|
||||
}
|
||||
return notifier_from_errno(rc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int topology_sysfs_init(void)
|
||||
{
|
||||
int cpu;
|
||||
int rc = 0;
|
||||
|
||||
cpu_notifier_register_begin();
|
||||
|
||||
for_each_online_cpu(cpu) {
|
||||
rc = topology_add_dev(cpu);
|
||||
if (rc)
|
||||
goto out;
|
||||
}
|
||||
__hotcpu_notifier(topology_cpu_callback, 0);
|
||||
|
||||
out:
|
||||
cpu_notifier_register_done();
|
||||
return rc;
|
||||
return cpuhp_setup_state(CPUHP_TOPOLOGY_PREPARE,
|
||||
"base/topology:prepare", topology_add_dev,
|
||||
topology_remove_dev);
|
||||
}
|
||||
|
||||
device_initcall(topology_sysfs_init);
|
||||
|
|
|
|||
Loading…
Reference in a new issue