Hi Linus and maintainers, below is a series to switch mips, sh and sparc64 to use the generic GUP code so that we only have one codebase to touch for further improvements to this code. I don't have hardware for any of these architectures, and generally no clue about their page table management, so handle with care. Changes since v3: - improve a few commit messages - clean up gup_fast_permitted a bit more - split the code reordering in gup.c into a separate patch - drop the patch to pass argument in a structure for now Changes since v2: - rebase to mainline to pick up the untagged_addr definition - fix the gup range check to be start <= end to catch the 0 length case - use pfn based version for the missing pud_page/pgd_page definitions - fix a wrong check in the sparc64 version of pte_access_permitted Changes since v1: - fix various issues found by the build bot - cherry pick and use the untagged_addr helper form Andrey - add various refactoring patches to share more code over architectures - move the powerpc hugepd code to mm/gup.c and sync it with the generic hup semantics