1/* 2 * arch/ia64/xen/ivt.S 3 * 4 * Copyright (C) 2005 Hewlett-Packard Co 5 * Dan Magenheimer <dan.magenheimer@hp.com> 6 * 7 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp> 8 * VA Linux Systems Japan K.K. 9 * pv_ops. 10 */ 11 12#include <asm/asmmacro.h> 13#include <asm/kregs.h> 14#include <asm/pgtable.h> 15 16#include "../kernel/minstate.h" 17 18 .section .text,"ax" 19GLOBAL_ENTRY(xen_event_callback) 20 mov r31=pr // prepare to save predicates 21 ;; 22 SAVE_MIN_WITH_COVER // uses r31; defines r2 and r3 23 ;; 24 movl r3=XSI_PSR_IC 25 mov r14=1 26 ;; 27 st4 [r3]=r14 28 ;; 29 adds r3=8,r2 // set up second base pointer for SAVE_REST 30 srlz.i // ensure everybody knows psr.ic is back on 31 ;; 32 SAVE_REST 33 ;; 341: 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 37 ;; 38 br.call.sptk.many b0=xen_evtchn_do_upcall 39 ;; 40 movl r20=XSI_PSR_I_ADDR 41 ;; 42 ld8 r20=[r20] 43 ;; 44 adds r20=-1,r20 // vcpu_info->evtchn_upcall_pending 45 ;; 46 ld1 r20=[r20] 47 ;; 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 52END(xen_event_callback) 53