summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/kernel/pagemgr.H5
-rw-r--r--src/kernel/pagemgr.C12
2 files changed, 15 insertions, 2 deletions
diff --git a/src/include/kernel/pagemgr.H b/src/include/kernel/pagemgr.H
index 5c22d6864..52d924b79 100644
--- a/src/include/kernel/pagemgr.H
+++ b/src/include/kernel/pagemgr.H
@@ -32,7 +32,10 @@ class PageManager
private:
void* _allocatePage(size_t);
void _freePage(void*, size_t);
-
+
+ /** Statistics on number of free pages (for debug) */
+ uint64_t iv_pagesAvail;
+
struct page_t
{
page_t* next;
diff --git a/src/kernel/pagemgr.C b/src/kernel/pagemgr.C
index 1570a97d3..9ca2821d6 100644
--- a/src/kernel/pagemgr.C
+++ b/src/kernel/pagemgr.C
@@ -22,7 +22,7 @@ void PageManager::freePage(void* p, size_t n)
return pmgr._freePage(p, n);
}
-PageManager::PageManager()
+PageManager::PageManager() : iv_pagesAvail(0)
{
// Determine first page of un-allocated memory.
uint64_t addr = (uint64_t) VFS_LAST_ADDRESS;
@@ -32,6 +32,9 @@ PageManager::PageManager()
// Determine number of pages available.
page_t* page = (page_t*)((void*) addr);
size_t length = (MEMLEN - addr) / PAGESIZE;
+
+ // Update statistics.
+ __sync_add_and_fetch(&iv_pagesAvail, length);
// Display.
printk("Initializing PageManager with %zd pages starting at %lx...",
@@ -82,6 +85,9 @@ void* PageManager::_allocatePage(size_t n)
while(1);
}
+ // Update statistics.
+ __sync_sub_and_fetch(&iv_pagesAvail, n);
+
return page;
}
@@ -93,6 +99,10 @@ void PageManager::_freePage(void* p, size_t n)
while (n > (size_t)(1 << which_bucket)) which_bucket++;
push_bucket((page_t*)p, which_bucket);
+
+ // Update statistics.
+ __sync_add_and_fetch(&iv_pagesAvail, n);
+
return;
}
OpenPOWER on IntegriCloud