* Renamed cache_type_to_string() to vm_cache_type_to_string() and made in

kernel private.
* Moved dumping code from dump_cache() to new VMCache::Dump().
* Override VMCache::Dump() in VMVnodeCache to also print the vnode.
* Removed no longer needed VMCache::GetLock().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37138 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2010-06-14 23:57:00 +00:00
parent 0f48aa877a
commit 377ecfe797
5 changed files with 71 additions and 50 deletions

View File

@ -85,6 +85,8 @@ area_id create_area_etc(team_id team, const char *name, uint32 size,
area_id transfer_area(area_id id, void** _address, uint32 addressSpec, area_id transfer_area(area_id id, void** _address, uint32 addressSpec,
team_id target, bool kernel); team_id target, bool kernel);
const char* vm_cache_type_to_string(int32 type);
status_t vm_block_address_range(const char* name, void* address, addr_t size); status_t vm_block_address_range(const char* name, void* address, addr_t size);
status_t vm_unreserve_address_range(team_id team, void *address, addr_t size); status_t vm_unreserve_address_range(team_id team, void *address, addr_t size);
status_t vm_reserve_address_range(team_id team, void **_address, status_t vm_reserve_address_range(team_id team, void **_address,

View File

@ -155,3 +155,12 @@ VMVnodeCache::ReleaseStoreRef()
vfs_put_vnode(fVnode); vfs_put_vnode(fVnode);
} }
void
VMVnodeCache::Dump(bool showPages) const
{
VMCache::Dump(showPages);
kprintf(" vnode: %p <%" B_PRIdDEV ", %" B_PRIdINO ">\n", fVnode,
fDevice, fInode);
}

View File

@ -39,6 +39,8 @@ public:
virtual void AcquireStoreRef(); virtual void AcquireStoreRef();
virtual void ReleaseStoreRef(); virtual void ReleaseStoreRef();
virtual void Dump(bool showPages) const;
void SetFileCacheRef(file_cache_ref* ref) void SetFileCacheRef(file_cache_ref* ref)
{ fFileCacheRef = ref; } { fFileCacheRef = ref; }
file_cache_ref* FileCacheRef() const file_cache_ref* FileCacheRef() const

View File

@ -29,6 +29,7 @@
#include <vm/vm_page.h> #include <vm/vm_page.h>
#include <vm/vm_priv.h> #include <vm/vm_priv.h>
#include <vm/vm_types.h> #include <vm/vm_types.h>
#include <vm/VMAddressSpace.h>
#include <vm/VMArea.h> #include <vm/VMArea.h>
@ -1271,6 +1272,58 @@ VMCache::DebugLookupPage(off_t offset)
} }
void
VMCache::Dump(bool showPages) const
{
kprintf("CACHE %p:\n", this);
kprintf(" ref_count: %ld\n", RefCount());
kprintf(" source: %p\n", source);
kprintf(" type: %s\n", vm_cache_type_to_string(type));
kprintf(" virtual_base: 0x%Lx\n", virtual_base);
kprintf(" virtual_end: 0x%Lx\n", virtual_end);
kprintf(" temporary: %ld\n", temporary);
kprintf(" scan_skip: %ld\n", scan_skip);
kprintf(" lock: %p\n", &fLock);
#if KDEBUG
kprintf(" lock.holder: %ld\n", fLock.holder);
#endif
kprintf(" areas:\n");
for (VMArea* area = areas; area != NULL; area = area->cache_next) {
kprintf(" area 0x%lx, %s\n", area->id, area->name);
kprintf("\tbase_addr: 0x%lx, size: 0x%lx\n", area->Base(),
area->Size());
kprintf("\tprotection: 0x%lx\n", area->protection);
kprintf("\towner: 0x%lx\n", area->address_space->ID());
}
kprintf(" consumers:\n");
VMCache* consumer = NULL;
while ((consumer = (VMCache*)list_get_next_item((list*)&consumers,
consumer)) != NULL) {
kprintf("\t%p\n", consumer);
}
kprintf(" pages:\n");
if (showPages) {
for (VMCachePagesTree::ConstIterator it = pages.GetIterator();
vm_page* page = it.Next();) {
if (!vm_page_is_dummy(page)) {
kprintf("\t%p ppn %#" B_PRIxPHYSADDR " offset %#" B_PRIxPHYSADDR
" state %u (%s) wired_count %u\n", page,
page->physical_page_number, page->cache_offset,
page->State(), page_state_to_string(page->State()),
page->wired_count);
} else {
kprintf("\t%p DUMMY PAGE state %u (%s)\n",
page, page->State(), page_state_to_string(page->State()));
}
}
} else
kprintf("\t%ld in cache\n", page_count);
}
/*! Wakes up threads waiting for page events. /*! Wakes up threads waiting for page events.
\param page The page for which events occurred. \param page The page for which events occurred.
\param events The mask of events that occurred. \param events The mask of events that occurred.

View File

@ -2818,8 +2818,8 @@ dump_cache_tree(int argc, char** argv)
} }
static const char* const char*
cache_type_to_string(int32 type) vm_cache_type_to_string(int32 type)
{ {
switch (type) { switch (type) {
case CACHE_TYPE_RAM: case CACHE_TYPE_RAM:
@ -2884,7 +2884,7 @@ dump_caches_recursively(VMCache* cache, cache_info& info, int level)
kprintf(" "); kprintf(" ");
kprintf("%p: type: %s, base: %lld, size: %lld, pages: %lu", cache, kprintf("%p: type: %s, base: %lld, size: %lld, pages: %lu", cache,
cache_type_to_string(cache->type), cache->virtual_base, vm_cache_type_to_string(cache->type), cache->virtual_base,
cache->virtual_end, cache->page_count); cache->virtual_end, cache->page_count);
if (level == 0) if (level == 0)
@ -3023,52 +3023,7 @@ dump_cache(int argc, char** argv)
cache = (VMCache*)address; cache = (VMCache*)address;
kprintf("CACHE %p:\n", cache); cache->Dump(showPages);
kprintf(" ref_count: %ld\n", cache->RefCount());
kprintf(" source: %p\n", cache->source);
kprintf(" type: %s\n", cache_type_to_string(cache->type));
kprintf(" virtual_base: 0x%Lx\n", cache->virtual_base);
kprintf(" virtual_end: 0x%Lx\n", cache->virtual_end);
kprintf(" temporary: %ld\n", cache->temporary);
kprintf(" scan_skip: %ld\n", cache->scan_skip);
kprintf(" lock: %p\n", cache->GetLock());
#if KDEBUG
kprintf(" lock.holder: %ld\n", cache->GetLock()->holder);
#endif
kprintf(" areas:\n");
for (VMArea* area = cache->areas; area != NULL; area = area->cache_next) {
kprintf(" area 0x%lx, %s\n", area->id, area->name);
kprintf("\tbase_addr: 0x%lx, size: 0x%lx\n", area->Base(),
area->Size());
kprintf("\tprotection: 0x%lx\n", area->protection);
kprintf("\towner: 0x%lx\n", area->address_space->ID());
}
kprintf(" consumers:\n");
VMCache* consumer = NULL;
while ((consumer = (VMCache*)list_get_next_item(&cache->consumers,
consumer)) != NULL) {
kprintf("\t%p\n", consumer);
}
kprintf(" pages:\n");
if (showPages) {
for (VMCachePagesTree::Iterator it = cache->pages.GetIterator();
vm_page* page = it.Next();) {
if (!vm_page_is_dummy(page)) {
kprintf("\t%p ppn %#" B_PRIxPHYSADDR " offset %#" B_PRIxPHYSADDR
" state %u (%s) wired_count %u\n", page,
page->physical_page_number, page->cache_offset,
page->State(), page_state_to_string(page->State()),
page->wired_count);
} else {
kprintf("\t%p DUMMY PAGE state %u (%s)\n",
page, page->State(), page_state_to_string(page->State()));
}
}
} else
kprintf("\t%ld in cache\n", cache->page_count);
set_debug_variable("_sourceCache", (addr_t)cache->source); set_debug_variable("_sourceCache", (addr_t)cache->source);
@ -3089,7 +3044,7 @@ dump_area_struct(VMArea* area, bool mappings)
kprintf("wiring:\t\t0x%x\n", area->wiring); kprintf("wiring:\t\t0x%x\n", area->wiring);
kprintf("memory_type:\t%#" B_PRIx32 "\n", area->MemoryType()); kprintf("memory_type:\t%#" B_PRIx32 "\n", area->MemoryType());
kprintf("cache:\t\t%p\n", area->cache); kprintf("cache:\t\t%p\n", area->cache);
kprintf("cache_type:\t%s\n", cache_type_to_string(area->cache_type)); kprintf("cache_type:\t%s\n", vm_cache_type_to_string(area->cache_type));
kprintf("cache_offset:\t0x%Lx\n", area->cache_offset); kprintf("cache_offset:\t0x%Lx\n", area->cache_offset);
kprintf("cache_next:\t%p\n", area->cache_next); kprintf("cache_next:\t%p\n", area->cache_next);
kprintf("cache_prev:\t%p\n", area->cache_prev); kprintf("cache_prev:\t%p\n", area->cache_prev);