diff options
author | Ingo Molnar <mingo@kernel.org> | 2017-01-18 10:37:54 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2017-01-18 10:37:54 +0100 |
commit | 691b238ec16d8050969285cd82225e62c3fcdb33 (patch) | |
tree | 1440bbd610a7660fc307828dc4d78ea3e5a733ca /kernel | |
parent | 5eb82bc8a2016cb25d1f7a4d8ffc3f1244336187 (diff) | |
parent | 4205e4786d0b9fc3b4fec7b1910cf645a0468307 (diff) |
Merge branch 'smp/urgent'
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/cpu.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/kernel/cpu.c b/kernel/cpu.c index f75c4d031eeb..c47506357519 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -1302,10 +1302,24 @@ static int cpuhp_cb_check(enum cpuhp_state state) */ static int cpuhp_reserve_state(enum cpuhp_state state) { - enum cpuhp_state i; + enum cpuhp_state i, end; + struct cpuhp_step *step; - for (i = CPUHP_AP_ONLINE_DYN; i <= CPUHP_AP_ONLINE_DYN_END; i++) { - if (!cpuhp_ap_states[i].name) + switch (state) { + case CPUHP_AP_ONLINE_DYN: + step = cpuhp_ap_states + CPUHP_AP_ONLINE_DYN; + end = CPUHP_AP_ONLINE_DYN_END; + break; + case CPUHP_BP_PREPARE_DYN: + step = cpuhp_bp_states + CPUHP_BP_PREPARE_DYN; + end = CPUHP_BP_PREPARE_DYN_END; + break; + default: + return -EINVAL; + } + + for (i = state; i <= end; i++, step++) { + if (!step->name) return i; } WARN(1, "No more dynamic states available for CPU hotplug\n"); @@ -1323,7 +1337,7 @@ static int cpuhp_store_callbacks(enum cpuhp_state state, const char *name, mutex_lock(&cpuhp_state_mutex); - if (state == CPUHP_AP_ONLINE_DYN) { + if (state == CPUHP_AP_ONLINE_DYN || state == CPUHP_BP_PREPARE_DYN) { ret = cpuhp_reserve_state(state); if (ret < 0) goto out; |