Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/procfs/procfs_map.c
Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | |||||
#include <sys/proc.h> | #include <sys/proc.h> | ||||
#include <sys/resourcevar.h> | #include <sys/resourcevar.h> | ||||
#include <sys/rwlock.h> | #include <sys/rwlock.h> | ||||
#include <sys/sbuf.h> | #include <sys/sbuf.h> | ||||
#ifdef COMPAT_FREEBSD32 | #ifdef COMPAT_FREEBSD32 | ||||
#include <sys/sysent.h> | #include <sys/sysent.h> | ||||
#endif | #endif | ||||
#include <sys/uio.h> | #include <sys/uio.h> | ||||
#include <sys/user.h> | |||||
#include <sys/vnode.h> | #include <sys/vnode.h> | ||||
#include <fs/pseudofs/pseudofs.h> | #include <fs/pseudofs/pseudofs.h> | ||||
#include <fs/procfs/procfs.h> | #include <fs/procfs/procfs.h> | ||||
#include <vm/vm.h> | #include <vm/vm.h> | ||||
#include <vm/vm_extern.h> | #include <vm/vm_extern.h> | ||||
#include <vm/pmap.h> | #include <vm/pmap.h> | ||||
Show All 18 Lines | |||||
{ | { | ||||
struct vmspace *vm; | struct vmspace *vm; | ||||
vm_map_t map; | vm_map_t map; | ||||
vm_map_entry_t entry, tmp_entry; | vm_map_entry_t entry, tmp_entry; | ||||
struct vnode *vp; | struct vnode *vp; | ||||
char *fullpath, *freepath, *type; | char *fullpath, *freepath, *type; | ||||
struct ucred *cred; | struct ucred *cred; | ||||
vm_object_t lobj, nobj, obj, tobj; | vm_object_t lobj, nobj, obj, tobj; | ||||
int error, privateresident, ref_count, resident, shadow_count, flags; | int error, flags, kvme, privateresident, ref_count, resident; | ||||
int shadow_count; | |||||
vm_offset_t e_start, e_end; | vm_offset_t e_start, e_end; | ||||
vm_eflags_t e_eflags; | vm_eflags_t e_eflags; | ||||
vm_prot_t e_prot; | vm_prot_t e_prot; | ||||
unsigned int last_timestamp; | unsigned int last_timestamp; | ||||
bool super; | bool super; | ||||
#ifdef COMPAT_FREEBSD32 | #ifdef COMPAT_FREEBSD32 | ||||
bool wrap32; | bool wrap32; | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | for (tobj = obj; tobj != NULL; tobj = nobj) { | ||||
VM_OBJECT_RUNLOCK(tobj); | VM_OBJECT_RUNLOCK(tobj); | ||||
} | } | ||||
last_timestamp = map->timestamp; | last_timestamp = map->timestamp; | ||||
vm_map_unlock_read(map); | vm_map_unlock_read(map); | ||||
freepath = NULL; | freepath = NULL; | ||||
fullpath = "-"; | fullpath = "-"; | ||||
if (lobj) { | if (lobj) { | ||||
vp = NULL; | kvme = vm_object_kvme_type(lobj, &vp); | ||||
switch (lobj->type) { | if (vp != NULL) | ||||
vref(vp); | |||||
switch (kvme) { | |||||
default: | default: | ||||
case OBJT_DEFAULT: | type = "unknown"; | ||||
type = "default"; | |||||
break; | break; | ||||
case OBJT_VNODE: | case KVME_TYPE_PHYS: | ||||
type = "vnode"; | type = "phys"; | ||||
markj: So what should be done here? Can vm_object_kvme_type() be used? | |||||
vp = lobj->handle; | |||||
vref(vp); | |||||
break; | break; | ||||
case OBJT_SWAP_TMPFS: | case KVME_TYPE_DEFAULT: | ||||
type = "vnode"; | case KVME_TYPE_SWAP: | ||||
if ((lobj->flags & OBJ_TMPFS) != 0) { | |||||
vp = lobj->un_pager.swp.swp_tmpfs; | |||||
vref(vp); | |||||
} | |||||
break; | |||||
case OBJT_SWAP: | |||||
type = "swap"; | type = "swap"; | ||||
break; | break; | ||||
case OBJT_SG: | case KVME_TYPE_DEAD: | ||||
case OBJT_DEVICE: | type = "dead"; | ||||
break; | |||||
case KVME_TYPE_VNODE: | |||||
type = "vnode"; | |||||
break; | |||||
case KVME_TYPE_SG: | |||||
case KVME_TYPE_DEVICE: | |||||
case KVME_TYPE_MGTDEVICE: | |||||
type = "device"; | type = "device"; | ||||
break; | break; | ||||
} | } | ||||
if (lobj != obj) | if (lobj != obj) | ||||
VM_OBJECT_RUNLOCK(lobj); | VM_OBJECT_RUNLOCK(lobj); | ||||
flags = obj->flags; | flags = obj->flags; | ||||
ref_count = obj->ref_count; | ref_count = obj->ref_count; | ||||
▲ Show 20 Lines • Show All 57 Lines • Show Last 20 Lines |
So what should be done here? Can vm_object_kvme_type() be used?