@@ -686,6 +686,9 @@ ENTRY(copy_user_page_asm)
*/
addib,COND(>),n -1, %r1, 1b /* bundle 10 */
ldd 0(%r29), %r19 /* start next loads */
+ /* move back to the page for the purges below */
+ ldo -256(%r29), %r29
+ ldo -256(%r28), %r28
#else
ldi (PAGE_SIZE / 64), %r1
@@ -735,6 +738,19 @@ ENTRY(copy_user_page_asm)
addib,COND(>) -1, %r1,1b
ldo 64(%r29), %r29
+ /* move back to the page for the purges below */
+ ldo -128(%r28), %r28
+ ldo -128(%r29), %r29
+#endif
+
+#ifdef CONFIG_PA20
+ pdtlb,l 0(%r28)
+ pdtlb,l 0(%r29)
+#else
+ tlb_lock %r20,%r21,%r22
+ pdtlb 0(%r28)
+ pdtlb 0(%r29)
+ tlb_unlock %r20,%r21,%r22
#endif
bv %r0(%r2)
@@ -799,6 +815,7 @@ ENTRY(clear_user_page_asm)
std %r0, 120(%r28)
addib,COND(>) -1, %r1, 1b
ldo 128(%r28), %r28
+ ldo -256(%r28),%r28 /* move back to the same page */
#else /* ! CONFIG_64BIT */
ldi (PAGE_SIZE / 64), %r1
@@ -821,8 +838,17 @@ ENTRY(clear_user_page_asm)
stw %r0, 60(%r28)
addib,COND(>) -1, %r1, 1b
ldo 64(%r28), %r28
+ ldo -128(%r28),%r28 /* move back to the same page */
#endif /* CONFIG_64BIT */
+#ifdef CONFIG_PA20
+ pdtlb,l 0(%r28)
+#else
+ tlb_lock %r20,%r21,%r22
+ pdtlb 0(%r28)
+ tlb_unlock %r20,%r21,%r22
+#endif
+
bv %r0(%r2)
nop
.exit