|
@@ -5545,21 +5545,27 @@ static void set_cpu_rq_start_time(void)
|
|
|
static int sched_cpu_active(struct notifier_block *nfb,
|
|
|
unsigned long action, void *hcpu)
|
|
|
{
|
|
|
+ int cpu = (long)hcpu;
|
|
|
+
|
|
|
switch (action & ~CPU_TASKS_FROZEN) {
|
|
|
case CPU_STARTING:
|
|
|
set_cpu_rq_start_time();
|
|
|
return NOTIFY_OK;
|
|
|
+
|
|
|
case CPU_ONLINE:
|
|
|
/*
|
|
|
* At this point a starting CPU has marked itself as online via
|
|
|
* set_cpu_online(). But it might not yet have marked itself
|
|
|
* as active, which is essential from here on.
|
|
|
- *
|
|
|
- * Thus, fall-through and help the starting CPU along.
|
|
|
*/
|
|
|
+ set_cpu_active(cpu, true);
|
|
|
+ stop_machine_unpark(cpu);
|
|
|
+ return NOTIFY_OK;
|
|
|
+
|
|
|
case CPU_DOWN_FAILED:
|
|
|
- set_cpu_active((long)hcpu, true);
|
|
|
+ set_cpu_active(cpu, true);
|
|
|
return NOTIFY_OK;
|
|
|
+
|
|
|
default:
|
|
|
return NOTIFY_DONE;
|
|
|
}
|