I have no idea why it occurs, but I observed the same phenomenon
on AMD 486 and repaired it by:
linux/arch/i386/mm/init.c:
current->mm->mmap->vm_start += PAGE_SIZE;
__asm__ __volatile__(
"movb %0,%1 ; movb %1,%0"
:"=m" (*(char *) __va(0)),
"=q" (tmp_reg)
:/* no inputs */
:"memory");
+#ifndef NO_ANK_FIX
+ __asm__ __volatile__ ("jmp 1f ; 1:");
+#endif
pg0[0] = old;
local_flush_tlb();
Apparently, it is a problem with tlb/command pipeline/hell-knows-more
Alexey Kuznetsov.