# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1192426724 -32400 # Node ID 79c5e792f49dcc0161d240f8604899917176567d # Parent fb737f30b52de7f38486ba6b2035ae0a031b2f29 fix ia64_leave_hypervisor. It doesn't restore cr.ifs depending on pNonSys. However cr.ifs isn't preserved between vcpu context switch so that hypervisor bits are leaked as ar.cfm to HVM domain. This patche fixes it. PATCHNAME: fix_ia64_leave_hypervisor Signed-off-by: Isaku Yamahata diff -r fb737f30b52d -r 79c5e792f49d xen/arch/ia64/vmx/vmx_entry.S --- a/xen/arch/ia64/vmx/vmx_entry.S Mon Oct 15 14:11:59 2007 +0900 +++ b/xen/arch/ia64/vmx/vmx_entry.S Mon Oct 15 14:38:44 2007 +0900 @@ -352,7 +352,7 @@ vmx_rse_clear_invalid: ;; mov cr.ipsr=r31 mov cr.iip=r30 -(pNonSys) mov cr.ifs=r29 + mov cr.ifs=r29 mov ar.pfs=r27 adds r18=IA64_VPD_BASE_OFFSET,r21 ;; diff -r fb737f30b52d -r 79c5e792f49d xen/arch/ia64/vmx/vmx_init.c --- a/xen/arch/ia64/vmx/vmx_init.c Mon Oct 15 14:11:59 2007 +0900 +++ b/xen/arch/ia64/vmx/vmx_init.c Mon Oct 15 14:38:44 2007 +0900 @@ -301,7 +301,6 @@ vmx_final_setup_guest(struct vcpu *v) { vpd_t *vpd; int rc; - struct switch_stack *sw; vpd = alloc_vpd(); ASSERT(vpd); @@ -335,10 +334,6 @@ vmx_final_setup_guest(struct vcpu *v) /* Set up guest 's indicator for VTi domain*/ set_bit(ARCH_VMX_DOMAIN, &v->arch.arch_vmx.flags); - /* Initialize pNonSys=1 for the first context switching */ - sw = (struct switch_stack *)vcpu_regs(v) - 1; - sw->pr = (1UL << PRED_NON_SYSCALL); - return 0; } diff -r fb737f30b52d -r 79c5e792f49d xen/arch/ia64/vmx/vmx_ivt.S --- a/xen/arch/ia64/vmx/vmx_ivt.S Mon Oct 15 14:11:59 2007 +0900 +++ b/xen/arch/ia64/vmx/vmx_ivt.S Mon Oct 15 14:38:44 2007 +0900 @@ -913,7 +913,6 @@ GLOBAL_ENTRY(ia64_hypercall_setup) (p13) mov in6=-1 (p8) mov in7=-1 - cmp.eq pSys,pNonSys=r0,r0 // set pSys=1, pNonSys=0 movl r17=FPSR_DEFAULT ;; mov.m ar.fpsr=r17 // set ar.fpsr to kernel default value diff -r fb737f30b52d -r 79c5e792f49d xen/arch/ia64/vmx/vmx_minstate.h --- a/xen/arch/ia64/vmx/vmx_minstate.h Mon Oct 15 14:11:59 2007 +0900 +++ b/xen/arch/ia64/vmx/vmx_minstate.h Mon Oct 15 14:38:44 2007 +0900 @@ -174,7 +174,6 @@ ;; \ st8 [r16]=r29,16; /* save b0 */ \ st8 [r17]=r18,16; /* save ar.rsc value for "loadrs" */ \ - cmp.eq pNonSys,pSys=r0,r0 /* initialize pSys=0, pNonSys=1 */ \ ;; \ .mem.offset 0,0; st8.spill [r16]=r20,16; /* save original r1 */ \ .mem.offset 8,0; st8.spill [r17]=r12,16; \