[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [IA64] Handle nested dtlb miss in vmx_dirty_bit
# HG changeset patch # User Alex Williamson <alex.williamson@xxxxxx> # Date 1203096840 25200 # Node ID 2c9d0eb5a855ae850b7765ac01e1bda638aefcbb # Parent 29faad225cbbdb63438088f02361f260ffab807a [IA64] Handle nested dtlb miss in vmx_dirty_bit Although I believe that tpa in vmx_dirty_bit never generate a nested dtlb miss, this patch ensures the fault case. Confirmed the additional code in this patch works fine by means of a debugger. Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx> --- xen/arch/ia64/vmx/vmx_ivt.S | 41 ++++++++++++++++++++++++++++++++++++----- 1 files changed, 36 insertions(+), 5 deletions(-) diff -r 29faad225cbb -r 2c9d0eb5a855 xen/arch/ia64/vmx/vmx_ivt.S --- a/xen/arch/ia64/vmx/vmx_ivt.S Thu Feb 14 12:37:15 2008 -0700 +++ b/xen/arch/ia64/vmx/vmx_ivt.S Fri Feb 15 10:34:00 2008 -0700 @@ -410,6 +410,11 @@ END(vmx_alt_dtlb_miss) // 0x1400 Entry 5 (size 64 bundles) Data nested TLB (6,45) ENTRY(vmx_nested_dtlb_miss) VMX_DBG_FAULT(5) + mov r29=cr.ipsr + mov b0=r30 + ;; + tbit.z p6,p0=r29,IA64_PSR_VM_BIT +(p6)br.sptk b0 // return to the continuation point VMX_FAULT(5) END(vmx_nested_dtlb_miss) @@ -433,16 +438,42 @@ END(vmx_dkey_miss) ///////////////////////////////////////////////////////////////////////////////////////// // 0x2000 Entry 8 (size 64 bundles) Dirty-bit (54) ENTRY(vmx_dirty_bit) - mov r29=cr.ipsr + VMX_DBG_FAULT(8) + mov r28=cr.ipsr mov r31=pr ;; mov r19=cr.ifa - tbit.z p6,p0=r29,IA64_PSR_VM_BIT -(p6)br.spnt.many vmx_fault_8 - ;; - tpa r19=r19 + tbit.z p6,p0=r28,IA64_PSR_VM_BIT +(p6)br.spnt.few vmx_fault_8 + // Prepare for nested dtlb miss + mov r22=b0 + dep.z r29=r28,IA64_PSR_VM_BIT,1 + ;; + mov cr.ipsr=r29 // ipsr.vm=0 + movl r30=dirty_bit_tpa_fail + ;; + tpa r19=r19 // possibly nested dtlb miss? + mov cr.ipsr=r28 // ipsr.vm=1 br.sptk vmx_dispatch_shadow_fault VMX_FAULT(8) +dirty_bit_tpa_fail: + // Resume & Retry + mov cr.ipsr=r28 // ipsr.vm=1 + mov r17=cr.isr + mov r23=r31 +// mov r22=b0 // b0 is clobbered in vmx_nested_dtlb_miss + adds r16=IA64_VPD_BASE_OFFSET,r21 + ;; + ld8 r18=[r16] + ;; + adds r19=VPD(VPSR),r18 + movl r20=__vsa_base + ;; + ld8 r19=[r19] + ld8 r20=[r20] + ;; + br.sptk ia64_vmm_entry + ;; END(vmx_dirty_bit) .org vmx_ia64_ivt+0x2400 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |