Hi,

>               for (pgidx = 0; pgidx < pgcnt; pgidx++) {
> +                     if (is_file_hugepages(memfd)) {
> +                             hpage = find_get_page_flags(
> +                                             file_inode(memfd)->i_mapping,
> +                                             pgoff, FGP_ACCESSED);
> +                             if (IS_ERR(hpage)) {
> +                                     ret = PTR_ERR(hpage);
> +                                     goto err;
> +                             }
> +
> +                             page = hpage + (subpgoff % maxsubpgs);
> +                             get_page(page);
> +                             put_page(hpage);

if (hpage && subpgoff == maxsubpgs) {
        put_page(hpage);
        hpage = NULL;
}
if (!hpage) {
        hpage = find_get_page_flags(...)
        [ ... ]
}

Only lookup the huge page when you cross a hugepage border.

take care,
  Gerd

Reply via email to