Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Jun 2006 19:36:07 -0400 (EDT)
From:      "Andrew R. Reiter" <arr@watson.org>
To:        Kip Macy <kmacy@freebsd.org>
Cc:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   Re: PERFORCE change 99646 for review
Message-ID:  <20060619193506.F40529@fledge.watson.org>
In-Reply-To: <200606192330.k5JNUMVL029897@repoman.freebsd.org>
References:  <200606192330.k5JNUMVL029897@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 19 Jun 2006, Kip Macy wrote:

:http://perforce.freebsd.org/chv.cgi?CH=99646
:
:Change 99646 by kmacy@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@watson.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060619193506.F40529>