Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/uvm in uvm_page_physget(), try the vm_physmem[] chunks i...



details:   https://anonhg.NetBSD.org/src/rev/e505af939b7c
branches:  trunk
changeset: 479007:e505af939b7c
user:      drochner <drochner%NetBSD.org@localhost>
date:      Wed Dec 01 16:08:32 1999 +0000

description:
in uvm_page_physget(), try the vm_physmem[] chunks in the order of their
"free_list" attributes, to save DMA memory

diffstat:

 sys/uvm/uvm_page.c |  26 +++++++++++++++++++++++---
 1 files changed, 23 insertions(+), 3 deletions(-)

diffs (55 lines):

diff -r a6a189324fbd -r e505af939b7c sys/uvm/uvm_page.c
--- a/sys/uvm/uvm_page.c        Wed Dec 01 15:15:29 1999 +0000
+++ b/sys/uvm/uvm_page.c        Wed Dec 01 16:08:32 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: uvm_page.c,v 1.27 1999/11/30 18:34:23 thorpej Exp $    */
+/*     $NetBSD: uvm_page.c,v 1.28 1999/12/01 16:08:32 drochner Exp $   */
 
 /* 
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -457,9 +457,13 @@
  * => return false if out of memory.
  */
 
-boolean_t
-uvm_page_physget(paddrp)
+/* subroutine: try to allocate from memory chunks on the specified freelist */
+static boolean_t uvm_page_physget_freelist __P((paddr_t *, int));
+
+static boolean_t
+uvm_page_physget_freelist(paddrp, freelist)
        paddr_t *paddrp;
+       int freelist;
 {
        int lcv, x;
 
@@ -474,6 +478,9 @@
                if (vm_physmem[lcv].pgs)
                        panic("vm_page_physget: called _after_ bootstrap");
 
+               if (vm_physmem[lcv].free_list != freelist)
+                       continue;
+
                /* try from front */
                if (vm_physmem[lcv].avail_start == vm_physmem[lcv].start &&
                    vm_physmem[lcv].avail_start < vm_physmem[lcv].avail_end) {
@@ -544,6 +551,19 @@
 
        return (FALSE);        /* whoops! */
 }
+
+boolean_t
+uvm_page_physget(paddrp)
+       paddr_t *paddrp;
+{
+       int i;
+
+       /* try in the order of freelist preference */
+       for (i = 0; i < VM_NFREELIST; i++)
+               if (uvm_page_physget_freelist(paddrp, i) == TRUE)
+                       return (TRUE);
+       return (FALSE);
+}
 #endif /* PMAP_STEAL_MEMORY */
 
 /*



Home | Main Index | Thread Index | Old Index