Lines Matching +full:compound +full:- +full:device

155 	/* Find owning device's queue/read_ahead_kb control */  in get_finfo()
179 printf("%s: Unknown device type: %s\n", __func__, path); in get_finfo()
183 * Partition of block device - need to find actual device. in get_finfo()
185 * device devname. in get_finfo()
220 ret = snprintf(addr_pattern, MAX_LINE_LENGTH, "%08lx-", in check_swap()
263 MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); in alloc_mapping()
281 * MADV_COLLAPSE is a best-effort request and may fail if an internal
301 * Returns pmd-mapped hugepage in VMA marked VM_HUGEPAGE, filled with
306 void *p = ops->setup_area(1); in alloc_hpage()
308 ops->fault(p, 0, hpage_pmd_size); in alloc_hpage()
314 * khugepaged on low-load system (like a test machine), which in alloc_hpage()
322 if (!ops->check_huge(p, 1)) { in alloc_hpage()
419 if (madvise(((char *)p) + start, end - start, MADV_POPULATE_READ)) { in file_fault()
443 finfo.fd = memfd_create("khugepaged-selftest-collapse-shmem", 0); in shmem_setup_area()
517 else if (!ops->check_huge(p, expect ? nr_hpages : 0)) in __madvise_collapse()
529 if (!ops->check_huge(p, 0)) { in madvise_collapse()
544 if (!ops->check_huge(p, 0)) { in wait_for_scan()
555 while (timeout--) { in wait_for_scan()
556 if (ops->check_huge(p, nr_hpages)) in wait_for_scan()
566 return timeout == -1; in wait_for_scan()
586 ops->fault(p, 0, nr_hpages * hpage_pmd_size); in khugepaged_collapse()
588 if (ops->check_huge(p, expect ? nr_hpages : 0)) in khugepaged_collapse()
649 p = ops->setup_area(nr_hpages); in collapse_full()
650 ops->fault(p, 0, size); in collapse_full()
651 c->collapse("Collapse multiple fully populated PTE table", p, nr_hpages, in collapse_full()
654 ops->cleanup_area(p, size); in collapse_full()
661 p = ops->setup_area(1); in collapse_empty()
662 c->collapse("Do not collapse empty PTE table", p, 1, ops, false); in collapse_empty()
663 ops->cleanup_area(p, hpage_pmd_size); in collapse_empty()
670 p = ops->setup_area(1); in collapse_single_pte_entry()
671 ops->fault(p, 0, page_size); in collapse_single_pte_entry()
672 c->collapse("Collapse PTE table with single PTE entry present", p, in collapse_single_pte_entry()
674 ops->cleanup_area(p, hpage_pmd_size); in collapse_single_pte_entry()
687 p = ops->setup_area(1); in collapse_max_ptes_none()
696 ops->fault(p, 0, (hpage_pmd_nr - max_ptes_none - fault_nr_pages) * page_size); in collapse_max_ptes_none()
697 c->collapse("Maybe collapse with max_ptes_none exceeded", p, 1, in collapse_max_ptes_none()
698 ops, !c->enforce_pte_scan_limits); in collapse_max_ptes_none()
699 validate_memory(p, 0, (hpage_pmd_nr - max_ptes_none - fault_nr_pages) * page_size); in collapse_max_ptes_none()
701 if (c->enforce_pte_scan_limits) { in collapse_max_ptes_none()
702 ops->fault(p, 0, (hpage_pmd_nr - max_ptes_none) * page_size); in collapse_max_ptes_none()
703 c->collapse("Collapse with max_ptes_none PTEs empty", p, 1, ops, in collapse_max_ptes_none()
706 (hpage_pmd_nr - max_ptes_none) * page_size); in collapse_max_ptes_none()
709 ops->cleanup_area(p, hpage_pmd_size); in collapse_max_ptes_none()
717 p = ops->setup_area(1); in collapse_swapin_single_pte()
718 ops->fault(p, 0, hpage_pmd_size); in collapse_swapin_single_pte()
732 c->collapse("Collapse with swapping in single PTE entry", p, 1, ops, in collapse_swapin_single_pte()
736 ops->cleanup_area(p, hpage_pmd_size); in collapse_swapin_single_pte()
744 p = ops->setup_area(1); in collapse_max_ptes_swap()
745 ops->fault(p, 0, hpage_pmd_size); in collapse_max_ptes_swap()
759 c->collapse("Maybe collapse with max_ptes_swap exceeded", p, 1, ops, in collapse_max_ptes_swap()
760 !c->enforce_pte_scan_limits); in collapse_max_ptes_swap()
763 if (c->enforce_pte_scan_limits) { in collapse_max_ptes_swap()
764 ops->fault(p, 0, hpage_pmd_size); in collapse_max_ptes_swap()
778 c->collapse("Collapse with max_ptes_swap pages swapped out", p, in collapse_max_ptes_swap()
783 ops->cleanup_area(p, hpage_pmd_size); in collapse_max_ptes_swap()
800 printf("Split huge page leaving single PTE mapping compound page..."); in collapse_single_pte_entry_compound()
801 madvise(p + page_size, hpage_pmd_size - page_size, MADV_DONTNEED); in collapse_single_pte_entry_compound()
802 if (ops->check_huge(p, 0)) in collapse_single_pte_entry_compound()
807 c->collapse("Collapse PTE table with single PTE mapping compound page", in collapse_single_pte_entry_compound()
811 ops->cleanup_area(p, hpage_pmd_size); in collapse_single_pte_entry_compound()
819 printf("Split huge page leaving single PTE page table full of compound pages..."); in collapse_full_of_compound()
822 if (ops->check_huge(p, 0)) in collapse_full_of_compound()
827 c->collapse("Collapse PTE table full of compound pages", p, 1, ops, in collapse_full_of_compound()
830 ops->cleanup_area(p, hpage_pmd_size); in collapse_full_of_compound()
838 p = ops->setup_area(1); in collapse_compound_extreme()
840 printf("\rConstruct PTE page table full of different PTE-mapped compound pages %3d/%d...", in collapse_compound_extreme()
844 ops->fault(BASE_ADDR, 0, hpage_pmd_size); in collapse_compound_extreme()
845 if (!ops->check_huge(BASE_ADDR, 1)) { in collapse_compound_extreme()
851 p = mremap(BASE_ADDR - i * page_size, in collapse_compound_extreme()
865 BASE_ADDR - (i + 1) * page_size); in collapse_compound_extreme()
872 ops->cleanup_area(BASE_ADDR, hpage_pmd_size); in collapse_compound_extreme()
873 ops->fault(p, 0, hpage_pmd_size); in collapse_compound_extreme()
874 if (!ops->check_huge(p, 1)) in collapse_compound_extreme()
879 c->collapse("Collapse PTE table full of different compound pages", p, 1, in collapse_compound_extreme()
883 ops->cleanup_area(p, hpage_pmd_size); in collapse_compound_extreme()
891 p = ops->setup_area(1); in collapse_fork()
894 ops->fault(p, 0, page_size); in collapse_fork()
895 if (ops->check_huge(p, 0)) in collapse_fork()
906 if (ops->check_huge(p, 0)) in collapse_fork()
911 ops->fault(p, page_size, 2 * page_size); in collapse_fork()
912 c->collapse("Collapse PTE table with single page shared with parent process", in collapse_fork()
916 ops->cleanup_area(p, hpage_pmd_size); in collapse_fork()
924 if (ops->check_huge(p, 0)) in collapse_fork()
929 ops->cleanup_area(p, hpage_pmd_size); in collapse_fork()
944 if (ops->check_huge(p, 1)) in collapse_fork_compound()
952 if (ops->check_huge(p, 0)) in collapse_fork_compound()
956 ops->fault(p, 0, page_size); in collapse_fork_compound()
958 thp_write_num("khugepaged/max_ptes_shared", hpage_pmd_nr - 1); in collapse_fork_compound()
959 c->collapse("Collapse PTE table full of compound pages in child", in collapse_fork_compound()
962 thp_current_settings()->khugepaged.max_ptes_shared); in collapse_fork_compound()
965 ops->cleanup_area(p, hpage_pmd_size); in collapse_fork_compound()
973 if (ops->check_huge(p, 1)) in collapse_fork_compound()
978 ops->cleanup_area(p, hpage_pmd_size); in collapse_fork_compound()
994 if (ops->check_huge(p, 1)) in collapse_max_ptes_shared()
1000 hpage_pmd_nr - max_ptes_shared - 1, hpage_pmd_nr); in collapse_max_ptes_shared()
1001 ops->fault(p, 0, (hpage_pmd_nr - max_ptes_shared - 1) * page_size); in collapse_max_ptes_shared()
1002 if (ops->check_huge(p, 0)) in collapse_max_ptes_shared()
1007 c->collapse("Maybe collapse with max_ptes_shared exceeded", p, in collapse_max_ptes_shared()
1008 1, ops, !c->enforce_pte_scan_limits); in collapse_max_ptes_shared()
1010 if (c->enforce_pte_scan_limits) { in collapse_max_ptes_shared()
1012 hpage_pmd_nr - max_ptes_shared, hpage_pmd_nr); in collapse_max_ptes_shared()
1013 ops->fault(p, 0, (hpage_pmd_nr - max_ptes_shared) * in collapse_max_ptes_shared()
1015 if (ops->check_huge(p, 0)) in collapse_max_ptes_shared()
1020 c->collapse("Collapse with max_ptes_shared PTEs shared", in collapse_max_ptes_shared()
1025 ops->cleanup_area(p, hpage_pmd_size); in collapse_max_ptes_shared()
1033 if (ops->check_huge(p, 1)) in collapse_max_ptes_shared()
1038 ops->cleanup_area(p, hpage_pmd_size); in collapse_max_ptes_shared()
1046 p = ops->setup_area(1); in madvise_collapse_existing_thps()
1047 ops->fault(p, 0, hpage_pmd_size); in madvise_collapse_existing_thps()
1048 c->collapse("Collapse fully populated PTE table...", p, 1, ops, true); in madvise_collapse_existing_thps()
1051 /* c->collapse() will find a hugepage and complain - call directly. */ in madvise_collapse_existing_thps()
1052 __madvise_collapse("Re-collapse PMD-mapped hugepage", p, 1, ops, true); in madvise_collapse_existing_thps()
1054 ops->cleanup_area(p, hpage_pmd_size); in madvise_collapse_existing_thps()
1068 p = ops->setup_area(nr_hpages); in madvise_retracted_page_tables()
1069 ops->fault(p, 0, size); in madvise_retracted_page_tables()
1078 c->collapse("Install huge PMD from page cache", p, nr_hpages, ops, in madvise_retracted_page_tables()
1081 ops->cleanup_area(p, size); in madvise_retracted_page_tables()
1096 fprintf(stderr, "\t\t-h: This help message.\n"); in usage()
1097 fprintf(stderr, "\t\t-s: mTHP size, expressed as page order.\n"); in usage()
1108 while ((opt = getopt(argc, argv, "s:h")) != -1) { in parse_test_type()
1120 argc -= optind; in parse_test_type()
1184 * When testing file-backed memory, the collapse path in main()
1188 * we mem_ops->fault() them in. in main()
1206 default_settings.khugepaged.max_ptes_none = hpage_pmd_nr - 1; in main()
1222 printf("\nRun test: " #t " (%s:%s)\n", c->name, o->name); \ in main()