Author: marius
Date: Fri Oct 29 20:51:30 2010
New Revision: 214528
URL: http://svn.freebsd.org/changeset/base/214528

Log:
  - When resetting pm_active and pm_context of a pmap in pmap_pinit() we
    need locking as otherwise we may race against the other parts of the
    MD code which expects a consistent state of these. While at it move
    the resetting of the pmap before entering it in the TSB.
  - Spell a 0 as TLB_CTX_KERNEL.

Modified:
  head/sys/sparc64/sparc64/pmap.c

Modified: head/sys/sparc64/sparc64/pmap.c
==============================================================================
--- head/sys/sparc64/sparc64/pmap.c     Fri Oct 29 20:50:59 2010        
(r214527)
+++ head/sys/sparc64/sparc64/pmap.c     Fri Oct 29 20:51:30 2010        
(r214528)
@@ -1065,7 +1065,7 @@ pmap_pinit0(pmap_t pm)
 
        PMAP_LOCK_INIT(pm);
        for (i = 0; i < MAXCPU; i++)
-               pm->pm_context[i] = 0;
+               pm->pm_context[i] = TLB_CTX_KERNEL;
        pm->pm_active = 0;
        pm->pm_tsb = NULL;
        pm->pm_tsb_obj = NULL;
@@ -1103,6 +1103,12 @@ pmap_pinit(pmap_t pm)
        if (pm->pm_tsb_obj == NULL)
                pm->pm_tsb_obj = vm_object_allocate(OBJT_PHYS, TSB_PAGES);
 
+       mtx_lock_spin(&sched_lock);
+       for (i = 0; i < MAXCPU; i++)
+               pm->pm_context[i] = -1;
+       pm->pm_active = 0;
+       mtx_unlock_spin(&sched_lock);
+
        VM_OBJECT_LOCK(pm->pm_tsb_obj);
        for (i = 0; i < TSB_PAGES; i++) {
                m = vm_page_grab(pm->pm_tsb_obj, i, VM_ALLOC_NOBUSY |
@@ -1114,9 +1120,6 @@ pmap_pinit(pmap_t pm)
        VM_OBJECT_UNLOCK(pm->pm_tsb_obj);
        pmap_qenter((vm_offset_t)pm->pm_tsb, ma, TSB_PAGES);
 
-       for (i = 0; i < MAXCPU; i++)
-               pm->pm_context[i] = -1;
-       pm->pm_active = 0;
        bzero(&pm->pm_stats, sizeof(pm->pm_stats));
        return (1);
 }
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to