Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drivers base/topology: Convert to hotplug state machine

Install the callbacks via the state machine and let the core invoke
the callbacks on the already online CPUs. No functional change

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20161103145021.28528-14-bigeasy@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

authored by

Sebastian Andrzej Siewior and committed by
Thomas Gleixner
38643a0e 7cc277b4

+6 -37
+5 -37
drivers/base/topology.c
··· 118 118 return sysfs_create_group(&dev->kobj, &topology_attr_group); 119 119 } 120 120 121 - static void topology_remove_dev(unsigned int cpu) 121 + static int topology_remove_dev(unsigned int cpu) 122 122 { 123 123 struct device *dev = get_cpu_device(cpu); 124 124 125 125 sysfs_remove_group(&dev->kobj, &topology_attr_group); 126 - } 127 - 128 - static int topology_cpu_callback(struct notifier_block *nfb, 129 - unsigned long action, void *hcpu) 130 - { 131 - unsigned int cpu = (unsigned long)hcpu; 132 - int rc = 0; 133 - 134 - switch (action) { 135 - case CPU_UP_PREPARE: 136 - case CPU_UP_PREPARE_FROZEN: 137 - rc = topology_add_dev(cpu); 138 - break; 139 - case CPU_UP_CANCELED: 140 - case CPU_UP_CANCELED_FROZEN: 141 - case CPU_DEAD: 142 - case CPU_DEAD_FROZEN: 143 - topology_remove_dev(cpu); 144 - break; 145 - } 146 - return notifier_from_errno(rc); 126 + return 0; 147 127 } 148 128 149 129 static int topology_sysfs_init(void) 150 130 { 151 - int cpu; 152 - int rc = 0; 153 - 154 - cpu_notifier_register_begin(); 155 - 156 - for_each_online_cpu(cpu) { 157 - rc = topology_add_dev(cpu); 158 - if (rc) 159 - goto out; 160 - } 161 - __hotcpu_notifier(topology_cpu_callback, 0); 162 - 163 - out: 164 - cpu_notifier_register_done(); 165 - return rc; 131 + return cpuhp_setup_state(CPUHP_TOPOLOGY_PREPARE, 132 + "base/topology:prepare", topology_add_dev, 133 + topology_remove_dev); 166 134 } 167 135 168 136 device_initcall(topology_sysfs_init);
+1
include/linux/cpuhotplug.h
··· 57 57 CPUHP_SH_SH3X_PREPARE, 58 58 CPUHP_BLK_MQ_PREPARE, 59 59 CPUHP_NET_FLOW_PREPARE, 60 + CPUHP_TOPOLOGY_PREPARE, 60 61 CPUHP_TIMERS_DEAD, 61 62 CPUHP_NOTF_ERR_INJ_PREPARE, 62 63 CPUHP_MIPS_SOC_PREPARE,