IHK query free memory request and implementation

This commit is contained in:
Balazs Gerofi bgerofi@riken.jp
2013-06-24 09:00:48 +09:00
parent 15ac1e246a
commit f9cb60ef33
4 changed files with 53 additions and 0 deletions

View File

@@ -26,6 +26,7 @@ int ihk_mc_unregister_interrupt_handler(int vector,
enum ihk_mc_gv_type {
IHK_GV_IKC = 1,
IHK_GV_QUERY_FREE_MEM = 2
};
int ihk_mc_get_vector(enum ihk_mc_gv_type type);

View File

@@ -24,5 +24,6 @@ unsigned long ihk_pagealloc_alloc(void *__desc, int npages);
void ihk_pagealloc_reserve(void *desc, unsigned long start, unsigned long end);
void ihk_pagealloc_free(void *__desc, unsigned long address, int npages);
unsigned long ihk_pagealloc_count(void *__desc);
int ihk_pagealloc_query_free(void *__desc);
#endif

View File

@@ -229,6 +229,32 @@ unsigned long ihk_pagealloc_count(void *__desc)
return n;
}
int ihk_pagealloc_query_free(void *__desc)
{
struct ihk_page_allocator_desc *desc = __desc;
unsigned int mi;
int j;
unsigned long v, flags;
int npages = 0;
flags = ihk_mc_spinlock_lock(&desc->lock);
for (mi = 0; mi < desc->count; mi++) {
v = desc->map[mi];
if (v == (unsigned long)-1)
continue;
for (j = 0; j < 64; j++) {
if (!(v & ((unsigned long)1 << j))) { /* free */
npages++;
}
}
}
ihk_mc_spinlock_unlock(&desc->lock, flags);
return npages;
}
void __ihk_pagealloc_zero_free_pages(void *__desc)
{
struct ihk_page_allocator_desc *desc = __desc;