Author: trociny
Date: Mon Nov  7 21:13:19 2011
New Revision: 227316
URL: http://svn.freebsd.org/changeset/base/227316

Log:
  Add KVME_FLAG_SUPER and use it in sysctl_kern_proc_vmmap for marking
  entries with superpages.
  
  Submitted by: Mel Flynn <[email protected]>
  Reviewed by:  alc, rwatson

Modified:
  head/sys/kern/kern_proc.c
  head/sys/sys/user.h

Modified: head/sys/kern/kern_proc.c
==============================================================================
--- head/sys/kern/kern_proc.c   Mon Nov  7 21:09:04 2011        (r227315)
+++ head/sys/kern/kern_proc.c   Mon Nov  7 21:13:19 2011        (r227316)
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/lock.h>
 #include <sys/loginclass.h>
 #include <sys/malloc.h>
+#include <sys/mman.h>
 #include <sys/mount.h>
 #include <sys/mutex.h>
 #include <sys/proc.h>
@@ -75,6 +76,7 @@ __FBSDID("$FreeBSD$");
 #include <vm/pmap.h>
 #include <vm/vm_map.h>
 #include <vm/vm_object.h>
+#include <vm/vm_page.h>
 #include <vm/uma.h>
 
 #ifdef COMPAT_FREEBSD32
@@ -1710,7 +1712,8 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_AR
            entry = entry->next) {
                vm_object_t obj, tobj, lobj;
                vm_offset_t addr;
-               int vfslocked;
+               vm_paddr_t locked_pa;
+               int vfslocked, mincoreinfo;
 
                if (entry->eflags & MAP_ENTRY_IS_SUB_MAP)
                        continue;
@@ -1728,8 +1731,14 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_AR
                kve->kve_resident = 0;
                addr = entry->start;
                while (addr < entry->end) {
-                       if (pmap_extract(map->pmap, addr))
+                       locked_pa = 0;
+                       mincoreinfo = pmap_mincore(map->pmap, addr, &locked_pa);
+                       if (locked_pa != 0)
+                               vm_page_unlock(PHYS_TO_VM_PAGE(locked_pa));
+                       if (mincoreinfo & MINCORE_INCORE)
                                kve->kve_resident++;
+                       if (mincoreinfo & MINCORE_SUPER)
+                               kve->kve_flags |= KVME_FLAG_SUPER;
                        addr += PAGE_SIZE;
                }
 

Modified: head/sys/sys/user.h
==============================================================================
--- head/sys/sys/user.h Mon Nov  7 21:09:04 2011        (r227315)
+++ head/sys/sys/user.h Mon Nov  7 21:13:19 2011        (r227316)
@@ -412,6 +412,7 @@ struct kinfo_file {
 #define        KVME_FLAG_COW           0x00000001
 #define        KVME_FLAG_NEEDS_COPY    0x00000002
 #define        KVME_FLAG_NOCOREDUMP    0x00000004
+#define        KVME_FLAG_SUPER         0x00000008
 
 #if defined(__amd64__)
 #define        KINFO_OVMENTRY_SIZE     1168
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to