svn commit: r327548 - stable/11/sys/fs/procfs
Konstantin Belousov
kib at FreeBSD.org
Thu Jan 4 11:51:04 UTC 2018
Author: kib
Date: Thu Jan 4 11:51:02 2018
New Revision: 327548
URL: https://svnweb.freebsd.org/changeset/base/327548
Log:
MFC r327286:
Reuse kern_proc_vmmap_resident() for procfs_map resident count.
Modified:
stable/11/sys/fs/procfs/procfs_map.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/fs/procfs/procfs_map.c
==============================================================================
--- stable/11/sys/fs/procfs/procfs_map.c Thu Jan 4 11:49:32 2018 (r327547)
+++ stable/11/sys/fs/procfs/procfs_map.c Thu Jan 4 11:51:02 2018 (r327548)
@@ -82,12 +82,17 @@ procfs_doprocmap(PFS_FILL_ARGS)
vm_map_t map;
vm_map_entry_t entry, tmp_entry;
struct vnode *vp;
- char *fullpath, *freepath;
+ char *fullpath, *freepath, *type;
struct ucred *cred;
- int error;
+ vm_object_t obj, tobj, lobj;
+ int error, privateresident, ref_count, resident, shadow_count, flags;
+ vm_offset_t e_start, e_end;
+ vm_eflags_t e_eflags;
+ vm_prot_t e_prot;
unsigned int last_timestamp;
+ bool super;
#ifdef COMPAT_FREEBSD32
- int wrap32 = 0;
+ bool wrap32;
#endif
PROC_LOCK(p);
@@ -100,11 +105,12 @@ procfs_doprocmap(PFS_FILL_ARGS)
return (EOPNOTSUPP);
#ifdef COMPAT_FREEBSD32
- if (SV_CURPROC_FLAG(SV_ILP32)) {
- if (!(SV_PROC_FLAG(p, SV_ILP32)))
- return (EOPNOTSUPP);
- wrap32 = 1;
- }
+ wrap32 = false;
+ if (SV_CURPROC_FLAG(SV_ILP32)) {
+ if (!(SV_PROC_FLAG(p, SV_ILP32)))
+ return (EOPNOTSUPP);
+ wrap32 = true;
+ }
#endif
vm = vmspace_acquire_ref(p);
@@ -114,14 +120,6 @@ procfs_doprocmap(PFS_FILL_ARGS)
vm_map_lock_read(map);
for (entry = map->header.next; entry != &map->header;
entry = entry->next) {
- vm_object_t obj, tobj, lobj;
- int ref_count, shadow_count, flags;
- vm_offset_t e_start, e_end, addr;
- int resident, privateresident;
- char *type;
- vm_eflags_t e_eflags;
- vm_prot_t e_prot;
-
if (entry->eflags & MAP_ENTRY_IS_SUB_MAP)
continue;
@@ -130,6 +128,7 @@ procfs_doprocmap(PFS_FILL_ARGS)
e_start = entry->start;
e_end = entry->end;
privateresident = 0;
+ resident = 0;
obj = entry->object.vm_object;
if (obj != NULL) {
VM_OBJECT_RLOCK(obj);
@@ -138,20 +137,17 @@ procfs_doprocmap(PFS_FILL_ARGS)
}
cred = (entry->cred) ? entry->cred : (obj ? obj->cred : NULL);
- resident = 0;
- addr = entry->start;
- while (addr < entry->end) {
- if (pmap_extract(map->pmap, addr))
- resident++;
- addr += PAGE_SIZE;
- }
-
- for (lobj = tobj = obj; tobj; tobj = tobj->backing_object) {
+ for (lobj = tobj = obj; tobj != NULL;
+ tobj = tobj->backing_object) {
if (tobj != obj)
VM_OBJECT_RLOCK(tobj);
- if (lobj != obj)
- VM_OBJECT_RUNLOCK(lobj);
lobj = tobj;
+ }
+ if (obj != NULL)
+ kern_proc_vmmap_resident(map, entry, &resident, &super);
+ for (tobj = obj; tobj != NULL; tobj = tobj->backing_object) {
+ if (tobj != obj && tobj != lobj)
+ VM_OBJECT_RUNLOCK(tobj);
}
last_timestamp = map->timestamp;
vm_map_unlock_read(map);
More information about the svn-src-all
mailing list