There is an SMP-specific bug in pmap_remove_all. Specifically, it may fail to perform a TLB invalidation on the other processor(s) when one is in fact necessary.
I don't have an SMP to test this, so would some of you with SMPs please do a sanity test on this patch? In effect, the patch disables an optimization for uniprocessors that doesn't work under our current SMP code. I will commit it as soon as I hear a few positive reports. Thanks, Alan Index: pmap.c =================================================================== RCS file: /home/ncvs/src/sys/i386/i386/pmap.c,v retrieving revision 1.223 diff -c -r1.223 pmap.c *** pmap.c 1999/02/19 14:25:33 1.223 --- pmap.c 1999/03/04 06:52:21 *************** *** 1991,2001 **** --- 1991,2005 ---- if (pmap_track_modified(pv->pv_va)) vm_page_dirty(ppv->pv_vm_page); } + #ifdef SMP + update_needed = 1; + #else if (!update_needed && ((!curproc || (vmspace_pmap(curproc->p_vmspace) == pv->pv_pmap)) || (pv->pv_pmap == kernel_pmap))) { update_needed = 1; } + #endif TAILQ_REMOVE(&pv->pv_pmap->pm_pvlist, pv, pv_plist); TAILQ_REMOVE(&ppv->pv_list, pv, pv_list); To Unsubscribe: send mail to majord...@freebsd.org with "unsubscribe freebsd-current" in the body of the message