|
@@ -183,6 +183,18 @@ struct kvm_vcpu {
|
|
|
} async_pf;
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT
|
|
|
+ /*
|
|
|
+ * Cpu relax intercept or pause loop exit optimization
|
|
|
+ * in_spin_loop: set when a vcpu does a pause loop exit
|
|
|
+ * or cpu relax intercepted.
|
|
|
+ * dy_eligible: indicates whether vcpu is eligible for directed yield.
|
|
|
+ */
|
|
|
+ struct {
|
|
|
+ bool in_spin_loop;
|
|
|
+ bool dy_eligible;
|
|
|
+ } spin_loop;
|
|
|
+#endif
|
|
|
struct kvm_vcpu_arch arch;
|
|
|
};
|
|
|
|
|
@@ -898,5 +910,27 @@ static inline bool kvm_check_request(int req, struct kvm_vcpu *vcpu)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT
|
|
|
+
|
|
|
+static inline void kvm_vcpu_set_in_spin_loop(struct kvm_vcpu *vcpu, bool val)
|
|
|
+{
|
|
|
+ vcpu->spin_loop.in_spin_loop = val;
|
|
|
+}
|
|
|
+static inline void kvm_vcpu_set_dy_eligible(struct kvm_vcpu *vcpu, bool val)
|
|
|
+{
|
|
|
+ vcpu->spin_loop.dy_eligible = val;
|
|
|
+}
|
|
|
+
|
|
|
+#else /* !CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT */
|
|
|
+
|
|
|
+static inline void kvm_vcpu_set_in_spin_loop(struct kvm_vcpu *vcpu, bool val)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+static inline void kvm_vcpu_set_dy_eligible(struct kvm_vcpu *vcpu, bool val)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+#endif /* CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT */
|
|
|
#endif
|
|
|
|