Re: [PATCH v2 3/4] mm/gup: allow FOLL_LONGTERM & FOLL_PCI_P2PDMA

From: John Hubbard
Date: Fri Jun 14 2024 - 22:46:21 EST


On 6/11/24 11:27 AM, Martin Oliveira wrote:
This check existed originally due to concerns that P2PDMA needed to copy
fsdax until pgmap refcounts were fixed (see [1]).

The P2PDMA infrastructure will only call unmap_mapping_range() when the
underlying device is unbound, and immediately after unmapping it waits
for the reference of all ZONE_DEVICE pages to be released before
continuing. This does not allow for a page to be reused and no user
access fault is therefore possible. It does not have the same problem as
fsdax.

This sounds great. I'm adding Dan Williams to Cc, in hopes of getting an
ack from him on this point.


The one minor concern with FOLL_LONGTERM pins is they will block device
unbind until userspace releases them all.

That seems like a completely reasonable consequence of what you are
doing here, IMHO.


Co-developed-by: Logan Gunthorpe <logang@xxxxxxxxxxxx>
Signed-off-by: Logan Gunthorpe <logang@xxxxxxxxxxxx>
Signed-off-by: Martin Oliveira <martin.oliveira@xxxxxxxxxxxxx>

[1]: https://lkml.kernel.org/r/Yy4Ot5MoOhsgYLTQ@xxxxxxxx
---
mm/gup.c | 5 -----
1 file changed, 5 deletions(-)

diff --git a/mm/gup.c b/mm/gup.c
index 00d0a77112f4f..28060e41788d0 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -2614,11 +2614,6 @@ static bool is_valid_gup_args(struct page **pages, int *locked,
if (WARN_ON_ONCE((gup_flags & (FOLL_GET | FOLL_PIN)) && !pages))
return false;
- /* We want to allow the pgmap to be hot-unplugged at all times */
- if (WARN_ON_ONCE((gup_flags & FOLL_LONGTERM) &&
- (gup_flags & FOLL_PCI_P2PDMA)))
- return false;
-

I am not immediately seeing anything wrong with this... :)


*gup_flags_p = gup_flags;
return true;
}

thanks,
--
John Hubbard
NVIDIA