From 1c03f994392d1c77e9b17e9adff246483082829d Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Mon, 11 Feb 2008 11:59:29 -0200 Subject: [PATCH] Implement asm xen_iret Not optimized yet. Always return through the hypervisor. Signed-off-by: Eduardo Habkost --- arch/x86/xen/enlighten.c | 4 ++++ arch/x86/xen/xen-asm_64.S | 7 +++++++ arch/x86/xen/xen-ops.h | 1 + 3 files changed, 12 insertions(+), 0 deletions(-) diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index fcf0554..90d732d 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c @@ -1105,7 +1105,11 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = { .read_tsc = native_read_tsc, .read_pmc = native_read_pmc, +#ifdef CONFIG_X86_32 .iret = (void *)&hypercall_page[__HYPERVISOR_iret], +#else + .iret = xen_iret, +#endif .irq_enable_syscall_ret = NULL, /* never called */ .load_tr_desc = paravirt_nop, diff --git a/arch/x86/xen/xen-asm_64.S b/arch/x86/xen/xen-asm_64.S index 38443b8..8f28a91 100644 --- a/arch/x86/xen/xen-asm_64.S +++ b/arch/x86/xen/xen-asm_64.S @@ -6,3 +6,10 @@ check_events: ENTRY(xen_iret_direct) /*FIXME: implement me! */ ud2a + +ENTRY(xen_iret) + /*FIXME: the VGCF_in_syscall flag need to be handled here */ + pushq $0 + jmp hypercall_page + (__HYPERVISOR_iret * 32) +END(xen_iret) + diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h index f062eab..e52bb4c 100644 --- a/arch/x86/xen/xen-ops.h +++ b/arch/x86/xen/xen-ops.h @@ -71,4 +71,5 @@ DECL_ASM(unsigned long, xen_save_fl_direct, void); DECL_ASM(void, xen_restore_fl_direct, unsigned long); void xen_iret_direct(void); +void xen_iret(void); #endif /* XEN_OPS_H */ -- 1.5.4.1