PERFORCE change 99646 for review
Andrew R. Reiter
arr at watson.org
Mon Jun 19 23:36:09 UTC 2006
On Mon, 19 Jun 2006, Kip Macy wrote:
:http://perforce.freebsd.org/chv.cgi?CH=99646
:
:Change 99646 by kmacy at kmacy_storage:sun4v_work_sleepq on 2006/06/19 23:29:26
:
: convert pcpu allproc locks to sx to avoid having to fix cases where
: sx locks are being acquired afterwards
: add 2 missed unlocks
Nice. Good thought. I have seen the recent "benchmark" SMP emails and am
not aggro like DT, so I don't care about too much detail; however, do you
believe the switch from straight mutex locks to shared/exclusive locks
will assist in some performance areas?
Thanks for your work,
Andrew
:
:Affected files ...
:
:.. //depot/projects/kmacy_sun4v/src/sys/fs/pseudofs/pseudofs_vnops.c#4 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/imgact_elf.c#4 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/init_main.c#7 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/kern_descrip.c#5 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/kern_exit.c#6 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/kern_fork.c#6 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/kern_ktrace.c#5 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/kern_proc.c#5 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/kern_resource.c#6 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/kern_sig.c#9 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/sched_4bsd.c#9 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/subr_pcpu.c#4 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/subr_witness.c#7 edit
:.. //depot/projects/kmacy_sun4v/src/sys/kern/sys_process.c#6 edit
:.. //depot/projects/kmacy_sun4v/src/sys/sun4v/include/pcpu.h#15 edit
:.. //depot/projects/kmacy_sun4v/src/sys/sys/pcpu.h#4 edit
:.. //depot/projects/kmacy_sun4v/src/sys/sys/proc.h#7 edit
:.. //depot/projects/kmacy_sun4v/src/sys/vm/vm_glue.c#7 edit
:.. //depot/projects/kmacy_sun4v/src/sys/vm/vm_meter.c#5 edit
:.. //depot/projects/kmacy_sun4v/src/sys/vm/vm_pageout.c#4 edit
:
:Differences ...
:
:==== //depot/projects/kmacy_sun4v/src/sys/fs/pseudofs/pseudofs_vnops.c#4 (text+ko) ====
:
:@@ -568,18 +568,18 @@
: /* next process */
: if (*p == NULL) {
: *p = LIST_FIRST(&(*pc)->pc_allproc);
:- PCPU_PROC_LOCK(*pc);
:+ PCPU_PROC_RLOCK(*pc);
: } else if ((LIST_NEXT(*p, p_list) == NULL) && (SLIST_NEXT(*pc, pc_allcpu) != NULL)) {
:- PCPU_PROC_UNLOCK(*pc);
:+ PCPU_PROC_RUNLOCK(*pc);
: *pc = SLIST_NEXT(*pc, pc_allcpu);
:- PCPU_PROC_LOCK(*pc);
:+ PCPU_PROC_RLOCK(*pc);
: *p = LIST_FIRST(&(*pc)->pc_allproc);
: } else {
: *p = LIST_NEXT(*p, p_list);
: }
: /* out of processes: next node */
: if (*p == NULL) {
:- PCPU_PROC_UNLOCK(*pc);
:+ PCPU_PROC_RUNLOCK(*pc);
: *pn = (*pn)->pn_next;
: }
: }
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/imgact_elf.c#4 (text+ko) ====
:
:@@ -147,14 +147,14 @@
:
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
:-
: if (p->p_sysent == entry->sysvec) {
: rval = TRUE;
: break;
: }
: }
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
:
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/init_main.c#7 (text+ko) ====
:
:@@ -539,12 +539,12 @@
:
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: microuptime(&p->p_stats->p_start);
: p->p_rux.rux_runtime = 0;
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: PCPU_SET(switchtime, cpu_ticks());
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/kern_descrip.c#5 (text+ko) ====
:
:@@ -2357,7 +2357,7 @@
:
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: fdp = fdhold(p);
: if (fdp == NULL)
:@@ -2379,7 +2379,7 @@
: while (nrele--)
: vrele(olddp);
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: if (rootvnode == olddp) {
:@@ -2459,7 +2459,7 @@
: xf.xf_size = sizeof(xf);
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: if (p->p_state == PRS_NEW)
: continue;
:@@ -2496,7 +2496,7 @@
: if (error)
: break;
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: return (error);
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/kern_exit.c#6 (text+ko) ====
:
:@@ -403,15 +403,10 @@
: * Remove proc from allproc queue and pidhash chain.
: * Place onto zombproc. Unlink from parent's child list.
: */
:- if (p->p_pcpu == NULL)
:- panic("process: %d has null pcpu pointer", p->p_pid);
:- if (!mtx_initialized(&(p->p_pcpu->pc_allproc_lock)))
:- panic("null allproc lock on %d", p->p_pcpu->pc_cpuid);
:-
:- PCPU_PROC_LOCK(p->p_pcpu);
:+ PCPU_PROC_WLOCK(p->p_pcpu);
: LIST_REMOVE(p, p_list);
: LIST_INSERT_HEAD(&p->p_pcpu->pc_zombproc, p, p_list);
:- PCPU_PROC_UNLOCK(p->p_pcpu);
:+ PCPU_PROC_WUNLOCK(p->p_pcpu);
:
: mtx_lock(&pidhash_lock);
: LIST_REMOVE(p, p_hash);
:@@ -770,9 +765,9 @@
: * we have an exclusive reference.
: */
:
:- PCPU_PROC_LOCK(p->p_pcpu);
:+ PCPU_PROC_WLOCK(p->p_pcpu);
: LIST_REMOVE(p, p_list); /* off zombproc */
:- PCPU_PROC_UNLOCK(p->p_pcpu);
:+ PCPU_PROC_WUNLOCK(p->p_pcpu);
:
: mtx_lock(&pidhash_lock);
: LIST_REMOVE(p, p_hash); /* off zombproc */
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/kern_fork.c#6 (text+ko) ====
:
:@@ -371,7 +371,7 @@
: * than trypid, so we can avoid checking for a while.
: */
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
:
: p2 = LIST_FIRST(&pc->pc_allproc);
: again:
:@@ -385,7 +385,7 @@
: trypid++;
: if (trypid >= pidchecked) {
: PROC_UNLOCK(p2);
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: goto retry;
: }
: }
:@@ -409,7 +409,7 @@
: p2 = LIST_FIRST(&pc->pc_zombproc);
: goto again;
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: }
: mtx_unlock(&pidalloc_lock);
:@@ -429,9 +429,9 @@
: AUDIT_ARG(pid, p2->p_pid);
: p2->p_pcpu = pcpup;
:
:- PCPU_PROC_LOCK(p2->p_pcpu);
:+ PCPU_PROC_WLOCK(p2->p_pcpu);
: LIST_INSERT_HEAD(&p2->p_pcpu->pc_allproc, p2, p_list);
:- PCPU_PROC_UNLOCK(p2->p_pcpu);
:+ PCPU_PROC_WUNLOCK(p2->p_pcpu);
:
: mtx_lock(&pidhash_lock);
: LIST_INSERT_HEAD(PIDHASH(p2->p_pid), p2, p_hash);
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/kern_ktrace.c#5 (text+ko) ====
:
:@@ -640,7 +640,7 @@
: if (ops == KTROP_CLEARFILE) {
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: PROC_LOCK(p);
: if (p->p_tracevp == vp) {
:@@ -664,7 +664,7 @@
: } else
: PROC_UNLOCK(p);
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: goto done;
:@@ -983,7 +983,7 @@
: cred = NULL;
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: PROC_LOCK(p);
: if (p->p_tracevp == vp) {
:@@ -1001,7 +1001,7 @@
: cred = NULL;
: }
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
:
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/kern_proc.c#5 (text+ko) ====
:
:@@ -110,9 +110,10 @@
: void
: procinit()
: {
:-
:+
: sx_init(&allpcpu_lock, "allpcpu");
: sx_init(&proctree_lock, "proctree");
:+ sx_init(&pcpu_find(0)->pc_allproc_lock, "cpu allproc");
: mtx_init(&ppeers_lock, "p_peers", NULL, MTX_DEF);
: mtx_init(&pidalloc_lock, "pidalloc", NULL, MTX_DEF);
: mtx_init(&pidhash_lock, "pidhash", NULL, MTX_DEF);
:@@ -1002,7 +1003,7 @@
: sx_slock(&allpcpu_lock);
: for (doingzomb = 0 ; doingzomb < 2 ; doingzomb++) {
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: if (!doingzomb)
: p = LIST_FIRST(&pc->pc_allproc);
: else
:@@ -1105,12 +1106,12 @@
:
: error = sysctl_out_proc(p, req, flags | doingzomb);
: if (error) {
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: sx_sunlock(&allpcpu_lock);
: return (error);
: }
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: }
: sx_sunlock(&allpcpu_lock);
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/kern_resource.c#6 (text+ko) ====
:
:@@ -144,7 +144,7 @@
: uap->who = td->td_ucred->cr_uid;
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: PROC_LOCK(p);
: if (!p_cansee(td, p) &&
:@@ -154,7 +154,7 @@
: }
: PROC_UNLOCK(p);
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: break;
:@@ -236,9 +236,8 @@
: uap->who = td->td_ucred->cr_uid;
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
:-
: PROC_LOCK(p);
: if (p->p_ucred->cr_uid == uap->who &&
: !p_cansee(td, p)) {
:@@ -247,6 +246,7 @@
: }
: PROC_UNLOCK(p);
: }
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: break;
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/kern_sig.c#9 (text+ko) ====
:
:@@ -1648,7 +1648,7 @@
: */
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: PROC_LOCK(p);
: if (p->p_pid <= 1 || p->p_flag & P_SYSTEM ||
:@@ -1663,7 +1663,7 @@
: }
: PROC_UNLOCK(p);
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: } else {
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/sched_4bsd.c#9 (text+ko) ====
:
:@@ -392,7 +392,7 @@
: realstathz = stathz ? stathz : hz;
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: /*
: * Prevent state changes and protect run queue.
:@@ -481,7 +481,7 @@
: } /* end of thread loop */
: mtx_unlock_spin(&sched_lock);
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: } /* end of process loop */
: sx_sunlock(&allpcpu_lock);
: }
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/subr_pcpu.c#4 (text+ko) ====
:
:@@ -75,7 +75,8 @@
: cpuid_to_pcpu[cpuid] = pcpu;
: LIST_INIT(&pcpu->pc_allproc);
: LIST_INIT(&pcpu->pc_zombproc);
:- mtx_init(&pcpu->pc_allproc_lock, "cpu allproc", NULL, MTX_DEF);
:+ if (cpuid != 0)
:+ sx_init(&pcpu->pc_allproc_lock, "cpu allproc");
: SLIST_INSERT_HEAD(&cpuhead, pcpu, pc_allcpu);
: cpu_pcpu_init(pcpu, cpuid, size);
: }
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/subr_witness.c#7 (text+ko) ====
:
:@@ -275,13 +275,13 @@
: */
: { "proctree", &lock_class_sx },
: { "allpcpu", &lock_class_sx },
:+ { "cpu allproc", &lock_class_sx },
: { NULL, NULL },
: /*
: * Various mutexes
: */
: { "Giant", &lock_class_mtx_sleep },
: { "pidalloc", &lock_class_mtx_sleep },
:- { "cpu allproc", &lock_class_mtx_sleep },
: { "pidhash", &lock_class_mtx_sleep },
: { "filedesc structure", &lock_class_mtx_sleep },
: { "pipe mutex", &lock_class_mtx_sleep },
:
:==== //depot/projects/kmacy_sun4v/src/sys/kern/sys_process.c#6 (text+ko) ====
:
:@@ -532,7 +532,7 @@
: /* this is slow, should be optimized */
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: PROC_LOCK(p);
: mtx_lock_spin(&sched_lock);
:@@ -545,6 +545,7 @@
: break; /* proc lock held */
: PROC_UNLOCK(p);
: }
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: if (p == NULL) {
:
:==== //depot/projects/kmacy_sun4v/src/sys/sun4v/include/pcpu.h#15 (text+ko) ====
:
:@@ -79,7 +79,7 @@
: struct rwindow pc_tsbwbuf[2]; \
: u_int pc_node; \
: uint16_t pc_cpulist[MAXCPU]; \
:- uint64_t pad[6];
:+ uint64_t pad[7];
:
: /* XXX SUN4V_FIXME - as we access the *_ra and *_size fields in quick
: * succession we _really_ want them to be L1 cache line size aligned
:
:==== //depot/projects/kmacy_sun4v/src/sys/sys/pcpu.h#4 (text+ko) ====
:
:@@ -43,12 +43,13 @@
:
: #include <sys/queue.h>
: #include <sys/vmmeter.h>
:+#include <sys/sx.h>
: #include <machine/pcpu.h>
:
: LIST_HEAD(proclist, proc);
: struct pcb;
: struct thread;
:-
:+struct sx;
: /*
: * This structure maps out the global data that needs to be kept on a
: * per-cpu basis. The members are accessed via the PCPU_GET/SET/PTR
:@@ -68,7 +69,7 @@
: cpumask_t pc_other_cpus; /* Mask of all other cpus */
: SLIST_ENTRY(pcpu) pc_allcpu;
: struct lock_list_entry *pc_spinlocks;
:- struct mtx pc_allproc_lock; /* lock for pcpu process list */
:+ struct sx pc_allproc_lock; /* lock for pcpu process list */
: struct proclist pc_zombproc;
: struct proclist pc_allproc;
: #ifdef KTR_PERCPU
:
:==== //depot/projects/kmacy_sun4v/src/sys/sys/proc.h#7 (text+ko) ====
:
:@@ -623,8 +623,10 @@
: #define PROC_LOCK_ASSERT(p, type) mtx_assert(&(p)->p_mtx, (type))
:
: /* lock pcpu process list */
:-#define PCPU_PROC_LOCK(pc) mtx_lock(&(pc)->pc_allproc_lock)
:-#define PCPU_PROC_UNLOCK(pc) mtx_unlock(&(pc)->pc_allproc_lock)
:+#define PCPU_PROC_RLOCK(pc) sx_slock(&(pc)->pc_allproc_lock)
:+#define PCPU_PROC_RUNLOCK(pc) sx_sunlock(&(pc)->pc_allproc_lock)
:+#define PCPU_PROC_WLOCK(pc) sx_xlock(&(pc)->pc_allproc_lock)
:+#define PCPU_PROC_WUNLOCK(pc) sx_xunlock(&(pc)->pc_allproc_lock)
:
:
: /* Lock and unlock a process group. */
:
:==== //depot/projects/kmacy_sun4v/src/sys/vm/vm_glue.c#7 (text+ko) ====
:
:@@ -678,7 +678,7 @@
: ppri = INT_MIN;
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: if (p->p_sflag & (PS_INMEM | PS_SWAPPINGOUT | PS_SWAPPINGIN))
: continue;
:@@ -709,7 +709,7 @@
: }
: mtx_unlock_spin(&sched_lock);
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
:
:@@ -808,7 +808,7 @@
: retry:
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
:
: struct vmspace *vm;
:@@ -930,7 +930,7 @@
: PROC_UNLOCK(p);
: vm_map_unlock(&vm->vm_map);
: vmspace_free(vm);
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: sx_sunlock(&allpcpu_lock);
: goto retry;
: }
:@@ -944,7 +944,7 @@
: vmspace_free(vm);
: continue;
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: /*
:
:==== //depot/projects/kmacy_sun4v/src/sys/vm/vm_meter.c#5 (text+ko) ====
:
:@@ -143,7 +143,7 @@
: */
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: if (p->p_flag & P_SYSTEM)
: continue;
:@@ -209,7 +209,7 @@
: if (paging)
: totalp->t_pw++;
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: /*
:
:==== //depot/projects/kmacy_sun4v/src/sys/vm/vm_pageout.c#4 (text+ko) ====
:
:@@ -1224,7 +1224,7 @@
: bigsize = 0;
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: int breakout;
:
:@@ -1281,7 +1281,7 @@
: } else
: PROC_UNLOCK(p);
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: if (bigproc != NULL) {
:@@ -1576,7 +1576,7 @@
:
: sx_slock(&allpcpu_lock);
: SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
:- PCPU_PROC_LOCK(pc);
:+ PCPU_PROC_RLOCK(pc);
: LIST_FOREACH(p, &pc->pc_allproc, p_list) {
: vm_pindex_t limit, size;
:
:@@ -1630,7 +1630,7 @@
: &p->p_vmspace->vm_map, limit);
: }
: }
:- PCPU_PROC_UNLOCK(pc);
:+ PCPU_PROC_RUNLOCK(pc);
: }
: sx_sunlock(&allpcpu_lock);
: }
:
:
--
arr at watson.org
More information about the p4-projects
mailing list