commit 554cf9ac8ff4af8eedd0f5896dfa5d2e5f61038d Author: Matthew Dillon <dil...@apollo.backplane.com> Date: Thu Aug 23 20:44:53 2012 -0700
kernel - Fix pmap_remove() issue. * When the inner loop of pmap_remove() broke out due to pmap_remove_pte() blocking it 'jumped' the sindex to pdnxt, thus any remaining pages in that page table page would get skipped. * pmap_remove_pte() and friends used to return non-zero if they 'blocked'. Unfortunately they could actually block whether they returned 0 or non-zero, causing the problem. Remove the check entirely. * Adjust misc functions which we no longer need the return value for. * I don't know if this had anything to do with the wire_count panic. The failure mode should have been caught by numerous other assertions in the code but wasn't. get_ptbase() relies on a test of pmap->pm_cached to determine if a page directory page mapping changes so it should not have been possible for it to continue the loop and access a stale ptep. If it were possible it might account for a wire_count panic later on but it doesn't seem like it should be possible. Summary of changes: sys/platform/pc32/i386/pmap.c | 94 +++++++++++++++++++--------------------- 1 files changed, 45 insertions(+), 49 deletions(-) http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/554cf9ac8ff4af8eedd0f5896dfa5d2e5f61038d -- DragonFly BSD source repository