|
@@ -415,6 +415,15 @@ void kvm_disable_steal_time(void)
|
|
|
wrmsr(MSR_KVM_STEAL_TIME, 0, 0);
|
|
|
}
|
|
|
|
|
|
+static bool kvm_vcpu_is_preempted(int cpu)
|
|
|
+{
|
|
|
+ struct kvm_steal_time *src;
|
|
|
+
|
|
|
+ src = &per_cpu(steal_time, cpu);
|
|
|
+
|
|
|
+ return !!src->preempted;
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_SMP
|
|
|
static void __init kvm_smp_prepare_boot_cpu(void)
|
|
|
{
|
|
@@ -471,6 +480,9 @@ void __init kvm_guest_init(void)
|
|
|
if (kvm_para_has_feature(KVM_FEATURE_STEAL_TIME)) {
|
|
|
has_steal_clock = 1;
|
|
|
pv_time_ops.steal_clock = kvm_steal_clock;
|
|
|
+#ifdef CONFIG_PARAVIRT_SPINLOCKS
|
|
|
+ pv_lock_ops.vcpu_is_preempted = kvm_vcpu_is_preempted;
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
if (kvm_para_has_feature(KVM_FEATURE_PV_EOI))
|