--- old/arch/ia64/kernel/ivt.S 2006-03-09 13:38:21.000000000 +0100 +++ new/arch/ia64/kernel/ivt.S 2006-03-09 13:50:48.000000000 +0100 @@ -571,11 +571,18 @@ ENTRY(dirty_bit) (p6) itc.d r25 // install updated PTE ;; /* - * Tell the assemblers dependency-violation checker that the above "itc" instructions - * cannot possibly affect the following loads: + * Make sure that the "itc" has been performed before we re-read the PTE. + * (No, we are not going to use the freshly inserted translation for the next "ld".) + * We have to make sure the freshly inserted translation can be hit by an external + * purge request before we initiate the PTE re-fetch. + * A simple ";;" does not make sure that the purges / invalidations go all the way + * down (in case of page size of 64 K, up to 16 DTL0 entries may be purged and all + * the L1D cache lines brought in via these translations need to be invalidated). + */ + srlz.d + /* + * No need for ";;", the following "ld" can be in the same group as "srlz.d" is. */ - dv_serialize_data - ld8 r18=[r17] // read PTE again ;; cmp.eq p6,p7=r18,r25 // is it same as the newly installed