4 * Copyright (C) 2005 Hewlett-Packard Co
5 * Dan Magenheimer <dan.magenheimer@hp.com>
7 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
8 * VA Linux Systems Japan K.K.
12 #include <asm/asmmacro.h>
13 #include <asm/kregs.h>
14 #include <asm/pgtable.h>
16 #include "../kernel/minstate.h"
19 GLOBAL_ENTRY(xen_event_callback)
20 mov r31=pr // prepare to save predicates
22 SAVE_MIN_WITH_COVER // uses r31; defines r2 and r3
29 adds r3=8,r2 // set up second base pointer for SAVE_REST
30 srlz.i // ensure everybody knows psr.ic is back on
35 alloc r14=ar.pfs,0,0,1,0 // must be first in an insn group
36 add out0=16,sp // pass pointer to pt_regs as first arg
38 br.call.sptk.many b0=xen_evtchn_do_upcall
40 movl r20=XSI_PSR_I_ADDR
44 adds r20=-1,r20 // vcpu_info->evtchn_upcall_pending
48 cmp.ne p6,p0=r20,r0 // if there are pending events,
49 (p6) br.spnt.few 1b // call evtchn_do_upcall again.
50 br.sptk.many xen_leave_kernel // we know ia64_leave_kernel is
51 // paravirtualized as xen_leave_kernel
52 END(xen_event_callback)