summaryrefslogtreecommitdiffstats
path: root/src/include/kernel/pagemgr.H
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2011-10-20 15:49:12 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2011-10-25 15:12:23 -0500
commit0ad20184aec21ef0560a9eee7e7c26a36ace07e1 (patch)
treebb402e0c2342a791074fde9939701a1bbf9dedef /src/include/kernel/pagemgr.H
parent5ab488739184f2b2649193e3f9da695ee334d04f (diff)
downloadtalos-hostboot-0ad20184aec21ef0560a9eee7e7c26a36ace07e1.tar.gz
talos-hostboot-0ad20184aec21ef0560a9eee7e7c26a36ace07e1.zip
Update kernel 'EVICT' pages path to cast out pages when low on memory.
Change-Id: I79b9cfad5d80267c6709b094d7f852d89e08534b Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/452 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/include/kernel/pagemgr.H')
-rw-r--r--src/include/kernel/pagemgr.H61
1 files changed, 36 insertions, 25 deletions
diff --git a/src/include/kernel/pagemgr.H b/src/include/kernel/pagemgr.H
index 3ed2c1b34..41fb1e493 100644
--- a/src/include/kernel/pagemgr.H
+++ b/src/include/kernel/pagemgr.H
@@ -39,6 +39,7 @@
class PageManager
{
public:
+
static void init();
static void* allocatePage(size_t n = 1);
@@ -57,53 +58,63 @@ class PageManager
*/
static void coalesce( void );
- enum
- {
- MEMLEN = VmmManager::HTABORG,
+ /**
+ * Retrieve the number of available pages
+ * @returns Number of free pages
+ */
+ static uint64_t availPages();
- BUCKETS = 16,
- };
+ enum
+ {
+ MEMLEN = VmmManager::HTABORG,
+ BUCKETS = 16,
+ };
protected:
- PageManager();
- ~PageManager() {};
+
+ PageManager();
+ ~PageManager() {};
private:
- void* _allocatePage(size_t);
- void _freePage(void*, size_t);
+
+ void* _allocatePage(size_t);
+ void _freePage(void*, size_t);
void _coalesce( void ); //!< see coalesce()
/** see queryAvail() */
- ALWAYS_INLINE
- uint64_t _queryAvail() const
+ ALWAYS_INLINE uint64_t _queryAvail() const
{
return (100*iv_pagesAvail)/iv_pagesTotal;
}
- ALWAYS_INLINE
- uint64_t firstPageAddr( void )
+ ALWAYS_INLINE uint64_t firstPageAddr( void )
{
return ALIGN_PAGE(VFS_LAST_ADDRESS);
}
-
- /** Statistics on number of free pages (for debug) */
+ /** see availPages() */
+ ALWAYS_INLINE uint64_t _availPages() const
+ {
+ return iv_pagesAvail;
+ }
+
+ /** Statistics on number of free pages (for debug) */
uint64_t iv_pagesAvail;
- /** Total number of pages */
+ /** Total number of pages */
uint64_t iv_pagesTotal;
- struct page_t
- {
- page_t* next; //!< Next block of pages
+ static size_t cv_coalesce_count; //!< running coalesced counter
+
+ struct page_t
+ {
+ page_t* next; //!< Next block of pages
page_t* prev; //!< Prev block of pages
page_t* key; //!< Key for pqueue
- };
- Util::Lockfree::Stack<page_t> first_page[BUCKETS];
+ };
+ Util::Lockfree::Stack<page_t> first_page[BUCKETS];
- page_t* pop_bucket(size_t);
- void push_bucket(page_t*, size_t);
-
- static size_t cv_coalesce_count; //!< running coalesced counter
+ page_t* pop_bucket(size_t);
+ void push_bucket(page_t*, size_t);
};
#endif
OpenPOWER on IntegriCloud