219 gva_t pageinfo_gva, secs_gva;
220 gva_t metadata_gva, contents_gva;
221 gpa_t metadata_gpa, contents_gpa, secs_gpa;
222 unsigned long metadata_hva, contents_hva, secs_hva;
223 struct sgx_pageinfo pageinfo;
224 struct sgx_secs *contents;
237 sizeof(pageinfo), &ex);
277 contents = (
struct sgx_secs *)__get_free_page(GFP_KERNEL_ACCOUNT);
282 if (
sgx_read_hva(vcpu, contents_hva, (
void *)contents, PAGE_SIZE)) {
283 free_page((
unsigned long)contents);
287 pageinfo.metadata = metadata_hva;
288 pageinfo.contents = (u64)contents;
292 free_page((
unsigned long)contents);
#define X86EMUL_PROPAGATE_FAULT
static int sgx_gpa_to_hva(struct kvm_vcpu *vcpu, gpa_t gpa, unsigned long *hva)
static int __handle_encls_ecreate(struct kvm_vcpu *vcpu, struct sgx_pageinfo *pageinfo, unsigned long secs_hva, gva_t secs_gva)
static int sgx_get_encls_gva(struct kvm_vcpu *vcpu, unsigned long offset, int size, int alignment, gva_t *gva)
static int sgx_gva_to_gpa(struct kvm_vcpu *vcpu, gva_t gva, bool write, gpa_t *gpa)
static int sgx_read_hva(struct kvm_vcpu *vcpu, unsigned long hva, void *data, unsigned int size)
static void sgx_handle_emulation_failure(struct kvm_vcpu *vcpu, u64 addr, unsigned int size)
int kvm_read_guest_virt(struct kvm_vcpu *vcpu, gva_t addr, void *val, unsigned int bytes, struct x86_exception *exception)
void kvm_inject_emulated_page_fault(struct kvm_vcpu *vcpu, struct x86_exception *fault)