These functions used to be big and complicated, now they are glorified
wrappers around pmemrange and don't really need their own file.
Discussed with ariane@ a while ago.

ok?


diff --git conf/files conf/files
index 02da860..017e5f9 100644
--- conf/files
+++ conf/files
@@ -1007,7 +1007,6 @@ file uvm/uvm_object.c
 file uvm/uvm_page.c
 file uvm/uvm_pager.c
 file uvm/uvm_pdaemon.c
-file uvm/uvm_pglist.c
 file uvm/uvm_pmemrange.c
 file uvm/uvm_stat.c
 file uvm/uvm_swap.c
diff --git uvm/uvm_page.c uvm/uvm_page.c
index 10ef7d1..ed8e6d4 100644
--- uvm/uvm_page.c
+++ uvm/uvm_page.c
@@ -806,6 +806,81 @@ uvm_pagealloc_pg(struct vm_page *pg, struct uvm_object 
*obj, voff_t off,
 }
 
 /*
+ * uvm_pglistalloc: allocate a list of pages
+ *
+ * => allocated pages are placed at the tail of rlist.  rlist is
+ *    assumed to be properly initialized by caller.
+ * => returns 0 on success or errno on failure
+ * => doesn't take into account clean non-busy pages on inactive list
+ *     that could be used(?)
+ * => params:
+ *     size            the size of the allocation, rounded to page size.
+ *     low             the low address of the allowed allocation range.
+ *     high            the high address of the allowed allocation range.
+ *     alignment       memory must be aligned to this power-of-two boundary.
+ *     boundary        no segment in the allocation may cross this 
+ *                     power-of-two boundary (relative to zero).
+ * => flags:
+ *     UVM_PLA_NOWAIT  fail if allocation fails
+ *     UVM_PLA_WAITOK  wait for memory to become avail
+ *     UVM_PLA_ZERO    return zeroed memory
+ */
+int
+uvm_pglistalloc(psize_t size, paddr_t low, paddr_t high, paddr_t alignment,
+    paddr_t boundary, struct pglist *rlist, int nsegs, int flags)
+{
+       UVMHIST_FUNC("uvm_pglistalloc"); UVMHIST_CALLED(pghist);
+
+       KASSERT((alignment & (alignment - 1)) == 0);
+       KASSERT((boundary & (boundary - 1)) == 0);
+       KASSERT(!(flags & UVM_PLA_WAITOK) ^ !(flags & UVM_PLA_NOWAIT));
+
+       if (size == 0)
+               return (EINVAL);
+
+       if ((high & PAGE_MASK) != PAGE_MASK) {
+               printf("uvm_pglistalloc: Upper boundary 0x%lx "
+                   "not on pagemask.\n", (unsigned long)high);
+       }
+
+       /*
+        * Our allocations are always page granularity, so our alignment
+        * must be, too.
+        */
+       if (alignment < PAGE_SIZE)
+               alignment = PAGE_SIZE;
+
+       low = atop(roundup(low, alignment));
+       /*
+        * high + 1 may result in overflow, in which case high becomes 0x0,
+        * which is the 'don't care' value.
+        * The only requirement in that case is that low is also 0x0, or the
+        * low<high assert will fail.
+        */
+       high = atop(high + 1);
+       size = atop(round_page(size));
+       alignment = atop(alignment);
+       if (boundary < PAGE_SIZE && boundary != 0)
+               boundary = PAGE_SIZE;
+       boundary = atop(boundary);
+
+       return uvm_pmr_getpages(size, low, high, alignment, boundary, nsegs,
+           flags, rlist);
+}
+
+/*
+ * uvm_pglistfree: free a list of pages
+ *
+ * => pages should already be unmapped
+ */
+void
+uvm_pglistfree(struct pglist *list)
+{
+       UVMHIST_FUNC("uvm_pglistfree"); UVMHIST_CALLED(pghist);
+       uvm_pmr_freepageq(list);
+}
+
+/*
  * interface used by the buffer cache to allocate a buffer at a time.
  * The pages are allocated wired in DMA accessible memory
  */
diff --git uvm/uvm_pglist.c uvm/uvm_pglist.c
deleted file mode 100644
index d29fb14..0000000
--- uvm/uvm_pglist.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*     $OpenBSD$       */
-/*     $NetBSD: uvm_pglist.c,v 1.13 2001/02/18 21:19:08 chs Exp $      */
-
-/*-
- * Copyright (c) 1997 The NetBSD Foundation, Inc.
- * All rights reserved.
- *  
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
- * NASA Ames Research Center.  
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright 
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *      
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * uvm_pglist.c: pglist functions
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-#include <sys/proc.h>
-
-#include <uvm/uvm.h>
-
-#ifdef VM_PAGE_ALLOC_MEMORY_STATS
-#define        STAT_INCR(v)    (v)++
-#define        STAT_DECR(v)    do { \
-               if ((v) == 0) \
-                       printf("%s:%d -- Already 0!\n", __FILE__, __LINE__); \
-               else \
-                       (v)--; \
-       } while (0)
-u_long uvm_pglistalloc_npages;
-#else
-#define        STAT_INCR(v)
-#define        STAT_DECR(v)
-#endif
-
-/*
- * uvm_pglistalloc: allocate a list of pages
- *
- * => allocated pages are placed at the tail of rlist.  rlist is
- *    assumed to be properly initialized by caller.
- * => returns 0 on success or errno on failure
- * => XXX: implementation allocates only a single segment, also
- *     might be able to better advantage of vm_physeg[].
- * => doesn't take into account clean non-busy pages on inactive list
- *     that could be used(?)
- * => params:
- *     size            the size of the allocation, rounded to page size.
- *     low             the low address of the allowed allocation range.
- *     high            the high address of the allowed allocation range.
- *     alignment       memory must be aligned to this power-of-two boundary.
- *     boundary        no segment in the allocation may cross this 
- *                     power-of-two boundary (relative to zero).
- * => flags:
- *     UVM_PLA_NOWAIT  fail if allocation fails
- *     UVM_PLA_WAITOK  wait for memory to become avail
- *     UVM_PLA_ZERO    return zeroed memory
- */
-
-int
-uvm_pglistalloc(psize_t size, paddr_t low, paddr_t high, paddr_t alignment,
-    paddr_t boundary, struct pglist *rlist, int nsegs, int flags)
-{
-       UVMHIST_FUNC("uvm_pglistalloc"); UVMHIST_CALLED(pghist);
-
-       KASSERT((alignment & (alignment - 1)) == 0);
-       KASSERT((boundary & (boundary - 1)) == 0);
-       KASSERT(!(flags & UVM_PLA_WAITOK) ^ !(flags & UVM_PLA_NOWAIT));
-
-       if (size == 0)
-               return (EINVAL);
-
-       if ((high & PAGE_MASK) != PAGE_MASK) {
-               printf("uvm_pglistalloc: Upper boundary 0x%lx "
-                   "not on pagemask.\n", (unsigned long)high);
-       }
-
-       /*
-        * Our allocations are always page granularity, so our alignment
-        * must be, too.
-        */
-       if (alignment < PAGE_SIZE)
-               alignment = PAGE_SIZE;
-
-       low = atop(roundup(low, alignment));
-       /*
-        * high + 1 may result in overflow, in which case high becomes 0x0,
-        * which is the 'don't care' value.
-        * The only requirement in that case is that low is also 0x0, or the
-        * low<high assert will fail.
-        */
-       high = atop(high + 1);
-       size = atop(round_page(size));
-       alignment = atop(alignment);
-       if (boundary < PAGE_SIZE && boundary != 0)
-               boundary = PAGE_SIZE;
-       boundary = atop(boundary);
-
-       return uvm_pmr_getpages(size, low, high, alignment, boundary, nsegs,
-           flags, rlist);
-}
-
-/*
- * uvm_pglistfree: free a list of pages
- *
- * => pages should already be unmapped
- */
-
-void
-uvm_pglistfree(struct pglist *list)
-{
-       UVMHIST_FUNC("uvm_pglistfree"); UVMHIST_CALLED(pghist);
-       uvm_pmr_freepageq(list);
-}
-- 
1.7.5


-- 
Westheimer's Discovery:
        A couple of months in the laboratory can frequently save a
        couple of hours in the library.

Reply via email to