projects
/
GitHub
/
mt8127
/
android_kernel_alcatel_ttab.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cpu hotplug, sched: Introduce cpu_active_map and redo sched domain managment (take 2)
[GitHub/mt8127/android_kernel_alcatel_ttab.git]
/
kernel
/
cpu.c
diff --git
a/kernel/cpu.c
b/kernel/cpu.c
index cfb1d43ab801b69f24c47c0cdb17332c25f6f99e..a1ac7ea245d7ba96727ae3647552564cefab120d 100644
(file)
--- a/
kernel/cpu.c
+++ b/
kernel/cpu.c
@@
-64,6
+64,8
@@
void __init cpu_hotplug_init(void)
cpu_hotplug.refcount = 0;
}
cpu_hotplug.refcount = 0;
}
+cpumask_t cpu_active_map;
+
#ifdef CONFIG_HOTPLUG_CPU
void get_online_cpus(void)
#ifdef CONFIG_HOTPLUG_CPU
void get_online_cpus(void)
@@
-291,11
+293,20
@@
int __ref cpu_down(unsigned int cpu)
int err = 0;
cpu_maps_update_begin();
int err = 0;
cpu_maps_update_begin();
- if (cpu_hotplug_disabled)
+
+ if (cpu_hotplug_disabled) {
err = -EBUSY;
err = -EBUSY;
- else
- err = _cpu_down(cpu, 0);
+ goto out;
+ }
+
+ cpu_clear(cpu, cpu_active_map);
+
+ err = _cpu_down(cpu, 0);
+
+ if (cpu_online(cpu))
+ cpu_set(cpu, cpu_active_map);
+out:
cpu_maps_update_done();
return err;
}
cpu_maps_update_done();
return err;
}
@@
-355,11
+366,18
@@
int __cpuinit cpu_up(unsigned int cpu)
}
cpu_maps_update_begin();
}
cpu_maps_update_begin();
- if (cpu_hotplug_disabled)
+
+ if (cpu_hotplug_disabled) {
err = -EBUSY;
err = -EBUSY;
- else
- err = _cpu_up(cpu, 0);
+ goto out;
+ }
+ err = _cpu_up(cpu, 0);
+
+ if (cpu_online(cpu))
+ cpu_set(cpu, cpu_active_map);
+
+out:
cpu_maps_update_done();
return err;
}
cpu_maps_update_done();
return err;
}