|
@@ -2283,9 +2283,14 @@ static void post_guest_process(struct kvmppc_vcore *vc, bool is_master)
|
|
}
|
|
}
|
|
list_del_init(&vc->preempt_list);
|
|
list_del_init(&vc->preempt_list);
|
|
if (!is_master) {
|
|
if (!is_master) {
|
|
- vc->vcore_state = vc->runner ? VCORE_PREEMPT : VCORE_INACTIVE;
|
|
|
|
- if (still_running > 0)
|
|
|
|
|
|
+ if (still_running > 0) {
|
|
kvmppc_vcore_preempt(vc);
|
|
kvmppc_vcore_preempt(vc);
|
|
|
|
+ } else if (vc->runner) {
|
|
|
|
+ vc->vcore_state = VCORE_PREEMPT;
|
|
|
|
+ kvmppc_core_start_stolen(vc);
|
|
|
|
+ } else {
|
|
|
|
+ vc->vcore_state = VCORE_INACTIVE;
|
|
|
|
+ }
|
|
if (vc->n_runnable > 0 && vc->runner == NULL) {
|
|
if (vc->n_runnable > 0 && vc->runner == NULL) {
|
|
/* make sure there's a candidate runner awake */
|
|
/* make sure there's a candidate runner awake */
|
|
vcpu = list_first_entry(&vc->runnable_threads,
|
|
vcpu = list_first_entry(&vc->runnable_threads,
|