Added more checks regarding page movement for debugging purposes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20468 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -3511,6 +3511,7 @@ vm_soft_fault(addr_t originalAddress, bool isWrite, bool isUser)
|
|||||||
|
|
||||||
vm_translation_map *map = &addressSpace->translation_map;
|
vm_translation_map *map = &addressSpace->translation_map;
|
||||||
vm_page dummyPage;
|
vm_page dummyPage;
|
||||||
|
dummyPage.cache = NULL;
|
||||||
dummyPage.state = PAGE_STATE_INACTIVE;
|
dummyPage.state = PAGE_STATE_INACTIVE;
|
||||||
dummyPage.type = PAGE_TYPE_DUMMY;
|
dummyPage.type = PAGE_TYPE_DUMMY;
|
||||||
|
|
||||||
|
|||||||
@@ -269,6 +269,9 @@ vm_cache_lookup_page(vm_cache_ref *cacheRef, off_t offset)
|
|||||||
release_spinlock(&sPageCacheTableLock);
|
release_spinlock(&sPageCacheTableLock);
|
||||||
restore_interrupts(state);
|
restore_interrupts(state);
|
||||||
|
|
||||||
|
if (page != NULL && cacheRef->cache != page->cache)
|
||||||
|
panic("page %p not in cache %p\n", page, cacheRef->cache);
|
||||||
|
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,9 +281,15 @@ vm_cache_insert_page(vm_cache_ref *cacheRef, vm_page *page, off_t offset)
|
|||||||
{
|
{
|
||||||
cpu_status state;
|
cpu_status state;
|
||||||
|
|
||||||
TRACE(("vm_cache_insert_page: cacheRef %p, page %p, offset %Ld\n", cacheRef, page, offset));
|
TRACE(("vm_cache_insert_page: cacheRef %p, page %p, offset %Ld\n",
|
||||||
|
cacheRef, page, offset));
|
||||||
ASSERT_LOCKED_MUTEX(&cacheRef->lock);
|
ASSERT_LOCKED_MUTEX(&cacheRef->lock);
|
||||||
|
|
||||||
|
if (page->cache != NULL) {
|
||||||
|
panic("insert page %p into cache %p: page cache is set to %p\n",
|
||||||
|
page, cacheRef->cache, page->cache);
|
||||||
|
}
|
||||||
|
|
||||||
page->cache_offset = (uint32)(offset >> PAGE_SHIFT);
|
page->cache_offset = (uint32)(offset >> PAGE_SHIFT);
|
||||||
|
|
||||||
if (cacheRef->cache->page_list != NULL)
|
if (cacheRef->cache->page_list != NULL)
|
||||||
@@ -300,7 +309,6 @@ vm_cache_insert_page(vm_cache_ref *cacheRef, vm_page *page, off_t offset)
|
|||||||
|
|
||||||
release_spinlock(&sPageCacheTableLock);
|
release_spinlock(&sPageCacheTableLock);
|
||||||
restore_interrupts(state);
|
restore_interrupts(state);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -317,6 +325,9 @@ vm_cache_remove_page(vm_cache_ref *cacheRef, vm_page *page)
|
|||||||
TRACE(("vm_cache_remove_page: cache %p, page %p\n", cacheRef, page));
|
TRACE(("vm_cache_remove_page: cache %p, page %p\n", cacheRef, page));
|
||||||
ASSERT_LOCKED_MUTEX(&cacheRef->lock);
|
ASSERT_LOCKED_MUTEX(&cacheRef->lock);
|
||||||
|
|
||||||
|
if (page->cache != cacheRef->cache)
|
||||||
|
panic("remove page from %p: page cache is set to %p\n", cacheRef->cache, page->cache);
|
||||||
|
|
||||||
state = disable_interrupts();
|
state = disable_interrupts();
|
||||||
acquire_spinlock(&sPageCacheTableLock);
|
acquire_spinlock(&sPageCacheTableLock);
|
||||||
|
|
||||||
|
|||||||
@@ -349,6 +349,15 @@ set_page_state_nolock(vm_page *page, int pageState)
|
|||||||
panic("vm_page_set_state: vm_page %p in invalid state %d\n", page, page->state);
|
panic("vm_page_set_state: vm_page %p in invalid state %d\n", page, page->state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (page->state == PAGE_STATE_CLEAR || page->state == PAGE_STATE_FREE) {
|
||||||
|
if (page->cache != NULL)
|
||||||
|
panic("free page %p has cache", page);
|
||||||
|
}
|
||||||
|
if (pageState == PAGE_STATE_CLEAR || pageState == PAGE_STATE_FREE) {
|
||||||
|
if (page->cache != NULL)
|
||||||
|
panic("to be freed page %p has cache", page);
|
||||||
|
}
|
||||||
|
|
||||||
switch (pageState) {
|
switch (pageState) {
|
||||||
case PAGE_STATE_BUSY:
|
case PAGE_STATE_BUSY:
|
||||||
case PAGE_STATE_ACTIVE:
|
case PAGE_STATE_ACTIVE:
|
||||||
@@ -738,6 +747,7 @@ vm_page_init(kernel_args *args)
|
|||||||
sPages[i].mappings = NULL;
|
sPages[i].mappings = NULL;
|
||||||
sPages[i].wired_count = 0;
|
sPages[i].wired_count = 0;
|
||||||
sPages[i].usage_count = 0;
|
sPages[i].usage_count = 0;
|
||||||
|
sPages[i].cache = NULL;
|
||||||
enqueue_page(&page_free_queue, &sPages[i]);
|
enqueue_page(&page_free_queue, &sPages[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -942,6 +952,8 @@ vm_page_allocate_page(int page_state)
|
|||||||
panic("vm_allocate_page: out of memory! page state = %d\n", page_state);
|
panic("vm_allocate_page: out of memory! page state = %d\n", page_state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (p->cache != NULL)
|
||||||
|
panic("supposed to be free page %p has cache\n", p);
|
||||||
|
|
||||||
old_page_state = p->state;
|
old_page_state = p->state;
|
||||||
p->state = PAGE_STATE_BUSY;
|
p->state = PAGE_STATE_BUSY;
|
||||||
|
|||||||
Reference in New Issue
Block a user