-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ia64/pv_ops/xen: paravirtualize ivt.S for xen.
paravirtualize ivt.S for xen by multi compile. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Tony Luck <tony.luck@intel.com>
- Loading branch information
Isaku Yamahata
authored and
Tony Luck
committed
Oct 17, 2008
1 parent
21820cc
commit 5142ec4
Showing
3 changed files
with
68 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
/* | ||
* arch/ia64/xen/ivt.S | ||
* | ||
* Copyright (C) 2005 Hewlett-Packard Co | ||
* Dan Magenheimer <dan.magenheimer@hp.com> | ||
* | ||
* Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp> | ||
* VA Linux Systems Japan K.K. | ||
* pv_ops. | ||
*/ | ||
|
||
#include <asm/asmmacro.h> | ||
#include <asm/kregs.h> | ||
#include <asm/pgtable.h> | ||
|
||
#include "../kernel/minstate.h" | ||
|
||
.section .text,"ax" | ||
GLOBAL_ENTRY(xen_event_callback) | ||
mov r31=pr // prepare to save predicates | ||
;; | ||
SAVE_MIN_WITH_COVER // uses r31; defines r2 and r3 | ||
;; | ||
movl r3=XSI_PSR_IC | ||
mov r14=1 | ||
;; | ||
st4 [r3]=r14 | ||
;; | ||
adds r3=8,r2 // set up second base pointer for SAVE_REST | ||
srlz.i // ensure everybody knows psr.ic is back on | ||
;; | ||
SAVE_REST | ||
;; | ||
1: | ||
alloc r14=ar.pfs,0,0,1,0 // must be first in an insn group | ||
add out0=16,sp // pass pointer to pt_regs as first arg | ||
;; | ||
br.call.sptk.many b0=xen_evtchn_do_upcall | ||
;; | ||
movl r20=XSI_PSR_I_ADDR | ||
;; | ||
ld8 r20=[r20] | ||
;; | ||
adds r20=-1,r20 // vcpu_info->evtchn_upcall_pending | ||
;; | ||
ld1 r20=[r20] | ||
;; | ||
cmp.ne p6,p0=r20,r0 // if there are pending events, | ||
(p6) br.spnt.few 1b // call evtchn_do_upcall again. | ||
br.sptk.many xen_leave_kernel // we know ia64_leave_kernel is | ||
// paravirtualized as xen_leave_kernel | ||
END(xen_event_callback) |