Nested Virtualization: function hooks
PATCH 4/14 Nested Virtualization: function hooks
Signed-off-by Christoph Egger <[email protected]>
Signature · 6 lines
---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632
# HG changeset patch
# User cegger
# Date 1280925498 -7200
add nestedhvm function hooks for svm/vmx specific code
xen/arch/x86/hvm/hvm.c +90 -0
@@ -3257,6 +3257,96 @@ int hvm_debug_op(struct vcpu *v, int32_t } +int hvm_nestedhvm_vcpu_initialise (struct vcpu *v) +{ +if (hvm_funcs.nestedhvm_vcpu_initialise) +return hvm_funcs.nestedhvm_vcpu_initialise (v); +return -EOPNOTSUPP ; +} + +int hvm_nestedhvm_vcpu_destroy (struct vcpu *v) +{ +if (hvm_funcs.nestedhvm_vcpu_destroy) +return hvm_funcs.nestedhvm_vcpu_destroy (v); +return -EOPNOTSUPP ; +} + +int hvm_nestedhvm_vcpu_reset (struct vcpu *v) +{ +if (hvm_funcs.nestedhvm_vcpu_reset) +return hvm_funcs.nestedhvm_vcpu_reset (v); +return -EOPNOTSUPP ; +} + +int hvm_nestedhvm_vcpu_features (struct vcpu *v, +uint32_t *eax,uint32_t *ebx,uint32_t *ecx,uint32_t *edx) +{ +if (hvm_funcs.nestedhvm_vcpu_features) +return hvm_funcs.nestedhvm_vcpu_features (v, eax, ebx, ecx, edx); +return -EOPNOTSUPP ; +} + +int hvm_nestedhvm_vcpu_hostsave (struct vcpu *v,unsigned int inst_len) +{ +if (hvm_funcs.nestedhvm_vcpu_hostsave) +return hvm_funcs.nestedhvm_vcpu_hostsave (v, inst_len); +return -EOPNOTSUPP ; +} + +int hvm_nestedhvm_vcpu_hostrestore (struct vcpu *v,struct cpu_user_regs *regs) +{ +if (hvm_funcs.nestedhvm_vcpu_hostrestore) +return hvm_funcs.nestedhvm_vcpu_hostrestore (v, regs); +return -EOPNOTSUPP ; +} + +int hvm_nestedhvm_vcpu_vmentry (struct vcpu *v) +{ +if (hvm_funcs.nestedhvm_vcpu_vmentry) +return hvm_funcs.nestedhvm_vcpu_vmentry (v); +return -EOPNOTSUPP ; +} + +int hvm_nestedhvm_vcpu_vmexit (struct vcpu *v,struct cpu_user_regs *regs, +uint64_t exitcode) +{ +if (hvm_funcs.nestedhvm_vcpu_vmexit) +return hvm_funcs.nestedhvm_vcpu_vmexit (v, regs, exitcode); +return -EOPNOTSUPP ; +} + +uint64_t hvm_nestedhvm_vm_exitcode_native2generic (struct vcpu *v, +struct cpu_user_regs *regs,uint64_t exitcode, +uint64_t *info1,uint64_t *info2) +{ +if (hvm_funcs.nestedhvm_vm_exitcode_native2generic) +return hvm_funcs.nestedhvm_vm_exitcode_native2generic (v, regs, + exitcode, info1, info2); +return -EOPNOTSUPP ; +} + +int hvm_nestedhvm_vm_intercepted_by_guest (struct vcpu *v,uint64_t exitcode) +{ +if (hvm_funcs.nestedhvm_vm_intercepted_by_guest) +return hvm_funcs.nestedhvm_vm_intercepted_by_guest (v, exitcode); +return -EOPNOTSUPP ; +} + +int hvm_nestedhvm_vm_prepare4vmentry (struct vcpu *v,struct cpu_user_regs *regs) +{ +if (hvm_funcs.nestedhvm_vm_prepare4vmentry) +return hvm_funcs.nestedhvm_vm_prepare4vmentry (v, regs); +return -EOPNOTSUPP ; +} + +int hvm_nestedhvm_vm_prepare4vmexit (struct vcpu *v) +{ +if (hvm_funcs.nestedhvm_vm_prepare4vmexit) +return hvm_funcs.nestedhvm_vm_prepare4vmexit (v); +return -EOPNOTSUPP ; +} + +/* * Local variables: * mode: C
xen/include/asm-x86/hvm/hvm.h +38 -0
@@ -145,6 +145,26 @@ struct hvm_function_table {void (*set_uc_mode)(struct vcpu *v);void (*set_info_guest)(struct vcpu *v);void (*set_rdtsc_exiting)(struct vcpu *v,bool_t ); + +/* Nested HVM */ +int (*nestedhvm_vcpu_initialise)(struct vcpu *v); +int (*nestedhvm_vcpu_destroy)(struct vcpu *v); +int (*nestedhvm_vcpu_reset)(struct vcpu *v); +int (*nestedhvm_vcpu_features)(struct vcpu *v, +uint32_t *eax,uint32_t *ebx,uint32_t *ecx,uint32_t *edx); +int (*nestedhvm_vcpu_hostsave)(struct vcpu *v,unsigned int inst_len); +int (*nestedhvm_vcpu_hostrestore)(struct vcpu *v, +struct cpu_user_regs *regs); +int (*nestedhvm_vcpu_vmentry)(struct vcpu *v); +int (*nestedhvm_vcpu_vmexit)(struct vcpu *v,struct cpu_user_regs *regs, +uint64_t exitcode); +uint64_t (*nestedhvm_vm_exitcode_native2generic)(struct vcpu *v, +struct cpu_user_regs *regs,uint64_t exitcode, +uint64_t *info1,uint64_t *info2); +int (*nestedhvm_vm_intercepted_by_guest)(struct vcpu *v,uint64_t exitcode); +int (*nestedhvm_vm_prepare4vmentry)(struct vcpu *v, +struct cpu_user_regs *regs); +int (*nestedhvm_vm_prepare4vmexit)(struct vcpu *v); };extern struct hvm_function_table hvm_funcs;
@@ -363,4 +383,22 @@ bool_t hvm_hap_nested_page_fault(unsigne ? (u32)__d->arch.incarnation : (u32)(v)->arch.hvm_vcpu.msr_tsc_aux; \ }) +/* Nested HVM */ +int hvm_nestedhvm_vcpu_initialise (struct vcpu *v); +int hvm_nestedhvm_vcpu_destroy (struct vcpu *v); +int hvm_nestedhvm_vcpu_reset (struct vcpu *v); +int hvm_nestedhvm_vcpu_features (struct vcpu *v, +uint32_t *eax,uint32_t *ebx,uint32_t *ecx,uint32_t *edx); +int hvm_nestedhvm_vcpu_hostsave (struct vcpu *v,unsigned int inst_len); +int hvm_nestedhvm_vcpu_hostrestore (struct vcpu *v,struct cpu_user_regs *regs); +int hvm_nestedhvm_vcpu_vmentry (struct vcpu *v); +int hvm_nestedhvm_vcpu_vmexit (struct vcpu *v,struct cpu_user_regs *regs, +uint64_t exitcode); +uint64_t hvm_nestedhvm_vm_exitcode_native2generic (struct vcpu *v, +struct cpu_user_regs *regs,uint64_t exitcode, +uint64_t *info1,uint64_t *info2); +int hvm_nestedhvm_vm_intercepted_by_guest (struct vcpu *v,uint64_t exitcode); +int hvm_nestedhvm_vm_prepare4vmentry (struct vcpu *v,struct cpu_user_regs *regs); +int hvm_nestedhvm_vm_prepare4vmexit (struct vcpu *v); +#endif /* __ASM_X86_HVM_HVM_H__ */
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel