diff options
author | Keir Fraser <keir@xen.org> | 2012-05-30 09:27:51 +0100 |
---|---|---|
committer | Keir Fraser <keir@xen.org> | 2012-05-30 09:27:51 +0100 |
commit | 284f43f4fd6dccfff3b72afded0be03b3fe45091 (patch) | |
tree | af609cd27c2e4854d0eac101a0a31907d7d42fbc /xen/include/asm-x86/hvm | |
parent | de0e85188ca9e240e774f4598139ba92ee5ce4f8 (diff) | |
download | xen-284f43f4fd6dccfff3b72afded0be03b3fe45091.tar.gz xen-284f43f4fd6dccfff3b72afded0be03b3fe45091.tar.bz2 xen-284f43f4fd6dccfff3b72afded0be03b3fe45091.zip |
xen: Define new struct hvm_trap and cleanup vmx exception
Define new struct hvm_trap to represent information of trap, and
renames hvm_inject_exception to hvm_inject_trap, then define a couple
of wrappers around that function for existing callers.
Signed-off-by: Keir Fraser <keir@xen.org>
Signed-off-by: Xudong Hao <xudong.hao@intel.com>
Committed-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/include/asm-x86/hvm')
-rw-r--r-- | xen/include/asm-x86/hvm/hvm.h | 22 | ||||
-rw-r--r-- | xen/include/asm-x86/hvm/svm/nestedsvm.h | 3 | ||||
-rw-r--r-- | xen/include/asm-x86/hvm/vcpu.h | 7 | ||||
-rw-r--r-- | xen/include/asm-x86/hvm/vmx/vmx.h | 1 |
4 files changed, 17 insertions, 16 deletions
diff --git a/xen/include/asm-x86/hvm/hvm.h b/xen/include/asm-x86/hvm/hvm.h index 22f94513ea..65f7e20e9a 100644 --- a/xen/include/asm-x86/hvm/hvm.h +++ b/xen/include/asm-x86/hvm/hvm.h @@ -71,6 +71,13 @@ enum hvm_intblk { #define HVM_HAP_SUPERPAGE_2MB 0x00000001 #define HVM_HAP_SUPERPAGE_1GB 0x00000002 +struct hvm_trap { + int vector; + unsigned int type; /* X86_EVENTTYPE_* */ + int error_code; /* HVM_DELIVER_NO_ERROR_CODE if n/a */ + unsigned long cr2; /* Only for TRAP_page_fault h/w exception */ +}; + /* * The hardware virtual machine (HVM) interface abstracts away from the * x86/x86_64 CPU virtualization assist specifics. Currently this interface @@ -124,8 +131,7 @@ struct hvm_function_table { void (*set_tsc_offset)(struct vcpu *v, u64 offset); - void (*inject_exception)(unsigned int trapnr, int errcode, - unsigned long cr2); + void (*inject_trap)(struct hvm_trap *trap); void (*init_hypercall_page)(struct domain *d, void *hypercall_page); @@ -162,10 +168,7 @@ struct hvm_function_table { struct cpu_user_regs *regs); int (*nhvm_vcpu_vmexit)(struct vcpu *v, struct cpu_user_regs *regs, uint64_t exitcode); - int (*nhvm_vcpu_vmexit_trap)(struct vcpu *v, - unsigned int trapnr, - int errcode, - unsigned long cr2); + int (*nhvm_vcpu_vmexit_trap)(struct vcpu *v, struct hvm_trap *trap); uint64_t (*nhvm_vcpu_guestcr3)(struct vcpu *v); uint64_t (*nhvm_vcpu_hostcr3)(struct vcpu *v); uint32_t (*nhvm_vcpu_asid)(struct vcpu *v); @@ -320,7 +323,9 @@ void hvm_migrate_timers(struct vcpu *v); void hvm_do_resume(struct vcpu *v); void hvm_migrate_pirqs(struct vcpu *v); -void hvm_inject_exception(unsigned int trapnr, int errcode, unsigned long cr2); +void hvm_inject_trap(struct hvm_trap *trap); +void hvm_inject_hw_exception(unsigned int trapnr, int errcode); +void hvm_inject_page_fault(int errcode, unsigned long cr2); static inline int hvm_event_pending(struct vcpu *v) { @@ -479,8 +484,7 @@ int nhvm_vcpu_vmexit(struct vcpu *v, struct cpu_user_regs *regs, /* inject vmexit into l1 guest. l1 guest will see a VMEXIT due to * 'trapnr' exception. */ -int nhvm_vcpu_vmexit_trap(struct vcpu *v, - unsigned int trapnr, int errcode, unsigned long cr2); +int nhvm_vcpu_vmexit_trap(struct vcpu *v, struct hvm_trap *trap); /* returns l2 guest cr3 in l2 guest physical address space. */ uint64_t nhvm_vcpu_guestcr3(struct vcpu *v); diff --git a/xen/include/asm-x86/hvm/svm/nestedsvm.h b/xen/include/asm-x86/hvm/svm/nestedsvm.h index f6951b3230..fa83023242 100644 --- a/xen/include/asm-x86/hvm/svm/nestedsvm.h +++ b/xen/include/asm-x86/hvm/svm/nestedsvm.h @@ -114,8 +114,7 @@ int nsvm_vcpu_hostrestore(struct vcpu *v, struct cpu_user_regs *regs); int nsvm_vcpu_vmrun(struct vcpu *v, struct cpu_user_regs *regs); int nsvm_vcpu_vmexit_inject(struct vcpu *v, struct cpu_user_regs *regs, uint64_t exitcode); -int nsvm_vcpu_vmexit_trap(struct vcpu *v, unsigned int trapnr, - int errcode, unsigned long cr2); +int nsvm_vcpu_vmexit_trap(struct vcpu *v, struct hvm_trap *trap); uint64_t nsvm_vcpu_guestcr3(struct vcpu *v); uint64_t nsvm_vcpu_hostcr3(struct vcpu *v); uint32_t nsvm_vcpu_asid(struct vcpu *v); diff --git a/xen/include/asm-x86/hvm/vcpu.h b/xen/include/asm-x86/hvm/vcpu.h index 537da96f5e..f2da72d750 100644 --- a/xen/include/asm-x86/hvm/vcpu.h +++ b/xen/include/asm-x86/hvm/vcpu.h @@ -164,10 +164,9 @@ struct hvm_vcpu { /* Callback into x86_emulate when emulating FPU/MMX/XMM instructions. */ void (*fpu_exception_callback)(void *, struct cpu_user_regs *); void *fpu_exception_callback_arg; - /* Pending hw/sw interrupt */ - int inject_trap; /* -1 for nothing to inject */ - int inject_error_code; - unsigned long inject_cr2; + + /* Pending hw/sw interrupt (.vector = -1 means nothing pending). */ + struct hvm_trap inject_trap; struct viridian_vcpu viridian; }; diff --git a/xen/include/asm-x86/hvm/vmx/vmx.h b/xen/include/asm-x86/hvm/vmx/vmx.h index f003f84be1..accfa3f81b 100644 --- a/xen/include/asm-x86/hvm/vmx/vmx.h +++ b/xen/include/asm-x86/hvm/vmx/vmx.h @@ -387,7 +387,6 @@ static inline int __vmxon(u64 addr) return rc; } -void vmx_inject_hw_exception(int trap, int error_code); void vmx_inject_extint(int trap); void vmx_inject_nmi(void); |