aboutsummaryrefslogtreecommitdiffstats
path: root/litmus
diff options
context:
space:
mode:
authorNamhoon Kim <namhoonk@cs.unc.edu>2016-09-25 16:31:19 -0400
committerNamhoon Kim <namhoonk@cs.unc.edu>2016-09-25 16:31:19 -0400
commitcbe4c29edb5e783a5839d72705c18e5a795c4e05 (patch)
tree5f1b36d0a82f82351fdfa3243ea769e8c83d65a5 /litmus
parentba1e5e20e2a3481b973244e84597ed246a04fed0 (diff)
Fix isolrate_lru_page for shared pages
Diffstat (limited to 'litmus')
-rw-r--r--litmus/litmus.c54
1 files changed, 38 insertions, 16 deletions
diff --git a/litmus/litmus.c b/litmus/litmus.c
index ad3d50c78bb1..f88cd16ab86d 100644
--- a/litmus/litmus.c
+++ b/litmus/litmus.c
@@ -440,10 +440,16 @@ asmlinkage long sys_set_page_color(int cpu)
440 } 440 }
441 441
442 /* add to task_shared_pagelist */ 442 /* add to task_shared_pagelist */
443 list_add_tail(&old_page->lru, &task_shared_pagelist); 443 ret = isolate_lru_page(old_page);
444 444 if (!ret) {
445 nr_shared_pages++; 445 list_add_tail(&old_page->lru, &task_shared_pagelist);
446 TRACE_TASK(current, "SHARED\n"); 446 inc_zone_page_state(old_page, NR_ISOLATED_ANON + !PageSwapBacked(old_page));
447 nr_shared_pages++;
448 TRACE_TASK(current, "SHARED isolate_lur_page success\n");
449 } else {
450 TRACE_TASK(current, "SHARED isolate_lru_page failed\n");
451 }
452 put_page(old_page);
447 } 453 }
448 else { 454 else {
449 ret = isolate_lru_page(old_page); 455 ret = isolate_lru_page(old_page);
@@ -489,7 +495,7 @@ asmlinkage long sys_set_page_color(int cpu)
489 putback_movable_pages(&pagelist); 495 putback_movable_pages(&pagelist);
490 } 496 }
491 } 497 }
492 498/*
493 { 499 {
494 struct list_head *pos, *q; 500 struct list_head *pos, *q;
495 list_for_each_safe(pos, q, &task_shared_pagelist) { 501 list_for_each_safe(pos, q, &task_shared_pagelist) {
@@ -504,7 +510,7 @@ asmlinkage long sys_set_page_color(int cpu)
504 } 510 }
505 } 511 }
506 } 512 }
507 513*/
508 if (!list_empty(&task_shared_pagelist)) { 514 if (!list_empty(&task_shared_pagelist)) {
509 ret = replicate_pages(&task_shared_pagelist, new_alloc_page, NULL, node, MIGRATE_SYNC, MR_SYSCALL); 515 ret = replicate_pages(&task_shared_pagelist, new_alloc_page, NULL, node, MIGRATE_SYNC, MR_SYSCALL);
510 TRACE_TASK(current, "%ld shared pages not migrated.\n", ret); 516 TRACE_TASK(current, "%ld shared pages not migrated.\n", ret);
@@ -590,12 +596,14 @@ asmlinkage long sys_test_call(unsigned int param)
590 down_read(&current->mm->mmap_sem); 596 down_read(&current->mm->mmap_sem);
591 vma_itr = current->mm->mmap; 597 vma_itr = current->mm->mmap;
592 while (vma_itr != NULL) { 598 while (vma_itr != NULL) {
593 printk(KERN_INFO "--------------------------------------------\n"); 599 int i, num_pages;
594 printk(KERN_INFO "vm_start : %lx\n", vma_itr->vm_start); 600 struct page* old_page;
595 printk(KERN_INFO "vm_end : %lx\n", vma_itr->vm_end); 601 TRACE_TASK(current, "--------------------------------------------\n");
596 printk(KERN_INFO "vm_flags : %lx\n", vma_itr->vm_flags); 602 TRACE_TASK(current, "vm_start : %lx\n", vma_itr->vm_start);
597 printk(KERN_INFO "vm_prot : %x\n", pgprot_val(vma_itr->vm_page_prot)); 603 TRACE_TASK(current, "vm_end : %lx\n", vma_itr->vm_end);
598 printk(KERN_INFO "VM_SHARED? %ld\n", vma_itr->vm_flags & VM_SHARED); 604 TRACE_TASK(current, "vm_flags : %lx\n", vma_itr->vm_flags);
605 TRACE_TASK(current, "vm_prot : %x\n", pgprot_val(vma_itr->vm_page_prot));
606 TRACE_TASK(current, "VM_SHARED? %ld\n", vma_itr->vm_flags & VM_SHARED);
599 /* if (vma_itr->vm_file) { 607 /* if (vma_itr->vm_file) {
600 struct file *fp = vma_itr->vm_file; 608 struct file *fp = vma_itr->vm_file;
601 unsigned long fcount = atomic_long_read(&(fp->f_count)); 609 unsigned long fcount = atomic_long_read(&(fp->f_count));
@@ -606,14 +614,28 @@ asmlinkage long sys_test_call(unsigned int param)
606 } 614 }
607 printk(KERN_INFO "vm_prot2 : %x\n", pgprot_val(vma_itr->vm_page_prot)); 615 printk(KERN_INFO "vm_prot2 : %x\n", pgprot_val(vma_itr->vm_page_prot));
608 */ 616 */
617 num_pages = (vma_itr->vm_end - vma_itr->vm_start) / PAGE_SIZE;
618 for (i = 0; i < num_pages; i++) {
619 old_page = follow_page(vma_itr, vma_itr->vm_start + PAGE_SIZE*i, FOLL_GET|FOLL_SPLIT);
620
621 if (IS_ERR(old_page))
622 continue;
623 if (!old_page)
624 continue;
625
626 if (PageReserved(old_page)) {
627 TRACE("Reserved Page!\n");
628 put_page(old_page);
629 continue;
630 }
631
632 TRACE_TASK(current, "addr: %08x, pfn: %ld, _mapcount: %d, _count: %d flags: %s%s%s\n", vma_itr->vm_start + PAGE_SIZE*i, page_to_pfn(old_page), page_mapcount(old_page), page_count(old_page), vma_itr->vm_flags&VM_READ?"r":"-", vma_itr->vm_flags&VM_WRITE?"w":"-", vma_itr->vm_flags&VM_EXEC?"x":"-");
633 put_page(old_page);
634 }
609 vma_itr = vma_itr->vm_next; 635 vma_itr = vma_itr->vm_next;
610 } 636 }
611 printk(KERN_INFO "--------------------------------------------\n"); 637 printk(KERN_INFO "--------------------------------------------\n");
612 up_read(&current->mm->mmap_sem); 638 up_read(&current->mm->mmap_sem);
613
614 local_irq_save(flags);
615 l2c310_flush_all();
616 local_irq_restore(flags);
617 } 639 }
618 else if (param == 1) { 640 else if (param == 1) {
619 int i; 641 int i;