aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNamhoon Kim <namhoonk@cs.unc.edu>2016-10-12 19:13:30 -0400
committerNamhoon Kim <namhoonk@cs.unc.edu>2016-10-12 19:13:30 -0400
commita53078ec5cc167413bad6dd7ce3c1fc8ec97d39e (patch)
tree00d403a486ddbdb6425fd5fe7141c98c08169417
parent2bed3116318647479e14aa22ff762bed16c066b4 (diff)
RTAS 2017 Submission ver.wip-shared-lib2
-rw-r--r--litmus/bank_proc.c19
-rw-r--r--litmus/cache_proc.c52
-rw-r--r--litmus/litmus.c110
-rw-r--r--litmus/polling_reservations.c3
-rw-r--r--litmus/reservation.c3
-rw-r--r--litmus/sched_mc2.c362
-rw-r--r--mm/migrate.c12
-rw-r--r--mm/rmap.c4
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 */
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]);
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 }