Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/ia64/xen/xenivt.S
10817 views
1
/*
2
* arch/ia64/xen/ivt.S
3
*
4
* Copyright (C) 2005 Hewlett-Packard Co
5
* Dan Magenheimer <[email protected]>
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"
19
GLOBAL_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
;;
34
1:
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
52
END(xen_event_callback)
53
54