|
@@ -2043,33 +2043,38 @@ void kcompactd_stop(int nid)
|
|
* away, we get changed to run anywhere: as the first one comes back,
|
|
* away, we get changed to run anywhere: as the first one comes back,
|
|
* restore their cpu bindings.
|
|
* restore their cpu bindings.
|
|
*/
|
|
*/
|
|
-static int cpu_callback(struct notifier_block *nfb, unsigned long action,
|
|
|
|
- void *hcpu)
|
|
|
|
|
|
+static int kcompactd_cpu_online(unsigned int cpu)
|
|
{
|
|
{
|
|
int nid;
|
|
int nid;
|
|
|
|
|
|
- if (action == CPU_ONLINE || action == CPU_ONLINE_FROZEN) {
|
|
|
|
- for_each_node_state(nid, N_MEMORY) {
|
|
|
|
- pg_data_t *pgdat = NODE_DATA(nid);
|
|
|
|
- const struct cpumask *mask;
|
|
|
|
|
|
+ for_each_node_state(nid, N_MEMORY) {
|
|
|
|
+ pg_data_t *pgdat = NODE_DATA(nid);
|
|
|
|
+ const struct cpumask *mask;
|
|
|
|
|
|
- mask = cpumask_of_node(pgdat->node_id);
|
|
|
|
|
|
+ mask = cpumask_of_node(pgdat->node_id);
|
|
|
|
|
|
- if (cpumask_any_and(cpu_online_mask, mask) < nr_cpu_ids)
|
|
|
|
- /* One of our CPUs online: restore mask */
|
|
|
|
- set_cpus_allowed_ptr(pgdat->kcompactd, mask);
|
|
|
|
- }
|
|
|
|
|
|
+ if (cpumask_any_and(cpu_online_mask, mask) < nr_cpu_ids)
|
|
|
|
+ /* One of our CPUs online: restore mask */
|
|
|
|
+ set_cpus_allowed_ptr(pgdat->kcompactd, mask);
|
|
}
|
|
}
|
|
- return NOTIFY_OK;
|
|
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
static int __init kcompactd_init(void)
|
|
static int __init kcompactd_init(void)
|
|
{
|
|
{
|
|
int nid;
|
|
int nid;
|
|
|
|
+ int ret;
|
|
|
|
+
|
|
|
|
+ ret = cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN,
|
|
|
|
+ "mm/compaction:online",
|
|
|
|
+ kcompactd_cpu_online, NULL);
|
|
|
|
+ if (ret < 0) {
|
|
|
|
+ pr_err("kcompactd: failed to register hotplug callbacks.\n");
|
|
|
|
+ return ret;
|
|
|
|
+ }
|
|
|
|
|
|
for_each_node_state(nid, N_MEMORY)
|
|
for_each_node_state(nid, N_MEMORY)
|
|
kcompactd_run(nid);
|
|
kcompactd_run(nid);
|
|
- hotcpu_notifier(cpu_callback, 0);
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
subsys_initcall(kcompactd_init)
|
|
subsys_initcall(kcompactd_init)
|