Add KVME_FLAG_SUPER and use it in sysctl_kern_proc_vmmap for marking

entries with superpages.

Submitted by:	Mel Flynn <mel.flynn+fbsd.hackers@mailing.thruhere.net>
Reviewed by:	alc, rwatson
This commit is contained in:
Mikolaj Golub 2011-11-07 21:13:19 +00:00
parent bde886fba4
commit 5384d08913
2 changed files with 12 additions and 2 deletions

View File

@ -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_ARGS)
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_ARGS)
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;
}

View File

@ -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