diff options
Diffstat (limited to 'litmus/bank_proc.c')
-rw-r--r-- | litmus/bank_proc.c | 19 |
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 | */ |
307 | static struct page *new_alloc_page_color( unsigned long color) | 307 | static 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) | |||
333 | out_unlock: | 333 | out_unlock: |
334 | spin_unlock(&cgroup->lock); | 334 | spin_unlock(&cgroup->lock); |
335 | out: | 335 | out: |
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 | ||
345 | struct page* get_colored_page(unsigned long color) | 346 | struct 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]); |