[PATCH 3/4] mm: simplify device private page handling in hmm_range_fault
Jason Gunthorpe
jgg at ziepe.ca
Tue Mar 17 12:47:55 UTC 2020
On Tue, Mar 17, 2020 at 01:28:13PM +0100, Christoph Hellwig wrote:
> On Tue, Mar 17, 2020 at 01:24:45PM +0100, Christoph Hellwig wrote:
> > On Tue, Mar 17, 2020 at 09:15:36AM -0300, Jason Gunthorpe wrote:
> > > > Getting rid of HMM_PFN_DEVICE_PRIVATE seems reasonable to me since a driver can
> > > > look at the struct page but what if a driver needs to fault in a page from
> > > > another device's private memory? Should it call handle_mm_fault()?
> > >
> > > Isn't that what this series basically does?
> > >
> > > The dev_private_owner is set to the type of pgmap the device knows how
> > > to handle, and everything else is automatically faulted for the
> > > device.
> > >
> > > If the device does not know how to handle device_private then it sets
> > > dev_private_owner to NULL and it never gets device_private pfns.
> > >
> > > Since the device_private pfn cannot be dma mapped, drivers must have
> > > explicit support for them.
> >
> > No, with this series (and all actual callers before this series)
> > we never fault in device private pages.
>
> IFF we want to fault it in we'd need something like this. But I'd
> really prefer to see test cases for that first.
In general I think hmm_range_fault should have a mode that is the same
as get_user_pages in terms of when it returns a hard failure, and
generates faults. AFAIK, GUP will fault in this case?
I need this for making ODP use this API. ODP is the one that is highly
likely to see other driver's device_private pages and must have them
always fault to CPU.
> diff --git a/mm/hmm.c b/mm/hmm.c
> index b75b3750e03d..2884a3d11a1f 100644
> +++ b/mm/hmm.c
> @@ -276,7 +276,7 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr,
> if (!fault && !write_fault)
> return 0;
>
> - if (!non_swap_entry(entry))
> + if (!non_swap_entry(entry) || is_device_private_entry(entry))
> goto fault;
Yes, OK, makes sense.
I've been using v7 of Ralph's tester and it is working well - it has
DEVICE_PRIVATE support so I think it can test this flow too. Ralph are
you able?
This hunk seems trivial enough to me, can we include it now?
Thanks,
Jason
More information about the amd-gfx
mailing list