On Thu, Mar 20, 2008 at 05:52:54PM +1100, Simon Horman wrote:
> Index: xen-unstable.hg/xen/arch/ia64/xen/xenasm.S
> ===================================================================
> --- xen-unstable.hg.orig/xen/arch/ia64/xen/xenasm.S 2008-04-22
> 11:24:46.000000000 +1000
> +++ xen-unstable.hg/xen/arch/ia64/xen/xenasm.S 2008-04-22
> 16:56:00.000000000 +1000
> @@ -195,6 +195,193 @@ GLOBAL_ENTRY(ia64_new_rr7)
...
> +GLOBAL_ENTRY(ia64_new_rr7_efi)
...
> + // privregs / mapped_regs
> + cmp.eq p7,p0=r0,in2
> +(p7) br.cond.sptk ia64_new_rr7_efi_privregs_not_mapped
> + or loc7 = r26,loc7 // construct PA | page properties
> + mov r22=IA64_TR_VPD
> + mov r24=IA64_TR_MAPPED_REGS
> + mov r23=IA64_GRANULE_SHIFT<<2
> + ;;
> + ptr.i in2,r23
> + ;;
> + srlz.i
> + ;;
> + mov cr.itir=r23
> + mov cr.ifa=in2
> + ;;
> + itr.i itr[r22]=loc7
> + ;;
> + srlz.i
> +ia64_new_rr7_efi_privregs_not_mapped:
VPD must be pinned not only by itr[], but also dtr[] too.
SDM 2.2 vol2 says that VPD must be pinned down by
both ITR and DTR.
See the pal call section, PAL_VP_REGISTER, PAL_VP_RESTORE,
PAL_VP_SAVE, PAL_VPS_RESTORE, PAL_VPS_SAVE.
It's very unintuitive to pin down by ITR.
And I think ia64_do_tlb_purge() have to purge not only dtr[],
but also itr[IA64_TR_VPD].
--
yamahata
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|