|
@@ -86,10 +86,13 @@ static void kvmppc_fast_vcpu_kick_hv(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
/* CPU points to the first thread of the core */
|
|
/* CPU points to the first thread of the core */
|
|
if (cpu != me && cpu >= 0 && cpu < nr_cpu_ids) {
|
|
if (cpu != me && cpu >= 0 && cpu < nr_cpu_ids) {
|
|
|
|
+#ifdef CONFIG_KVM_XICS
|
|
int real_cpu = cpu + vcpu->arch.ptid;
|
|
int real_cpu = cpu + vcpu->arch.ptid;
|
|
if (paca[real_cpu].kvm_hstate.xics_phys)
|
|
if (paca[real_cpu].kvm_hstate.xics_phys)
|
|
xics_wake_cpu(real_cpu);
|
|
xics_wake_cpu(real_cpu);
|
|
- else if (cpu_online(cpu))
|
|
|
|
|
|
+ else
|
|
|
|
+#endif
|
|
|
|
+ if (cpu_online(cpu))
|
|
smp_send_reschedule(cpu);
|
|
smp_send_reschedule(cpu);
|
|
}
|
|
}
|
|
put_cpu();
|
|
put_cpu();
|
|
@@ -1142,7 +1145,9 @@ static void kvmppc_start_thread(struct kvm_vcpu *vcpu)
|
|
smp_wmb();
|
|
smp_wmb();
|
|
#if defined(CONFIG_PPC_ICP_NATIVE) && defined(CONFIG_SMP)
|
|
#if defined(CONFIG_PPC_ICP_NATIVE) && defined(CONFIG_SMP)
|
|
if (vcpu->arch.ptid) {
|
|
if (vcpu->arch.ptid) {
|
|
|
|
+#ifdef CONFIG_KVM_XICS
|
|
xics_wake_cpu(cpu);
|
|
xics_wake_cpu(cpu);
|
|
|
|
+#endif
|
|
++vc->n_woken;
|
|
++vc->n_woken;
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|