svm.h (3e5a516f3bf1a33f2bf219f570e9b5c031616f6a) svm.h (0d7bf5e5b00a131cc02ecadbbf42563c0721aaeb)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Kernel-based Virtual Machine driver for Linux
4 *
5 * AMD SVM support
6 *
7 * Copyright (C) 2006 Qumranet, Inc.
8 * Copyright 2010 Red Hat, Inc. and/or its affiliates.

--- 650 unchanged lines hidden (view full) ---

659void avic_vcpu_unblocking(struct kvm_vcpu *vcpu);
660void avic_ring_doorbell(struct kvm_vcpu *vcpu);
661unsigned long avic_vcpu_get_apicv_inhibit_reasons(struct kvm_vcpu *vcpu);
662void avic_refresh_virtual_apic_mode(struct kvm_vcpu *vcpu);
663
664
665/* sev.c */
666
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Kernel-based Virtual Machine driver for Linux
4 *
5 * AMD SVM support
6 *
7 * Copyright (C) 2006 Qumranet, Inc.
8 * Copyright 2010 Red Hat, Inc. and/or its affiliates.

--- 650 unchanged lines hidden (view full) ---

659void avic_vcpu_unblocking(struct kvm_vcpu *vcpu);
660void avic_ring_doorbell(struct kvm_vcpu *vcpu);
661unsigned long avic_vcpu_get_apicv_inhibit_reasons(struct kvm_vcpu *vcpu);
662void avic_refresh_virtual_apic_mode(struct kvm_vcpu *vcpu);
663
664
665/* sev.c */
666
667#define GHCB_VERSION_MAX 1ULL
668#define GHCB_VERSION_MIN 1ULL
667void pre_sev_run(struct vcpu_svm *svm, int cpu);
668void sev_init_vmcb(struct vcpu_svm *svm);
669void sev_vcpu_after_set_cpuid(struct vcpu_svm *svm);
670int sev_es_string_io(struct vcpu_svm *svm, int size, unsigned int port, int in);
671void sev_es_vcpu_reset(struct vcpu_svm *svm);
672void sev_vcpu_deliver_sipi_vector(struct kvm_vcpu *vcpu, u8 vector);
673void sev_es_prepare_switch_to_guest(struct sev_es_save_area *hostsa);
674void sev_es_unmap_ghcb(struct vcpu_svm *svm);
669
675
670
671extern unsigned int max_sev_asid;
672
673void sev_vm_destroy(struct kvm *kvm);
676#ifdef CONFIG_KVM_AMD_SEV
674int sev_mem_enc_ioctl(struct kvm *kvm, void __user *argp);
675int sev_mem_enc_register_region(struct kvm *kvm,
676 struct kvm_enc_region *range);
677int sev_mem_enc_unregister_region(struct kvm *kvm,
678 struct kvm_enc_region *range);
679int sev_vm_copy_enc_context_from(struct kvm *kvm, unsigned int source_fd);
680int sev_vm_move_enc_context_from(struct kvm *kvm, unsigned int source_fd);
681void sev_guest_memory_reclaimed(struct kvm *kvm);
677int sev_mem_enc_ioctl(struct kvm *kvm, void __user *argp);
678int sev_mem_enc_register_region(struct kvm *kvm,
679 struct kvm_enc_region *range);
680int sev_mem_enc_unregister_region(struct kvm *kvm,
681 struct kvm_enc_region *range);
682int sev_vm_copy_enc_context_from(struct kvm *kvm, unsigned int source_fd);
683int sev_vm_move_enc_context_from(struct kvm *kvm, unsigned int source_fd);
684void sev_guest_memory_reclaimed(struct kvm *kvm);
685int sev_handle_vmgexit(struct kvm_vcpu *vcpu);
682
686
683void pre_sev_run(struct vcpu_svm *svm, int cpu);
687/* These symbols are used in common code and are stubbed below. */
688struct page *snp_safe_alloc_page(struct kvm_vcpu *vcpu);
689void sev_free_vcpu(struct kvm_vcpu *vcpu);
690void sev_vm_destroy(struct kvm *kvm);
684void __init sev_set_cpu_caps(void);
685void __init sev_hardware_setup(void);
686void sev_hardware_unsetup(void);
687int sev_cpu_init(struct svm_cpu_data *sd);
691void __init sev_set_cpu_caps(void);
692void __init sev_hardware_setup(void);
693void sev_hardware_unsetup(void);
694int sev_cpu_init(struct svm_cpu_data *sd);
688void sev_init_vmcb(struct vcpu_svm *svm);
689void sev_vcpu_after_set_cpuid(struct vcpu_svm *svm);
690void sev_free_vcpu(struct kvm_vcpu *vcpu);
691int sev_handle_vmgexit(struct kvm_vcpu *vcpu);
692int sev_es_string_io(struct vcpu_svm *svm, int size, unsigned int port, int in);
693void sev_es_vcpu_reset(struct vcpu_svm *svm);
694void sev_vcpu_deliver_sipi_vector(struct kvm_vcpu *vcpu, u8 vector);
695void sev_es_prepare_switch_to_guest(struct sev_es_save_area *hostsa);
696void sev_es_unmap_ghcb(struct vcpu_svm *svm);
697struct page *snp_safe_alloc_page(struct kvm_vcpu *vcpu);
695extern unsigned int max_sev_asid;
696#else
697static inline struct page *snp_safe_alloc_page(struct kvm_vcpu *vcpu) {
698 return alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO);
699}
698
700
701static inline void sev_free_vcpu(struct kvm_vcpu *vcpu) {}
702static inline void sev_vm_destroy(struct kvm *kvm) {}
703static inline void __init sev_set_cpu_caps(void) {}
704static inline void __init sev_hardware_setup(void) {}
705static inline void sev_hardware_unsetup(void) {}
706static inline int sev_cpu_init(struct svm_cpu_data *sd) { return 0; }
707#define max_sev_asid 0
708#endif
709
699/* vmenter.S */
700
701void __svm_sev_es_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted);
702void __svm_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted);
703
704#define DEFINE_KVM_GHCB_ACCESSORS(field) \
705 static __always_inline bool kvm_ghcb_##field##_is_valid(const struct vcpu_svm *svm) \
706 { \

--- 22 unchanged lines hidden ---
710/* vmenter.S */
711
712void __svm_sev_es_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted);
713void __svm_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted);
714
715#define DEFINE_KVM_GHCB_ACCESSORS(field) \
716 static __always_inline bool kvm_ghcb_##field##_is_valid(const struct vcpu_svm *svm) \
717 { \

--- 22 unchanged lines hidden ---