svn commit: r234766 - in stable/9/sys: i386/conf kern vm
Alan Cox
alc at FreeBSD.org
Sat Apr 28 18:43:28 UTC 2012
Author: alc
Date: Sat Apr 28 18:43:27 2012
New Revision: 234766
URL: http://svn.freebsd.org/changeset/base/234766
Log:
MFC r234039
Fix mincore(2) so that it reports PG_CACHED pages as resident.
Modified:
stable/9/sys/vm/vm_mmap.c
stable/9/sys/vm/vm_page.c
stable/9/sys/vm/vm_page.h
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/amd64/include/xen/ (props changed)
stable/9/sys/boot/ (props changed)
stable/9/sys/boot/i386/efi/ (props changed)
stable/9/sys/boot/ia64/efi/ (props changed)
stable/9/sys/boot/ia64/ski/ (props changed)
stable/9/sys/boot/powerpc/boot1.chrp/ (props changed)
stable/9/sys/boot/powerpc/ofw/ (props changed)
stable/9/sys/cddl/contrib/opensolaris/ (props changed)
stable/9/sys/conf/ (props changed)
stable/9/sys/contrib/dev/acpica/ (props changed)
stable/9/sys/contrib/octeon-sdk/ (props changed)
stable/9/sys/contrib/pf/ (props changed)
stable/9/sys/contrib/x86emu/ (props changed)
stable/9/sys/fs/ (props changed)
stable/9/sys/fs/ntfs/ (props changed)
stable/9/sys/i386/conf/XENHVM (props changed)
stable/9/sys/kern/subr_witness.c (props changed)
Modified: stable/9/sys/vm/vm_mmap.c
==============================================================================
--- stable/9/sys/vm/vm_mmap.c Sat Apr 28 18:03:57 2012 (r234765)
+++ stable/9/sys/vm/vm_mmap.c Sat Apr 28 18:43:27 2012 (r234766)
@@ -891,6 +891,9 @@ RestartScan:
pindex = OFF_TO_IDX(current->offset +
(addr - current->start));
m = vm_page_lookup(object, pindex);
+ if (m == NULL &&
+ vm_page_is_cached(object, pindex))
+ mincoreinfo = MINCORE_INCORE;
if (m != NULL && m->valid == 0)
m = NULL;
if (m != NULL)
Modified: stable/9/sys/vm/vm_page.c
==============================================================================
--- stable/9/sys/vm/vm_page.c Sat Apr 28 18:03:57 2012 (r234765)
+++ stable/9/sys/vm/vm_page.c Sat Apr 28 18:43:27 2012 (r234766)
@@ -1284,6 +1284,33 @@ vm_page_cache_transfer(vm_object_t orig_
}
/*
+ * Returns TRUE if a cached page is associated with the given object and
+ * offset, and FALSE otherwise.
+ *
+ * The object must be locked.
+ */
+boolean_t
+vm_page_is_cached(vm_object_t object, vm_pindex_t pindex)
+{
+ vm_page_t m;
+
+ /*
+ * Insertion into an object's collection of cached pages requires the
+ * object to be locked. Therefore, if the object is locked and the
+ * object's collection is empty, there is no need to acquire the free
+ * page queues lock in order to prove that the specified page doesn't
+ * exist.
+ */
+ VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
+ if (object->cache == NULL)
+ return (FALSE);
+ mtx_lock(&vm_page_queue_free_mtx);
+ m = vm_page_cache_lookup(object, pindex);
+ mtx_unlock(&vm_page_queue_free_mtx);
+ return (m != NULL);
+}
+
+/*
* vm_page_alloc:
*
* Allocate and return a memory cell associated
Modified: stable/9/sys/vm/vm_page.h
==============================================================================
--- stable/9/sys/vm/vm_page.h Sat Apr 28 18:03:57 2012 (r234765)
+++ stable/9/sys/vm/vm_page.h Sat Apr 28 18:43:27 2012 (r234766)
@@ -391,6 +391,7 @@ 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_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);
vm_page_t vm_page_next(vm_page_t m);
int vm_page_pa_tryrelock(pmap_t, vm_paddr_t, vm_paddr_t *);
More information about the svn-src-stable-9
mailing list