[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 1/7] x86: make traps.c build with !CONFIG_PV
Provide a stub for pv_inject_event, put code that accesses PV fields and GDT / LDT fault handling code under CONFIG_PV. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- v3: 1. don't skip updating dr_masks in activate_debugregs. 2. remove ASSERT_UNREACHABLE in fixup_page_fault. v2: reduce the amount of ifdefs --- xen/arch/x86/traps.c | 16 ++++++++++++++++ xen/include/asm-x86/domain.h | 7 +++++++ 2 files changed, 23 insertions(+) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index c60c8f5..69449e0 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1115,6 +1115,7 @@ static void reserved_bit_page_fault(unsigned long addr, show_execution_state(regs); } +#ifdef CONFIG_PV static int handle_ldt_mapping_fault(unsigned int offset, struct cpu_user_regs *regs) { @@ -1185,6 +1186,7 @@ static int handle_gdt_ldt_mapping_fault(unsigned long offset, return EXCRET_fault_fixed; } +#endif #define IN_HYPERVISOR_RANGE(va) \ (((va) >= HYPERVISOR_VIRT_START) && ((va) < HYPERVISOR_VIRT_END)) @@ -1335,10 +1337,12 @@ static int fixup_page_fault(unsigned long addr, struct cpu_user_regs *regs) if ( unlikely(IN_HYPERVISOR_RANGE(addr)) ) { +#ifdef CONFIG_PV if ( !(regs->error_code & (PFEC_user_mode | PFEC_reserved_bit)) && (addr >= GDT_LDT_VIRT_START) && (addr < GDT_LDT_VIRT_END) ) return handle_gdt_ldt_mapping_fault( addr - GDT_LDT_VIRT_START, regs); +#endif return 0; } @@ -1494,7 +1498,9 @@ void __init do_early_page_fault(struct cpu_user_regs *regs) void do_general_protection(struct cpu_user_regs *regs) { +#ifdef CONFIG_PV struct vcpu *v = current; +#endif unsigned long fixup; if ( debugger_trap_entry(TRAP_gp_fault, regs) ) @@ -1506,6 +1512,7 @@ void do_general_protection(struct cpu_user_regs *regs) if ( !guest_mode(regs) ) goto gp_in_kernel; +#ifdef CONFIG_PV /* * Cunning trick to allow arbitrary "INT n" handling. * @@ -1557,6 +1564,7 @@ void do_general_protection(struct cpu_user_regs *regs) /* Pass on GPF as is. */ pv_inject_hw_exception(TRAP_gp_fault, regs->error_code); return; +#endif gp_in_kernel: @@ -1744,7 +1752,9 @@ void unset_nmi_callback(void) void do_device_not_available(struct cpu_user_regs *regs) { +#ifdef CONFIG_PV struct vcpu *curr = current; +#endif if ( !guest_mode(regs) ) { @@ -1762,6 +1772,7 @@ void do_device_not_available(struct cpu_user_regs *regs) return; } +#ifdef CONFIG_PV vcpu_restore_fpu_lazy(curr); if ( curr->arch.pv.ctrlreg[0] & X86_CR0_TS ) @@ -1771,6 +1782,9 @@ void do_device_not_available(struct cpu_user_regs *regs) } else TRACE_0D(TRC_PV_MATH_STATE_RESTORE); +#else + ASSERT_UNREACHABLE(); +#endif return; } @@ -2078,6 +2092,7 @@ void activate_debugregs(const struct vcpu *curr) } } +#ifdef CONFIG_PV /* * Used by hypercalls and the emulator. * -ENODEV => #UD @@ -2193,6 +2208,7 @@ long set_debugreg(struct vcpu *v, unsigned int reg, unsigned long value) return 0; } +#endif /* CONFIG_PV */ void asm_domain_crash_synchronous(unsigned long addr) { diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index 7214037..643e69a 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -681,7 +681,14 @@ void arch_vcpu_regs_init(struct vcpu *v); struct vcpu_hvm_context; int arch_set_info_hvm_guest(struct vcpu *v, const struct vcpu_hvm_context *ctx); +#ifdef CONFIG_PV void pv_inject_event(const struct x86_event *event); +#else +static inline void pv_inject_event(const struct x86_event *event) +{ + ASSERT_UNREACHABLE(); +} +#endif static inline void pv_inject_hw_exception(unsigned int vector, int errcode) { -- git-series 0.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |