svn commit: r224360 - stable/7/sys/sparc64/sparc64
Marius Strobl
marius at FreeBSD.org
Mon Jul 25 18:25:30 UTC 2011
Author: marius
Date: Mon Jul 25 18:25:30 2011
New Revision: 224360
URL: http://svn.freebsd.org/changeset/base/224360
Log:
MFC: r223347
As astopgap minimize the sched_lock coverage in pmap_activate() in order
to reduce lock contention.
Modified:
stable/7/sys/sparc64/sparc64/pmap.c
Directory Properties:
stable/7/sys/ (props changed)
stable/7/sys/cddl/contrib/opensolaris/ (props changed)
stable/7/sys/contrib/dev/acpica/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
Modified: stable/7/sys/sparc64/sparc64/pmap.c
==============================================================================
--- stable/7/sys/sparc64/sparc64/pmap.c Mon Jul 25 18:24:17 2011 (r224359)
+++ stable/7/sys/sparc64/sparc64/pmap.c Mon Jul 25 18:25:30 2011 (r224360)
@@ -1988,11 +1988,10 @@ pmap_activate(struct thread *td)
struct pmap *pm;
int context;
+ critical_enter();
vm = td->td_proc->p_vmspace;
pm = vmspace_pmap(vm);
- mtx_lock_spin(&sched_lock);
-
context = PCPU_GET(tlb_ctx);
if (context == PCPU_GET(tlb_ctx_max)) {
tlb_flush_user();
@@ -2000,17 +1999,18 @@ pmap_activate(struct thread *td)
}
PCPU_SET(tlb_ctx, context + 1);
+ mtx_lock_spin(&sched_lock);
pm->pm_context[curcpu] = context;
pm->pm_active |= PCPU_GET(cpumask);
PCPU_SET(pmap, pm);
+ mtx_unlock_spin(&sched_lock);
stxa(AA_DMMU_TSB, ASI_DMMU, pm->pm_tsb);
stxa(AA_IMMU_TSB, ASI_IMMU, pm->pm_tsb);
stxa(AA_DMMU_PCXR, ASI_DMMU, (ldxa(AA_DMMU_PCXR, ASI_DMMU) &
TLB_CXR_PGSZ_MASK) | context);
flush(KERNBASE);
-
- mtx_unlock_spin(&sched_lock);
+ critical_exit();
}
vm_offset_t
More information about the svn-src-stable
mailing list