svn commit: r235366 - head/sys/vm
Konstantin Belousov
kib at FreeBSD.org
Sat May 12 20:34:23 UTC 2012
Author: kib
Date: Sat May 12 20:34:22 2012
New Revision: 235366
URL: http://svn.freebsd.org/changeset/base/235366
Log:
Split the code from vm_page_getfake() to initialize the fake page struct
vm_page into new interface vm_page_initfake(). Handle the case of fake
page re-initialization with changed memattr.
Sponsored by: The FreeBSD Foundation
Reviewed by: alc
MFC after: 1 month
Modified:
head/sys/vm/vm_page.c
head/sys/vm/vm_page.h
Modified: head/sys/vm/vm_page.c
==============================================================================
--- head/sys/vm/vm_page.c Sat May 12 20:27:51 2012 (r235365)
+++ head/sys/vm/vm_page.c Sat May 12 20:34:22 2012 (r235366)
@@ -646,6 +646,22 @@ vm_page_getfake(vm_paddr_t paddr, vm_mem
vm_page_t m;
m = uma_zalloc(fakepg_zone, M_WAITOK | M_ZERO);
+ vm_page_initfake(m, paddr, memattr);
+ return (m);
+}
+
+void
+vm_page_initfake(vm_page_t m, vm_paddr_t paddr, vm_memattr_t memattr)
+{
+
+ if ((m->flags & PG_FICTITIOUS) != 0) {
+ /*
+ * The page's memattr might have changed since the
+ * previous initialization. Update the pmap to the
+ * new memattr.
+ */
+ goto memattr;
+ }
m->phys_addr = paddr;
m->queue = PQ_NONE;
/* Fictitious pages don't use "segind". */
@@ -653,8 +669,8 @@ vm_page_getfake(vm_paddr_t paddr, vm_mem
/* Fictitious pages don't use "order" or "pool". */
m->oflags = VPO_BUSY | VPO_UNMANAGED;
m->wire_count = 1;
+memattr:
pmap_page_set_memattr(m, memattr);
- return (m);
}
/*
Modified: head/sys/vm/vm_page.h
==============================================================================
--- head/sys/vm/vm_page.h Sat May 12 20:27:51 2012 (r235365)
+++ head/sys/vm/vm_page.h Sat May 12 20:34:22 2012 (r235366)
@@ -391,6 +391,7 @@ void vm_page_dontneed(vm_page_t);
void vm_page_deactivate (vm_page_t);
vm_page_t vm_page_find_least(vm_object_t, vm_pindex_t);
vm_page_t vm_page_getfake(vm_paddr_t paddr, vm_memattr_t memattr);
+void vm_page_initfake(vm_page_t m, vm_paddr_t paddr, vm_memattr_t memattr);
void vm_page_insert (vm_page_t, vm_object_t, vm_pindex_t);
boolean_t vm_page_is_cached(vm_object_t object, vm_pindex_t pindex);
vm_page_t vm_page_lookup (vm_object_t, vm_pindex_t);
More information about the svn-src-head
mailing list