Re: [PATCH v3 2/3] mm/gup: remove unneeded checking in follow_page_pte()

From: David Hildenbrand
Date: Tue Apr 08 2025 - 05:16:07 EST


On 08.04.25 11:04, Oscar Salvador wrote:
On Mon, Apr 07, 2025 at 11:03:05AM +0800, Baoquan He wrote:
In __get_user_pages(), it will traverse page table and take a reference
to the page the given user address corresponds to if GUP_GET or GUP_PIN
is set. However, it's not supported both GUP_GET and GUP_PIN are set.
Even though this check need be done, it should be done earlier, but not
doing it till entering into follow_page_pte() and failed.

Furthermore, this checking has been done in is_valid_gup_args() and all
external users of __get_user_pages() will call is_valid_gup_args() to
catch the illegal setting. We don't need to worry about internal users
of __get_user_pages() because the gup_flags are set by MM code correctly.

Here remove the checking in follow_page_pte(), and add VM_WARN_ON_ONCE()
to catch the possible exceptional setting just in case.

And also change the VM_BUG_ON to VM_WARN_ON_ONCE() for checking
(!!pages != !!(gup_flags & (FOLL_GET | FOLL_PIN))) because the checking
has been done in is_valid_gup_args() for external users of __get_user_pages().

I will also note that you changed the flags check to VM_WARN_ON_ONCE.
I guess this is fine as we have the WARN_ON_ONCE version in
is_valid_gup_args().


Yes, that was my reasoning when I proposed it.

Signed-off-by: Baoquan He <bhe@xxxxxxxxxx>

LGTM,

Reviewed-by: Oscar Salvador <osalvador@xxxxxxx>



Acked-by: David Hildenbrand <david@xxxxxxxxxx>

--
Cheers,

David / dhildenb