I have got a concern abut the synchronization. (It is the same for the original code.) The following sequence: itc.d r25 // install updated PTE ;; ld8 r18=[r17] // read PTE again ;; cmp.eq p6,p7=r18,r25 // is it same as the newly installed I think is not safe enough. The ";;" orders dependencies like R-A-W only, not the relatively slow cache & tlb coherency operations, like "itc". This is why I think we need my (first) patch. I can imagine the following scenario: 1. "itc.d r25" is issued. It is not globally performed (an external purge request would miss it). 2. "ld8 r18=[r17]" is executed - we read back the good value. (Even an L3 cache miss can be quickly prepared on multi core / threaded processors by a cache intervention.) 3. Someone tears down the same PTE: s/he clears it, then 4. s/he issues a global purge - we miss it, because our "itc.d r25" still has not been globally performed. 5. Finally "itc.d r25" is globally performed (e.g. it is in our DTLB1). 6. "cmp" compares a stale value in r18 and our freshly inserted translation has missed the purge. This is an example for the dirty bit handler, the others are similar. BTW cannot take we this good opportunity to make the code somewhat more readable? (See my second patch.) Thanks, Zoltan Menyhart