[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-ia64-devel] [PATCH] fix INIT injection
On Wed, Sep 17, 2008 at 03:59:47PM +0900, Kouya Shimura wrote: Content-Description: message body text > xm trigger command sometimes causes an unexpected domain panic. > There are several symptoms: > * Guest nested fault (INIT handler runs with vpsr.cpl != 0) > * Interrupt when IC=0 > * Unexpected virtual <--> physical mode transition > > Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx> > Signed-off-by: Kazuhiro Suzuki <kaz@xxxxxxxxxxxxxx> > > diff -r 4a381ddc764a xen/arch/ia64/vmx/vlsapic.c > --- a/xen/arch/ia64/vmx/vlsapic.c Tue Sep 16 21:25:30 2008 +0900 > +++ b/xen/arch/ia64/vmx/vlsapic.c Wed Sep 17 11:44:04 2008 +0900 > @@ -43,6 +43,7 @@ > #include <asm/vmx_platform.h> > #include <asm/viosapic.h> > #include <asm/vlsapic.h> > +#include <asm/vmx_phy_mode.h> > #include <asm/linux/jiffies.h> > #include <xen/domain.h> > #include <asm/hvm/support.h> > @@ -614,9 +615,8 @@ struct vcpu *lid_to_vcpu(struct domain * > * To inject INIT to guest, we must set the PAL_INIT entry > * and set psr to switch to physical mode > */ > -#define PAL_INIT_ENTRY 0x80000000ffffffa0 > #define PSR_SET_BITS (IA64_PSR_DT | IA64_PSR_IT | IA64_PSR_RT | \ > - IA64_PSR_IC | IA64_PSR_RI) > + IA64_PSR_IC | IA64_PSR_RI | IA64_PSR_I | IA64_PSR_CPL) > > static void vmx_inject_guest_pal_init(VCPU *vcpu) > { > diff -r 4a381ddc764a xen/arch/ia64/vmx/vmx_phy_mode.c > --- a/xen/arch/ia64/vmx/vmx_phy_mode.c Tue Sep 16 21:25:30 2008 +0900 > +++ b/xen/arch/ia64/vmx/vmx_phy_mode.c Wed Sep 17 11:44:04 2008 +0900 > @@ -283,6 +283,13 @@ switch_mm_mode(VCPU *vcpu, IA64_PSR old_ > // old_psr.val, new_psr.val); > break; > default: > + /* Switch to physical mode when injecting PAL_INIT */ > + if (MODE_IND(new_psr) == 0 && > + vcpu_regs(vcpu)->cr_iip == PAL_INIT_ENTRY) { > + vcpu->arch.arch_vmx.mmu_mode = VMX_MMU_PHY_DT; > + switch_to_physical_rid(vcpu); > + break; > + } > /* Sanity check */ > panic_domain(vcpu_regs(vcpu), > "Unexpected virtual <--> physical mode transition, " I think this hunk corresponds to what you meant by 'Unexpected virtual'. Why not set mm_switch_table[][0] to SW_2P_DT? any reason? > diff -r 4a381ddc764a xen/include/asm-ia64/vmx_phy_mode.h > --- a/xen/include/asm-ia64/vmx_phy_mode.h Tue Sep 16 21:25:30 2008 +0900 > +++ b/xen/include/asm-ia64/vmx_phy_mode.h Wed Sep 17 11:44:04 2008 +0900 > @@ -96,4 +96,6 @@ extern void physical_tlb_miss(VCPU *vcpu > #define VMX_MMU_PHY_D 1 /* Half physical: it=1,dt=0 */ > #define VMX_MMU_PHY_DT 3 /* Full physical mode: it=0,dt=0 */ > > +#define PAL_INIT_ENTRY 0x80000000ffffffa0 > + > #endif /* _PHY_MODE_H_ */ > _______________________________________________ > Xen-ia64-devel mailing list > Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-ia64-devel -- yamahata _______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ia64-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |