Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Jan 2006 02:31:02 GMT
From:      Alan Cox <alc@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 90443 for review
Message-ID:  <200601270231.k0R2V2MD067021@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=90443

Change 90443 by alc@alc_home on 2006/01/27 02:30:26

	Utilize the new VM_PAGE_*() macros to minimize the differences with
	HEAD.

Affected files ...

.. //depot/projects/superpages/src/sys/kern/vfs_bio.c#5 edit
.. //depot/projects/superpages/src/sys/vm/vm_contig.c#7 edit
.. //depot/projects/superpages/src/sys/vm/vm_fault.c#4 edit
.. //depot/projects/superpages/src/sys/vm/vm_page.c#11 edit
.. //depot/projects/superpages/src/sys/vm/vm_page.h#5 edit
.. //depot/projects/superpages/src/sys/vm/vm_pageout.c#6 edit
.. //depot/projects/superpages/src/sys/vm/vm_pageq.c#7 edit

Differences ...

==== //depot/projects/superpages/src/sys/kern/vfs_bio.c#5 (text+ko) ====

@@ -2864,7 +2864,7 @@
 				 * page daemon?
 				 */
 				if ((curproc != pageproc) &&
-				    m->queue == PQ_CACHE &&
+				    (VM_PAGE_INQUEUE1(m, PQ_CACHE)) &&
 				    ((cnt.v_free_count + cnt.v_cache_count) <
 			 		(cnt.v_free_min + cnt.v_cache_min))) {
 					pagedaemon_wakeup();

==== //depot/projects/superpages/src/sys/vm/vm_contig.c#7 (text+ko) ====

@@ -143,7 +143,7 @@
 		if ((m->flags & PG_MARKER) != 0)
 			continue;
 
-		KASSERT(m->queue == queue,
+		KASSERT(VM_PAGE_INQUEUE2(m, queue),
 		    ("vm_contig_launder: page %p's queue is not %d", m, queue));
 		error = vm_contig_launder_page(m);
 		if (error == 0)

==== //depot/projects/superpages/src/sys/vm/vm_fault.c#4 (text+ko) ====

@@ -1010,7 +1010,7 @@
 		    (m->flags & (PG_BUSY | PG_FICTITIOUS)) == 0) {
 
 			vm_page_lock_queues();
-			if (m->queue == PQ_CACHE)
+			if (VM_PAGE_INQUEUE1(m, PQ_CACHE))
 				vm_page_deactivate(m);
 			mpte = pmap_enter_quick(pmap, addr, m,
 			    entry->protection, mpte);

==== //depot/projects/superpages/src/sys/vm/vm_page.c#11 (text+ko) ====

@@ -390,7 +390,7 @@
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
 	--mem->hold_count;
 	KASSERT(mem->hold_count >= 0, ("vm_page_unhold: hold count < 0!!!"));
-	if (mem->hold_count == 0 && mem->queue == PQ_HOLD)
+	if (mem->hold_count == 0 && VM_PAGE_INQUEUE2(mem, PQ_HOLD))
 		vm_page_free_toq(mem);
 }
 
@@ -465,7 +465,7 @@
 void
 vm_page_dirty(vm_page_t m)
 {
-	KASSERT(m->queue != PQ_CACHE,
+	KASSERT(VM_PAGE_GETKNOWNQUEUE1(m) != PQ_CACHE,
 	    ("vm_page_dirty: page in cache!"));
 	KASSERT((m->queue - m->buddyq) != PQ_BUDDY,
 	    ("vm_page_dirty: page is free!"));
@@ -715,7 +715,7 @@
 
 	vm_page_remove(m);
 	vm_page_insert(m, new_object, new_pindex);
-	if (m->queue == PQ_CACHE)
+	if (VM_PAGE_INQUEUE1(m, PQ_CACHE))
 		vm_page_deactivate(m);
 	vm_page_dirty(m);
 }
@@ -966,8 +966,8 @@
 {
 
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
-	if (m->queue != PQ_ACTIVE) {
-		if (m->queue == PQ_CACHE)
+	if (VM_PAGE_GETKNOWNQUEUE2(m) != PQ_ACTIVE) {
+		if (VM_PAGE_INQUEUE1(m, PQ_CACHE))
 			cnt.v_reactivated++;
 		vm_pageq_remove(m);
 		if (m->wire_count == 0 && (m->flags & PG_UNMANAGED) == 0) {
@@ -1230,7 +1230,7 @@
 	/*
 	 * Ignore if already inactive.
 	 */
-	if (m->queue == PQ_INACTIVE)
+	if (VM_PAGE_INQUEUE2(m, PQ_INACTIVE))
 		return;
 	if (m->wire_count == 0 && (m->flags & PG_UNMANAGED) == 0) {
 		if (m->queue == PQ_CACHE)
@@ -1241,7 +1241,7 @@
 			TAILQ_INSERT_HEAD(&vm_page_queues[PQ_INACTIVE].pl, m, pageq);
 		else
 			TAILQ_INSERT_TAIL(&vm_page_queues[PQ_INACTIVE].pl, m, pageq);
-		m->queue = PQ_INACTIVE;
+		VM_PAGE_SETQUEUE2(m, PQ_INACTIVE);
 		vm_page_queues[PQ_INACTIVE].lcnt++;
 		cnt.v_inactive_count++;
 	}
@@ -1317,7 +1317,7 @@
 		printf("vm_page_cache: attempting to cache busy page\n");
 		return;
 	}
-	if (m->queue == PQ_CACHE)
+	if (VM_PAGE_INQUEUE1(m, PQ_CACHE))
 		return;
 
 	/*
@@ -1369,8 +1369,9 @@
 	 * occassionally leave the page alone
 	 */
 	if ((dnw & 0x01F0) == 0 ||
-	    m->queue == PQ_INACTIVE || 
-	    m->queue == PQ_CACHE) {
+	    VM_PAGE_INQUEUE2(m, PQ_INACTIVE) || 
+	    VM_PAGE_INQUEUE1(m, PQ_CACHE)
+	) {
 		if (m->act_count >= ACT_INIT)
 			--m->act_count;
 		return;

==== //depot/projects/superpages/src/sys/vm/vm_page.h#5 (text+ko) ====

@@ -153,6 +153,24 @@
 #define PQ_HOLD  (4 + BUDDY_QUEUES)
 #define PQ_COUNT (5 + BUDDY_QUEUES)
 
+/* Returns the real queue a page is on. */
+#define VM_PAGE_GETQUEUE(m)	((m)->queue)
+
+/* Returns the well known queue a page is on. */
+#define VM_PAGE_GETKNOWNQUEUE1(m)	((m)->queue)
+#define VM_PAGE_GETKNOWNQUEUE2(m)	VM_PAGE_GETQUEUE(m)
+
+/* Given the real queue number and a page color return the well know queue. */
+#define VM_PAGE_RESOLVEQUEUE(m, q)	((q))
+
+/* Returns true if the page is in the named well known queue. */
+#define VM_PAGE_INQUEUE1(m, q)	(VM_PAGE_GETKNOWNQUEUE1(m) == (q))
+#define VM_PAGE_INQUEUE2(m, q)	(VM_PAGE_GETKNOWNQUEUE2(m) == (q))
+
+/* Sets the queue a page is on. */
+#define VM_PAGE_SETQUEUE1(m, q)	(VM_PAGE_GETQUEUE(m) = (q))
+#define VM_PAGE_SETQUEUE2(m, q)	(VM_PAGE_GETQUEUE(m) = (q))
+
 struct vpgqueues {
 	struct pglist pl;
 	int	*cnt;

==== //depot/projects/superpages/src/sys/vm/vm_pageout.c#6 (text+ko) ====

@@ -740,7 +740,7 @@
 
 		cnt.v_pdpages++;
 
-		if (m->queue != PQ_INACTIVE) {
+		if (VM_PAGE_GETQUEUE(m) != PQ_INACTIVE) {
 			goto rescan0;
 		}
 
@@ -956,7 +956,7 @@
 				 * reused for another vnode.  The object might
 				 * have been reused for another vnode.
 				 */
-				if (m->queue != PQ_INACTIVE ||
+				if (VM_PAGE_GETQUEUE(m) != PQ_INACTIVE ||
 				    m->object != object ||
 				    object->handle != vp) {
 					if (object->flags & OBJ_MIGHTBEDIRTY)
@@ -1038,7 +1038,7 @@
 
 	while ((m != NULL) && (pcount-- > 0) && (page_shortage > 0)) {
 
-		KASSERT(m->queue == PQ_ACTIVE,
+		KASSERT(VM_PAGE_INQUEUE2(m, PQ_ACTIVE),
 		    ("vm_pageout_scan: page %p isn't active", m));
 
 		next = TAILQ_NEXT(m, pageq);
@@ -1309,7 +1309,7 @@
 	while ((m != NULL) && (pcount-- > 0)) {
 		int actcount;
 
-		KASSERT(m->queue == PQ_ACTIVE,
+		KASSERT(VM_PAGE_INQUEUE2(m, PQ_ACTIVE),
 		    ("vm_pageout_page_stats: page %p isn't active", m));
 
 		next = TAILQ_NEXT(m, pageq);

==== //depot/projects/superpages/src/sys/vm/vm_pageq.c#7 (text+ko) ====

@@ -73,7 +73,7 @@
 void
 vm_pageq_requeue(vm_page_t m)
 {
-	int queue = m->queue;
+	int queue = VM_PAGE_GETQUEUE(m);
 	struct vpgqueues *vpq;
 
 	if (queue != PQ_NONE) {
@@ -93,7 +93,7 @@
 	struct vpgqueues *vpq;
 
 	vpq = &vm_page_queues[queue];
-	m->queue = queue;
+	VM_PAGE_SETQUEUE2(m, queue);
 	TAILQ_INSERT_TAIL(&vpq->pl, m, pageq);
 	++*vpq->cnt;
 	++vpq->lcnt;
@@ -161,12 +161,12 @@
 void
 vm_pageq_remove_nowakeup(vm_page_t m)
 {
-	int queue = m->queue;
+	int queue = VM_PAGE_GETQUEUE(m);
 	struct vpgqueues *pq;
 
 	if (queue != PQ_NONE) {
 		pq = &vm_page_queues[queue];
-		m->queue = PQ_NONE;
+		VM_PAGE_SETQUEUE2(m, PQ_NONE);
 		TAILQ_REMOVE(&pq->pl, m, pageq);
 		(*pq->cnt)--;
 		pq->lcnt--;
@@ -184,11 +184,11 @@
 void
 vm_pageq_remove(vm_page_t m)
 {
-	int queue = m->queue;
+	int queue = VM_PAGE_GETQUEUE(m);
 	struct vpgqueues *pq;
 
 	if (queue != PQ_NONE) {
-		m->queue = PQ_NONE;
+		VM_PAGE_SETQUEUE2(m, PQ_NONE);
 		pq = &vm_page_queues[queue];
 		KASSERT((m->queue - m->buddyq) != PQ_BUDDY,("vm_pageq_remove: page is un buddy allocator"));
 		TAILQ_REMOVE(&pq->pl, m, pageq);



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