Lines Matching refs:level
175 static void close_hugetlbfs(int level) in close_hugetlbfs() argument
177 if (level >= HUGETLB_LV_MAX) { in close_hugetlbfs()
182 if (hugetlb_priv[level].fd >= 0) { in close_hugetlbfs()
183 close(hugetlb_priv[level].fd); in close_hugetlbfs()
184 hugetlb_priv[level].fd = -1; in close_hugetlbfs()
188 static bool should_enable_hugetlb_level(int level) in should_enable_hugetlb_level() argument
190 if (level >= HUGETLB_LV_MAX) { in should_enable_hugetlb_level()
194 if (hugetlb_priv[level].fd < 0) in should_enable_hugetlb_level()
197 return (hugetlb_priv[level].lowmem > 0 || in should_enable_hugetlb_level()
198 hugetlb_priv[level].fbmem > 0 || in should_enable_hugetlb_level()
199 hugetlb_priv[level].biosmem > 0 || in should_enable_hugetlb_level()
200 hugetlb_priv[level].highmem > 0); in should_enable_hugetlb_level()
209 static int mmap_hugetlbfs_from_level(struct vmctx *ctx, int level, size_t len, in mmap_hugetlbfs_from_level() argument
216 if (level >= HUGETLB_LV_MAX) { in mmap_hugetlbfs_from_level()
225 fd = hugetlb_priv[level].fd; in mmap_hugetlbfs_from_level()
244 pagesz = hugetlb_priv[level].pg_size; in mmap_hugetlbfs_from_level()
263 int level, ret = 0, pg_size; in mmap_hugetlbfs() local
265 for (level = hugetlb_lv_max - 1; level >= HUGETLB_LV1; level--) { in mmap_hugetlbfs()
266 get_param(&hugetlb_priv[level], &len, &skip); in mmap_hugetlbfs()
267 pg_size = hugetlb_priv[level].pg_size; in mmap_hugetlbfs()
270 ret = mmap_hugetlbfs_from_level(ctx, level, len, offset, skip, addr); in mmap_hugetlbfs()
272 if (ret < 0 && level > HUGETLB_LV1) { in mmap_hugetlbfs()
274 &hugetlb_priv[level], &hugetlb_priv[level-1], in mmap_hugetlbfs()
276 } else if (ret < 0 && level == HUGETLB_LV1) { in mmap_hugetlbfs()
413 static void reserve_more_pages(int level) in reserve_more_pages() argument
419 orig_pages = read_sys_info(hugetlb_priv[level].nr_pages_path); in reserve_more_pages()
420 total_pages = orig_pages + hugetlb_priv[level].pages_delta; in reserve_more_pages()
422 total_pages, hugetlb_priv[level].nr_pages_path); in reserve_more_pages()
433 cur_pages = read_sys_info(hugetlb_priv[level].nr_pages_path); in reserve_more_pages()
434 hugetlb_priv[level].pages_delta = total_pages - cur_pages; in reserve_more_pages()
440 int level; in release_larger_freepage() local
445 for (level = hugetlb_lv_max - 1; level >= level_limit; level--) { in release_larger_freepage()
446 if (hugetlb_priv[level].pages_delta >= 0) in release_larger_freepage()
450 orig_pages = read_sys_info(hugetlb_priv[level].nr_pages_path); in release_larger_freepage()
453 total_pages, hugetlb_priv[level].nr_pages_path); in release_larger_freepage()
462 cur_pages = read_sys_info(hugetlb_priv[level].nr_pages_path); in release_larger_freepage()
466 hugetlb_priv[level].pages_delta++; in release_larger_freepage()
471 if (level < level_limit) in release_larger_freepage()
494 int level; in hugetlb_reserve_pages() local
497 for (level = hugetlb_lv_max - 1; level >= HUGETLB_LV1; level--) { in hugetlb_reserve_pages()
498 if (hugetlb_priv[level].pages_delta <= 0) in hugetlb_reserve_pages()
502 reserve_more_pages(level); in hugetlb_reserve_pages()
505 if (hugetlb_priv[level].pages_delta <= 0) in hugetlb_reserve_pages()
513 if (level > HUGETLB_LV1) { in hugetlb_reserve_pages()
514 left_gap = hugetlb_priv[level].pages_delta; in hugetlb_reserve_pages()
515 pg_size = hugetlb_priv[level].pg_size; in hugetlb_reserve_pages()
516 hugetlb_priv[level - 1].pages_delta += (size_t)left_gap in hugetlb_reserve_pages()
517 * (pg_size / hugetlb_priv[level - 1].pg_size); in hugetlb_reserve_pages()
526 if (release_larger_freepage(level + 1)) in hugetlb_reserve_pages()
527 level++; in hugetlb_reserve_pages()
532 if (level >= HUGETLB_LV1) { in hugetlb_reserve_pages()
534 level, left_gap); in hugetlb_reserve_pages()
546 int level; in init_hugetlb() local
571 for (level = HUGETLB_LV1; level < HUGETLB_LV_MAX; level++) { in init_hugetlb()
572 hugetlb_priv[level].fd = -1; in init_hugetlb()
573 fd = memfd_create("acrn_memfd", hugetlb_priv[level].flags); in init_hugetlb()
577 hugetlb_priv[level].fd = fd; in init_hugetlb()
580 if (level == HUGETLB_LV1) /* mount fail for level 1 */ in init_hugetlb()
582 else if (level == HUGETLB_LV2) /* mount fail for level 2 */ in init_hugetlb()
591 hugetlb_lv_max = level; in init_hugetlb()
598 int level; in uninit_hugetlb() local
599 for (level = HUGETLB_LV1; level < hugetlb_lv_max; level++) { in uninit_hugetlb()
600 if (hugetlb_priv[level].fd > 0) in uninit_hugetlb()
601 close(hugetlb_priv[level].fd); in uninit_hugetlb()
602 hugetlb_priv[level].fd = -1; in uninit_hugetlb()
610 int level; in hugetlb_setup_memory() local
627 for (level = HUGETLB_LV1; level < HUGETLB_LV_MAX; level++) { in hugetlb_setup_memory()
628 if (hugetlb_priv[level].fd > 0) in hugetlb_setup_memory()
631 fd = memfd_create("acrn_memfd", hugetlb_priv[level].flags); in hugetlb_setup_memory()
634 level); in hugetlb_setup_memory()
637 hugetlb_priv[level].fd = fd; in hugetlb_setup_memory()
666 for (level = hugetlb_lv_max - 1; level >= HUGETLB_LV1; level--) { in hugetlb_setup_memory()
667 if (hugetlb_priv[level].fd < 0) { in hugetlb_setup_memory()
668 hugetlb_priv[level].lowmem = 0; in hugetlb_setup_memory()
669 hugetlb_priv[level].highmem = 0; in hugetlb_setup_memory()
670 hugetlb_priv[level].biosmem = 0; in hugetlb_setup_memory()
671 hugetlb_priv[level].fbmem = 0; in hugetlb_setup_memory()
674 hugetlb_priv[level].lowmem = in hugetlb_setup_memory()
675 ALIGN_DOWN(lowmem, hugetlb_priv[level].pg_size); in hugetlb_setup_memory()
676 hugetlb_priv[level].fbmem = in hugetlb_setup_memory()
677 ALIGN_DOWN(fbmem, hugetlb_priv[level].pg_size); in hugetlb_setup_memory()
678 hugetlb_priv[level].biosmem = in hugetlb_setup_memory()
679 ALIGN_DOWN(biosmem, hugetlb_priv[level].pg_size); in hugetlb_setup_memory()
680 hugetlb_priv[level].highmem = in hugetlb_setup_memory()
681 ALIGN_DOWN(highmem, hugetlb_priv[level].pg_size); in hugetlb_setup_memory()
683 if (level > HUGETLB_LV1) { in hugetlb_setup_memory()
684 hugetlb_priv[level-1].lowmem = lowmem = in hugetlb_setup_memory()
685 lowmem - hugetlb_priv[level].lowmem; in hugetlb_setup_memory()
686 hugetlb_priv[level-1].fbmem = fbmem = in hugetlb_setup_memory()
687 fbmem - hugetlb_priv[level].fbmem; in hugetlb_setup_memory()
688 hugetlb_priv[level-1].biosmem = biosmem = in hugetlb_setup_memory()
689 biosmem - hugetlb_priv[level].biosmem; in hugetlb_setup_memory()
690 hugetlb_priv[level-1].highmem = highmem = in hugetlb_setup_memory()
691 highmem - hugetlb_priv[level].highmem; in hugetlb_setup_memory()
705 for (level = hugetlb_lv_max - 1; level >= HUGETLB_LV1; level--) { in hugetlb_setup_memory()
706 if (should_enable_hugetlb_level(level)) { in hugetlb_setup_memory()
707 total_size += hugetlb_priv[level].pg_size; in hugetlb_setup_memory()
714 for (level = HUGETLB_LV1; level < hugetlb_lv_max; level++) { in hugetlb_setup_memory()
716 level, in hugetlb_setup_memory()
717 hugetlb_priv[level].lowmem, in hugetlb_setup_memory()
718 hugetlb_priv[level].fbmem, in hugetlb_setup_memory()
719 hugetlb_priv[level].biosmem, in hugetlb_setup_memory()
720 hugetlb_priv[level].highmem); in hugetlb_setup_memory()
733 for (level = hugetlb_lv_max - 1; level >= HUGETLB_LV1; level--) { in hugetlb_setup_memory()
734 if (should_enable_hugetlb_level(level)) { in hugetlb_setup_memory()
736 hugetlb_priv[level].pg_size); in hugetlb_setup_memory()
772 for (level = HUGETLB_LV1; level < hugetlb_lv_max; level++) { in hugetlb_setup_memory()
773 if (hugetlb_priv[level].fd > 0) { in hugetlb_setup_memory()
774 mem_size_level = hugetlb_priv[level].lowmem + in hugetlb_setup_memory()
775 hugetlb_priv[level].highmem + in hugetlb_setup_memory()
776 hugetlb_priv[level].biosmem + in hugetlb_setup_memory()
777 hugetlb_priv[level].fbmem; in hugetlb_setup_memory()
778 if (ftruncate(hugetlb_priv[level].fd, mem_size_level) == -1) { in hugetlb_setup_memory()
780 level); in hugetlb_setup_memory()
784 if (fcntl(hugetlb_priv[level].fd, F_ADD_SEALS, in hugetlb_setup_memory()
787 level); in hugetlb_setup_memory()
798 for (level = HUGETLB_LV1; level < hugetlb_lv_max; level++) { in hugetlb_setup_memory()
800 level, in hugetlb_setup_memory()
801 hugetlb_priv[level].lowmem, in hugetlb_setup_memory()
802 hugetlb_priv[level].biosmem, in hugetlb_setup_memory()
803 hugetlb_priv[level].highmem); in hugetlb_setup_memory()
841 for (level = HUGETLB_LV1; level < hugetlb_lv_max; level++) { in hugetlb_setup_memory()
842 close_hugetlbfs(level); in hugetlb_setup_memory()
850 int level; in hugetlb_unsetup_memory() local
858 for (level = HUGETLB_LV1; level < hugetlb_lv_max; level++) { in hugetlb_unsetup_memory()
859 close_hugetlbfs(level); in hugetlb_unsetup_memory()