# HG changeset patch
# User awilliam@xxxxxxxxxxxx
# Date 1168629071 25200
# Node ID cd6598396086157a9eeb2f368462ddeb6e8f8201
# Parent 01ea554f1c5e8bdbfa172349438298b15da6fc5c
[IA64] Simplify lazy cover algorithm
Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx>
---
linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c | 1
linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h | 11 -------
linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h | 1
xen/arch/ia64/asm-xsi-offsets.c | 1
xen/arch/ia64/xen/faults.c | 3 -
xen/arch/ia64/xen/hyperprivop.S | 31 ++++----------------
xen/arch/ia64/xen/vcpu.c | 7 ----
xen/include/public/arch-ia64.h | 5 +--
8 files changed, 11 insertions(+), 49 deletions(-)
diff -r 01ea554f1c5e -r cd6598396086
linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c Thu Jan 11
16:56:58 2007 -0700
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c Fri Jan 12
12:11:11 2007 -0700
@@ -280,7 +280,6 @@ void foo(void)
DEFINE_MAPPED_REG_OFS(XSI_IHA_OFS, iha);
DEFINE_MAPPED_REG_OFS(XSI_ITIR_OFS, itir);
DEFINE_MAPPED_REG_OFS(XSI_PSR_IC_OFS, interrupt_collection_enabled);
- DEFINE_MAPPED_REG_OFS(XSI_INCOMPL_REGFR_OFS, incomplete_regframe);
DEFINE_MAPPED_REG_OFS(XSI_BANKNUM_OFS, banknum);
DEFINE_MAPPED_REG_OFS(XSI_BANK0_R16_OFS, bank0_regs[0]);
DEFINE_MAPPED_REG_OFS(XSI_BANK1_R16_OFS, bank1_regs[0]);
diff -r 01ea554f1c5e -r cd6598396086
linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h Thu Jan 11 16:56:58
2007 -0700
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h Fri Jan 12 12:11:11
2007 -0700
@@ -151,16 +151,7 @@
.mem.offset 8,0; st8.spill [r17]=r11,24;
\
;;
\
/* xen special handling for possibly lazy cover */
\
- movl r8=XSI_INCOMPL_REGFR;
\
- ;;
\
- ld4 r30=[r8];
\
- ;;
\
- /* set XSI_INCOMPL_REGFR 0 */
\
- st4 [r8]=r0;
\
- cmp.eq p6,p7=r30,r0;
\
- ;; /* not sure if this stop bit is necessary */
\
-(p6) adds r8=XSI_PRECOVER_IFS-XSI_INCOMPL_REGFR,r8;
\
-(p7) adds r8=XSI_IFS-XSI_INCOMPL_REGFR,r8;
\
+ movl r8=XSI_PRECOVER_IFS;
\
;;
\
ld8 r30=[r8];
\
;;
\
diff -r 01ea554f1c5e -r cd6598396086
linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h Thu Jan 11
16:56:58 2007 -0700
+++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h Fri Jan 12
12:11:11 2007 -0700
@@ -49,7 +49,6 @@
#define XSI_IFS (XSI_BASE + XSI_IFS_OFS)
#define XSI_PRECOVER_IFS (XSI_BASE + XSI_PRECOVER_IFS_OFS)
-#define XSI_INCOMPL_REGFR (XSI_BASE + XSI_INCOMPL_REGFR_OFS)
#define XSI_IFA (XSI_BASE + XSI_IFA_OFS)
#define XSI_ISR (XSI_BASE + XSI_ISR_OFS)
#define XSI_IIM (XSI_BASE + XSI_IIM_OFS)
diff -r 01ea554f1c5e -r cd6598396086 xen/arch/ia64/asm-xsi-offsets.c
--- a/xen/arch/ia64/asm-xsi-offsets.c Thu Jan 11 16:56:58 2007 -0700
+++ b/xen/arch/ia64/asm-xsi-offsets.c Fri Jan 12 12:11:11 2007 -0700
@@ -62,7 +62,6 @@ void foo(void)
DEFINE_MAPPED_REG_OFS(XSI_ITV_OFS, itv);
DEFINE_MAPPED_REG_OFS(XSI_PTA_OFS, pta);
DEFINE_MAPPED_REG_OFS(XSI_PSR_IC_OFS, interrupt_collection_enabled);
- DEFINE_MAPPED_REG_OFS(XSI_INCOMPL_REGFR_OFS, incomplete_regframe);
DEFINE_MAPPED_REG_OFS(XSI_METAPHYS_OFS, metaphysical_mode);
DEFINE_MAPPED_REG_OFS(XSI_BANKNUM_OFS, banknum);
DEFINE_MAPPED_REG_OFS(XSI_BANK0_R16_OFS, bank0_regs[0]);
diff -r 01ea554f1c5e -r cd6598396086 xen/arch/ia64/xen/faults.c
--- a/xen/arch/ia64/xen/faults.c Thu Jan 11 16:56:58 2007 -0700
+++ b/xen/arch/ia64/xen/faults.c Fri Jan 12 12:11:11 2007 -0700
@@ -88,7 +88,6 @@ void reflect_interruption(unsigned long
PSCB(v, isr) = isr;
PSCB(v, iip) = regs->cr_iip;
PSCB(v, ifs) = 0;
- PSCB(v, incomplete_regframe) = 0;
regs->cr_iip = ((unsigned long)PSCBX(v, iva) + vector) & ~0xffUL;
regs->cr_ipsr = (regs->cr_ipsr & ~DELIVER_PSR_CLR) | DELIVER_PSR_SET;
@@ -155,7 +154,6 @@ void reflect_event(void)
PSCB(v, isr) = isr;
PSCB(v, iip) = regs->cr_iip;
PSCB(v, ifs) = 0;
- PSCB(v, incomplete_regframe) = 0;
regs->cr_iip = v->arch.event_callback_ip;
regs->cr_ipsr = (regs->cr_ipsr & ~DELIVER_PSR_CLR) | DELIVER_PSR_SET;
@@ -185,7 +183,6 @@ static int handle_lazy_cover(struct vcpu
{
if (!PSCB(v, interrupt_collection_enabled)) {
PSCB(v, ifs) = regs->cr_ifs;
- PSCB(v, incomplete_regframe) = 1;
regs->cr_ifs = 0;
perfc_incrc(lazy_cover);
return 1; // retry same instruction with cr.ifs off
diff -r 01ea554f1c5e -r cd6598396086 xen/arch/ia64/xen/hyperprivop.S
--- a/xen/arch/ia64/xen/hyperprivop.S Thu Jan 11 16:56:58 2007 -0700
+++ b/xen/arch/ia64/xen/hyperprivop.S Fri Jan 12 12:11:11 2007 -0700
@@ -192,7 +192,6 @@ END(fast_hyperprivop)
// and isr.ri to cr.isr.ri (all other bits zero)
// - cover and set shared_mem precover_ifs to cr.ifs
// ^^^ MISSED THIS FOR fast_break??
-// - set shared_mem ifs and incomplete_regframe to 0
// - set shared_mem interrupt_delivery_enabled to 0
// - set shared_mem interrupt_collection_enabled to 0
// - set r31 to SHAREDINFO_ADDR
@@ -272,11 +271,9 @@ ENTRY(hyper_ssm_i)
st1 [r22]=r20
st4 [r18]=r0
// cover and set shared_mem precover_ifs to cr.ifs
- // set shared_mem ifs and incomplete_regframe to 0
+ // set shared_mem ifs to 0
cover ;;
mov r20=cr.ifs;;
- adds r21=XSI_INCOMPL_REGFR_OFS-XSI_PSR_IC_OFS,r18 ;;
- st4 [r21]=r0 ;;
adds r21=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
st8 [r21]=r0 ;;
adds r21=XSI_PRECOVER_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
@@ -459,11 +456,9 @@ GLOBAL_ENTRY(fast_tick_reflect)
st1 [r22]=r20;;
st4 [r18]=r0;;
// cover and set shared_mem precover_ifs to cr.ifs
- // set shared_mem ifs and incomplete_regframe to 0
+ // set shared_mem ifs to 0
cover ;;
mov r20=cr.ifs;;
- adds r21=XSI_INCOMPL_REGFR_OFS-XSI_PSR_IC_OFS,r18 ;;
- st4 [r21]=r0 ;;
adds r21=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
st8 [r21]=r0 ;;
adds r21=XSI_PRECOVER_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
@@ -645,11 +640,9 @@ ENTRY(fast_reflect)
st1 [r24]=r22
st4 [r18]=r0;;
// cover and set shared_mem precover_ifs to cr.ifs
- // set shared_mem ifs and incomplete_regframe to 0
+ // set shared_mem ifs to 0
cover ;;
mov r24=cr.ifs;;
- adds r21=XSI_INCOMPL_REGFR_OFS-XSI_PSR_IC_OFS,r18 ;;
- st4 [r21]=r0 ;;
adds r21=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
st8 [r21]=r0 ;;
adds r21=XSI_PRECOVER_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
@@ -1082,8 +1075,6 @@ just_do_rfi:
just_do_rfi:
// r18=&vpsr.i|vpsr.ic, r21==vpsr, r22=vcr.iip
mov cr.iip=r22;;
- adds r20=XSI_INCOMPL_REGFR_OFS-XSI_PSR_IC_OFS,r18 ;;
- st4 [r20]=r0 ;;
adds r20=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
ld8 r20=[r20];;
dep r20=0,r20,38,25;; // ensure ifs has no reserved bits set
@@ -1259,20 +1250,16 @@ ENTRY(rfi_with_interrupt)
st1 [r22]=r20
st4 [r18]=r0;;
// cover and set shared_mem precover_ifs to cr.ifs
- // set shared_mem ifs and incomplete_regframe to 0
+ // set shared_mem ifs to 0
#if 0
cover ;;
mov r20=cr.ifs;;
- adds r22=XSI_INCOMPL_REG_OFS-XSI_PSR_IC_OFS,r18 ;;
- st4 [r22]=r0 ;;
adds r22=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
st8 [r22]=r0 ;;
adds r22=XSI_PRECOVER_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
st8 [r22]=r20 ;;
// leave cr.ifs alone for later rfi
#else
- adds r22=XSI_INCOMPL_REG_OFS-XSI_PSR_IC_OFS,r18 ;;
- st4 [r22]=r0 ;;
adds r22=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
ld8 r20=[r22];;
st8 [r22]=r0 ;;
@@ -1334,13 +1321,9 @@ ENTRY(hyper_cover)
mov r25=cr.iip;;
// skip test for vpsr.ic.. it's a prerequisite for hyperprivops
cover ;;
- adds r20=XSI_INCOMPL_REGFR_OFS-XSI_PSR_IC_OFS,r18 ;;
- mov r30=cr.ifs;;
- adds r22=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18
- ld4 r21=[r20] ;;
- cmp.eq p6,p7=r21,r0 ;;
-(p6) st8 [r22]=r30;;
-(p7) st4 [r20]=r0;;
+ mov r30=cr.ifs
+ adds r22=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18;;
+ st8 [r22]=r30;;
mov cr.ifs=r0;;
// adjust return address to skip over break instruction
extr.u r26=r24,41,2 ;;
diff -r 01ea554f1c5e -r cd6598396086 xen/arch/ia64/xen/vcpu.c
--- a/xen/arch/ia64/xen/vcpu.c Thu Jan 11 16:56:58 2007 -0700
+++ b/xen/arch/ia64/xen/vcpu.c Fri Jan 12 12:11:11 2007 -0700
@@ -613,7 +613,6 @@ IA64FAULT vcpu_get_ifs(VCPU * vcpu, u64
//PSCB(vcpu,ifs) = PSCB(vcpu)->regs.cr_ifs;
//*pval = PSCB(vcpu,regs).cr_ifs;
*pval = PSCB(vcpu, ifs);
- PSCB(vcpu, incomplete_regframe) = 0;
return IA64_NO_FAULT;
}
@@ -1362,7 +1361,6 @@ IA64FAULT vcpu_rfi(VCPU * vcpu)
printk("*** DOMAIN TRYING TO TURN ON BIG-ENDIAN!!!\n");
return IA64_ILLOP_FAULT;
}
- PSCB(vcpu, incomplete_regframe) = 0; // is this necessary?
ifs = PSCB(vcpu, ifs);
if (ifs > 0x8000000000000000UL) {
@@ -1397,10 +1395,7 @@ IA64FAULT vcpu_cover(VCPU * vcpu)
REGS *regs = vcpu_regs(vcpu);
if (!PSCB(vcpu, interrupt_collection_enabled)) {
- if (!PSCB(vcpu, incomplete_regframe))
- PSCB(vcpu, ifs) = regs->cr_ifs;
- else
- PSCB(vcpu, incomplete_regframe) = 0;
+ PSCB(vcpu, ifs) = regs->cr_ifs;
}
regs->cr_ifs = 0;
return IA64_NO_FAULT;
diff -r 01ea554f1c5e -r cd6598396086 xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h Thu Jan 11 16:56:58 2007 -0700
+++ b/xen/include/public/arch-ia64.h Fri Jan 12 12:11:11 2007 -0700
@@ -287,10 +287,9 @@ struct mapped_regs {
*/
unsigned char *interrupt_mask_addr;
int pending_interruption;
- int incomplete_regframe; // see SDM vol2 6.8
unsigned char vpsr_pp;
- unsigned char reserved5_2[7];
- unsigned long reserved5_1[3];
+ unsigned char reserved5_2[3];
+ unsigned long reserved5_1[4];
int metaphysical_mode; // 1 = use metaphys mapping, 0 = use virtual
int banknum; // 0 or 1, which virtual register bank is active
unsigned long rrs[8]; // region registers
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|