diff options
| -rw-r--r-- | litmus/bank_proc.c | 19 | ||||
| -rw-r--r-- | litmus/cache_proc.c | 52 | ||||
| -rw-r--r-- | litmus/litmus.c | 110 | ||||
| -rw-r--r-- | litmus/polling_reservations.c | 3 | ||||
| -rw-r--r-- | litmus/reservation.c | 3 | ||||
| -rw-r--r-- | litmus/sched_mc2.c | 362 | ||||
| -rw-r--r-- | mm/migrate.c | 12 | ||||
| -rw-r--r-- | mm/rmap.c | 4 |
8 files changed, 53 insertions, 512 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]); |
diff --git a/litmus/cache_proc.c b/litmus/cache_proc.c index 87077d4366dc..15c1b0145be2 100644 --- a/litmus/cache_proc.c +++ b/litmus/cache_proc.c | |||
| @@ -1006,59 +1006,9 @@ int setup_flusher_array(void) | |||
| 1006 | } | 1006 | } |
| 1007 | 1007 | ||
| 1008 | flusher_pages[way] = flusher_color_arr; | 1008 | flusher_pages[way] = flusher_color_arr; |
| 1009 | /* This is ugly. */ | ||
| 1010 | for (color = 0; color < MAX_NR_COLORS; color++) { | 1009 | for (color = 0; color < MAX_NR_COLORS; color++) { |
| 1011 | int node; | 1010 | int node; |
| 1012 | switch (color) { | 1011 | node = color + 112; // populate from bank 7 |
| 1013 | case 0: | ||
| 1014 | node = 48; | ||
| 1015 | break; | ||
| 1016 | case 1: | ||
| 1017 | node = 49; | ||
| 1018 | break; | ||
| 1019 | case 2: | ||
| 1020 | node = 50; | ||
| 1021 | break; | ||
| 1022 | case 3: | ||
| 1023 | node = 51; | ||
| 1024 | break; | ||
| 1025 | case 4: | ||
| 1026 | node = 68; | ||
| 1027 | break; | ||
| 1028 | case 5: | ||
| 1029 | node = 69; | ||
| 1030 | break; | ||
| 1031 | case 6: | ||
| 1032 | node = 86; | ||
| 1033 | break; | ||
| 1034 | case 7: | ||
| 1035 | node = 87; | ||
| 1036 | break; | ||
| 1037 | case 8: | ||
| 1038 | node = 88; | ||
| 1039 | break; | ||
| 1040 | case 9: | ||
| 1041 | node = 105; | ||
| 1042 | break; | ||
| 1043 | case 10: | ||
| 1044 | node = 106; | ||
| 1045 | break; | ||
| 1046 | case 11: | ||
| 1047 | node = 107; | ||
| 1048 | break; | ||
| 1049 | case 12: | ||
| 1050 | node = 108; | ||
| 1051 | break; | ||
| 1052 | case 13: | ||
| 1053 | node = 125; | ||
| 1054 | break; | ||
| 1055 | case 14: | ||
| 1056 | node = 126; | ||
| 1057 | break; | ||
| 1058 | case 15: | ||
| 1059 | node = 127; | ||
| 1060 | break; | ||
| 1061 | } | ||
| 1062 | page = get_colored_page(node); | 1012 | page = get_colored_page(node); |
| 1063 | if (!page) { | 1013 | if (!page) { |
| 1064 | printk(KERN_WARNING "no more colored pages\n"); | 1014 | printk(KERN_WARNING "no more colored pages\n"); |
diff --git a/litmus/litmus.c b/litmus/litmus.c index 1f5e49114b2c..7fbabcee64d5 100644 --- a/litmus/litmus.c +++ b/litmus/litmus.c | |||
| @@ -385,7 +385,7 @@ asmlinkage long sys_set_page_color(int cpu) | |||
| 385 | put_task_struct(current); | 385 | put_task_struct(current); |
| 386 | 386 | ||
| 387 | down_read(&mm->mmap_sem); | 387 | down_read(&mm->mmap_sem); |
| 388 | TRACE_TASK(current, "SYSCALL set_page_color\n"); | 388 | |
| 389 | vma_itr = mm->mmap; | 389 | vma_itr = mm->mmap; |
| 390 | /* Iterate all vm_area_struct */ | 390 | /* Iterate all vm_area_struct */ |
| 391 | while (vma_itr != NULL) { | 391 | while (vma_itr != NULL) { |
| @@ -439,10 +439,6 @@ asmlinkage long sys_set_page_color(int cpu) | |||
| 439 | lib_page->r_pfn[cpu_i] = INVALID_PFN; | 439 | lib_page->r_pfn[cpu_i] = INVALID_PFN; |
| 440 | } | 440 | } |
| 441 | list_add_tail(&lib_page->list, &shared_lib_pages); | 441 | list_add_tail(&lib_page->list, &shared_lib_pages); |
| 442 | TRACE_TASK(current, "NEW PAGE %05lx ADDED.\n", lib_page->master_pfn); | ||
| 443 | } | ||
| 444 | else { | ||
| 445 | TRACE_TASK(current, "FOUND PAGE %05lx in the list.\n", lib_page->master_pfn); | ||
| 446 | } | 442 | } |
| 447 | 443 | ||
| 448 | /* add to task_shared_pagelist */ | 444 | /* add to task_shared_pagelist */ |
| @@ -475,15 +471,11 @@ asmlinkage long sys_set_page_color(int cpu) | |||
| 475 | } | 471 | } |
| 476 | 472 | ||
| 477 | ret = 0; | 473 | ret = 0; |
| 478 | if (!is_realtime(current)) | 474 | lv = tsk_rt(current)->mc2_data->crit; |
| 475 | if (cpu == -1) | ||
| 479 | node = 8; | 476 | node = 8; |
| 480 | else { | 477 | else |
| 481 | lv = tsk_rt(current)->mc2_data->crit; | 478 | node = cpu*2 + lv; |
| 482 | if (cpu == -1) | ||
| 483 | node = 8; | ||
| 484 | else | ||
| 485 | node = cpu*2 + lv; | ||
| 486 | } | ||
| 487 | 479 | ||
| 488 | /* Migrate private pages */ | 480 | /* Migrate private pages */ |
| 489 | if (!list_empty(&pagelist)) { | 481 | if (!list_empty(&pagelist)) { |
| @@ -511,60 +503,11 @@ asmlinkage long sys_set_page_color(int cpu) | |||
| 511 | |||
