Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Aug 1998 09:54:08 +0100 (BST)
From:      Doug Rabson <dfr@nlsystems.com>
To:        "John S. Dyson" <dyson@iquest.net>
Cc:        Stephen McKay <syssgm@dtir.qld.gov.au>, freebsd-current@FreeBSD.ORG
Subject:   Re: Serious bug in vm_page.h in current
Message-ID:  <Pine.BSF.4.01.9808260953170.17263-100000@herring.nlsystems.com>
In-Reply-To: <199808260240.VAA02790@dyson.iquest.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 25 Aug 1998, John S. Dyson wrote:

> Stephen McKay said:
> > 
> > I was perhaps too brief.  All the PAGE_XXX macros would have to change to
> > be consistent (hopefully changed to inline functions at the same time).
> > I had noticed that you were being consistent with existing naming, but the
> > naming used in vm_object.h is clearly better.
> > 
> I agree that it is probably time to get rid of the PAGE_XXX macros.

How about this:

Index: vm_page.h
===================================================================
RCS file: /home/ncvs/src/sys/vm/vm_page.h,v
retrieving revision 1.44
diff -u -u -r1.44 vm_page.h
--- vm_page.h	1998/08/24 08:39:38	1.44
+++ vm_page.h	1998/08/26 08:50:32
@@ -281,32 +281,58 @@
  *	Functions implemented as macros
  */
 
-#define PAGE_SET_FLAG(m, bits)	atomic_set_short(&(m)->flags, bits)
+static __inline void
+vm_page_set_flag(vm_page_t m, unsigned int bits)
+{
+	atomic_set_short(&(m)->flags, bits);
+}
+
+static __inline void
+vm_page_clear_flag(vm_page_t m, unsigned int bits)
+{
+	atomic_clear_short(&(m)->flags, bits);
+}
 
-#define PAGE_CLEAR_FLAG(m, bits) atomic_clear_short(&(m)->flags, bits)
+#if 0
+static __inline void
+vm_page_assert_wait(vm_page_t m, int interruptible)
+{
+	vm_page_set_flag(m, PG_WANTED);
+	assert_wait((int) m, interruptible);
+}
+#endif
 
-#define PAGE_ASSERT_WAIT(m, interruptible)	{ \
-	PAGE_SET_FLAG(m, PG_WANTED); \
-	assert_wait((int) (m), (interruptible)); \
+static __inline void
+vm_page_busy(vm_page_t m)
+{
+	vm_page_busy(m);
 }
 
-#define PAGE_WAKEUP(m)	{ \
-	PAGE_CLEAR_FLAG(m, PG_BUSY); \
-	if (((m)->flags & PG_WANTED) && ((m)->busy == 0)) { \
-		PAGE_CLEAR_FLAG(m, PG_WANTED); \
-		wakeup((m)); \
-	} \
+static __inline void
+vm_page_wakeup(vm_page_t m)
+{
+	vm_page_clear_flag(m, PG_BUSY);
+	if ((m->flags & PG_WANTED) && (m->busy == 0)) {
+		vm_page_clear_flag(m, PG_WANTED);
+		wakeup(m);
+	}
 }
 
-#define PAGE_BUSY(m)	atomic_add_char(&(m)->busy, 1)
+static __inline void
+vm_page_start_io(vm_page_t m)
+{
+	atomic_add_char(&(m)->busy, 1);
+}
 
-#define PAGE_BWAKEUP(m) { \
-	atomic_subtract_char(&(m)->busy, 1); \
-	if ((((m)->flags & (PG_WANTED | PG_BUSY)) == PG_WANTED) && \
-		((m)->busy == 0)) { \
-		PAGE_CLEAR_FLAG(m, PG_WANTED); \
-		wakeup((m)); \
-	} \
+static __inline void
+vm_page_finish_io(vm_page_t m)
+{
+	atomic_subtract_char(&m->busy, 1);
+	if (((m->flags & (PG_WANTED | PG_BUSY)) == PG_WANTED) &&
+		(m->busy == 0)) {
+		vm_page_clear_flag(m, PG_WANTED);
+		wakeup(m);
+	}
 }
 
 
@@ -381,11 +407,11 @@
 	if (prot == VM_PROT_NONE) {
 		if (mem->flags & (PG_WRITEABLE|PG_MAPPED)) {
 			pmap_page_protect(VM_PAGE_TO_PHYS(mem), VM_PROT_NONE);
-			PAGE_CLEAR_FLAG(mem, PG_WRITEABLE|PG_MAPPED);
+			vm_page_clear_flag(mem, PG_WRITEABLE|PG_MAPPED);
 		}
 	} else if ((prot == VM_PROT_READ) && (mem->flags & PG_WRITEABLE)) {
 		pmap_page_protect(VM_PAGE_TO_PHYS(mem), VM_PROT_READ);
-		PAGE_CLEAR_FLAG(mem, PG_WRITEABLE);
+		vm_page_clear_flag(mem, PG_WRITEABLE);
 	}
 }
 

--
Doug Rabson				Mail:  dfr@nlsystems.com
Nonlinear Systems Ltd.			Phone: +44 181 951 1891
					Fax:   +44 181 381 1039


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.01.9808260953170.17263-100000>