Lines Matching defs:svm

22 #include <asm/svm.h>
314 void recalc_intercepts(struct vcpu_svm *svm);
403 static inline void set_exception_intercept(struct vcpu_svm *svm, u32 bit)
405 struct vmcb *vmcb = svm->vmcb01.ptr;
410 recalc_intercepts(svm);
413 static inline void clr_exception_intercept(struct vcpu_svm *svm, u32 bit)
415 struct vmcb *vmcb = svm->vmcb01.ptr;
420 recalc_intercepts(svm);
423 static inline void svm_set_intercept(struct vcpu_svm *svm, int bit)
425 struct vmcb *vmcb = svm->vmcb01.ptr;
429 recalc_intercepts(svm);
432 static inline void svm_clr_intercept(struct vcpu_svm *svm, int bit)
434 struct vmcb *vmcb = svm->vmcb01.ptr;
438 recalc_intercepts(svm);
441 static inline bool svm_is_intercept(struct vcpu_svm *svm, int bit)
443 return vmcb_is_intercept(&svm->vmcb->control, bit);
446 static inline bool nested_vgif_enabled(struct vcpu_svm *svm)
448 return guest_can_use(&svm->vcpu, X86_FEATURE_VGIF) &&
449 (svm->nested.ctl.int_ctl & V_GIF_ENABLE_MASK);
452 static inline struct vmcb *get_vgif_vmcb(struct vcpu_svm *svm)
457 if (is_guest_mode(&svm->vcpu) && !nested_vgif_enabled(svm))
458 return svm->nested.vmcb02.ptr;
460 return svm->vmcb01.ptr;
463 static inline void enable_gif(struct vcpu_svm *svm)
465 struct vmcb *vmcb = get_vgif_vmcb(svm);
470 svm->guest_gif = true;
473 static inline void disable_gif(struct vcpu_svm *svm)
475 struct vmcb *vmcb = get_vgif_vmcb(svm);
480 svm->guest_gif = false;
483 static inline bool gif_set(struct vcpu_svm *svm)
485 struct vmcb *vmcb = get_vgif_vmcb(svm);
490 return svm->guest_gif;
493 static inline bool nested_npt_enabled(struct vcpu_svm *svm)
495 return svm->nested.ctl.nested_ctl & SVM_NESTED_CTL_NP_ENABLE;
498 static inline bool nested_vnmi_enabled(struct vcpu_svm *svm)
500 return guest_can_use(&svm->vcpu, X86_FEATURE_VNMI) &&
501 (svm->nested.ctl.int_ctl & V_NMI_ENABLE_MASK);
513 static inline struct vmcb *get_vnmi_vmcb_l1(struct vcpu_svm *svm)
518 if (is_guest_mode(&svm->vcpu))
521 return svm->vmcb01.ptr;
524 static inline bool is_vnmi_enabled(struct vcpu_svm *svm)
526 struct vmcb *vmcb = get_vnmi_vmcb_l1(svm);
534 /* svm.c */
551 void disable_nmi_singlestep(struct vcpu_svm *svm);
555 void svm_set_gif(struct vcpu_svm *svm, bool value);
559 void svm_set_x2apic_msr_interception(struct vcpu_svm *svm, bool disable);
571 struct vcpu_svm *svm = to_svm(vcpu);
573 return is_guest_mode(vcpu) && (svm->nested.ctl.int_ctl & V_INTR_MASKING_MASK);
576 static inline bool nested_exit_on_smi(struct vcpu_svm *svm)
578 return vmcb12_is_intercept(&svm->nested.ctl, INTERCEPT_SMI);
581 static inline bool nested_exit_on_intr(struct vcpu_svm *svm)
583 return vmcb12_is_intercept(&svm->nested.ctl, INTERCEPT_INTR);
586 static inline bool nested_exit_on_nmi(struct vcpu_svm *svm)
588 return vmcb12_is_intercept(&svm->nested.ctl, INTERCEPT_NMI);
594 void svm_free_nested(struct vcpu_svm *svm);
595 int svm_allocate_nested(struct vcpu_svm *svm);
600 int nested_svm_vmexit(struct vcpu_svm *svm);
602 static inline int nested_svm_simple_vmexit(struct vcpu_svm *svm, u32 exit_code)
604 svm->vmcb->control.exit_code = exit_code;
605 svm->vmcb->control.exit_info_1 = 0;
606 svm->vmcb->control.exit_info_2 = 0;
607 return nested_svm_vmexit(svm);
610 int nested_svm_exit_handled(struct vcpu_svm *svm);
612 int nested_svm_check_exception(struct vcpu_svm *svm, unsigned nr,
614 int nested_svm_exit_special(struct vcpu_svm *svm);
617 void nested_copy_vmcb_control_to_cache(struct vcpu_svm *svm,
619 void nested_copy_vmcb_save_to_cache(struct vcpu_svm *svm,
621 void nested_sync_control_from_vmcb02(struct vcpu_svm *svm);
622 void nested_vmcb02_compute_g_pat(struct vcpu_svm *svm);
623 void svm_switch_vmcb(struct vcpu_svm *svm, struct kvm_vmcb_info *target_vmcb);
648 void avic_init_vmcb(struct vcpu_svm *svm, struct vmcb *vmcb);
651 int avic_init_vcpu(struct vcpu_svm *svm);
683 void pre_sev_run(struct vcpu_svm *svm, int cpu);
688 void sev_init_vmcb(struct vcpu_svm *svm);
689 void sev_vcpu_after_set_cpuid(struct vcpu_svm *svm);
692 int sev_es_string_io(struct vcpu_svm *svm, int size, unsigned int port, int in);
693 void sev_es_vcpu_reset(struct vcpu_svm *svm);
696 void sev_es_unmap_ghcb(struct vcpu_svm *svm);
701 void __svm_sev_es_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted,
703 void __svm_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted);
706 static __always_inline bool kvm_ghcb_##field##_is_valid(const struct vcpu_svm *svm) \
709 (unsigned long *)&svm->sev_es.valid_bitmap); \
712 static __always_inline u64 kvm_ghcb_get_##field##_if_valid(struct vcpu_svm *svm, struct ghcb *ghcb) \
714 return kvm_ghcb_##field##_is_valid(svm) ? ghcb->save.field : 0; \