aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/bank_proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'litmus/bank_proc.c')
-rw-r--r--litmus/bank_proc.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/litmus/bank_proc.c b/litmus/bank_proc.c
index df9f5730ed05..2284f4fd5816 100644
--- a/litmus/bank_proc.c
+++ b/litmus/bank_proc.c
@@ -247,8 +247,8 @@ static int do_add_pages(void)
247 counter[color]++; 247 counter[color]++;
248 // printk("page(%d) = color %x, bank %x, [color] =%d \n", color, page_color(page), page_bank(page), atomic_read(&color_groups[color].nr_pages)); 248 // printk("page(%d) = color %x, bank %x, [color] =%d \n", color, page_color(page), page_bank(page), atomic_read(&color_groups[color].nr_pages));
249 //show_nr_pages(); 249 //show_nr_pages();
250 //if (atomic_read(&color_groups[color].nr_pages) < PAGES_PER_COLOR && color>=32) { 250 if (atomic_read(&color_groups[color].nr_pages) < PAGES_PER_COLOR && color>=32) {
251 if (atomic_read(&color_groups[color].nr_pages) < PAGES_PER_COLOR) { 251 //if (atomic_read(&color_groups[color].nr_pages) < PAGES_PER_COLOR) {
252 //if ( PAGES_PER_COLOR && color>=16*2) { 252 //if ( PAGES_PER_COLOR && color>=16*2) {
253 add_page_to_color_list(page); 253 add_page_to_color_list(page);
254 // printk("add page(%d) = color %x, bank %x\n", color, page_color(page), page_bank(page)); 254 // printk("add page(%d) = color %x, bank %x\n", color, page_color(page), page_bank(page));
@@ -304,7 +304,7 @@ out:
304 * This function should not be accessed by others directly. 304 * This function should not be accessed by others directly.
305 * 305 *
306 */ 306 */
307static struct page *new_alloc_page_color( unsigned long color) 307static struct page *new_alloc_page_color( unsigned long color, int do_refill)
308{ 308{
309// printk("allocate new page color = %d\n", color); 309// printk("allocate new page color = %d\n", color);
310 struct color_group *cgroup; 310 struct color_group *cgroup;
@@ -333,18 +333,19 @@ static struct page *new_alloc_page_color( unsigned long color)
333out_unlock: 333out_unlock:
334 spin_unlock(&cgroup->lock); 334 spin_unlock(&cgroup->lock);
335out: 335out:
336 if( smallest_nr_pages() == 0) 336 if( smallest_nr_pages() == 0 && do_refill == 1)
337 { 337 {
338 do_add_pages(); 338 do_add_pages();
339 // printk("ERROR(bank_proc.c) = We don't have enough pages in bank_proc.c\n"); 339 // printk("ERROR(bank_proc.c) = We don't have enough pages in bank_proc.c\n");
340 340
341 } 341 }
342
342 return rPage; 343 return rPage;
343} 344}
344 345
345struct page* get_colored_page(unsigned long color) 346struct page* get_colored_page(unsigned long color)
346{ 347{
347 return new_alloc_page_color(color); 348 return new_alloc_page_color(color, 1);
348} 349}
349 350
350/* 351/*
@@ -368,12 +369,12 @@ struct page *new_alloc_page(struct page *page, unsigned long node, int **x)
368 unsigned int color; 369 unsigned int color;
369 370
370 371
371 unsigned int idx = 0; 372 unsigned int idx = 0;
373 do {
372 idx += num_by_bitmask_index(set_partition[node], set_index[node]); 374 idx += num_by_bitmask_index(set_partition[node], set_index[node]);
373 idx += number_cachecolors* num_by_bitmask_index(bank_partition[node], bank_index[node]); 375 idx += number_cachecolors* num_by_bitmask_index(bank_partition[node], bank_index[node]);
374 //printk("node = %d, idx = %d\n", node, idx); 376 rPage = new_alloc_page_color(idx, 0);
375 377 } while (rPage == NULL);
376 rPage = new_alloc_page_color(idx);
377 378
378 379
379 set_index[node] = (set_index[node]+1) % counting_one_set(set_partition[node]); 380 set_index[node] = (set_index[node]+1) % counting_one_set(set_partition[node]);