On Tue, Feb 23, 2021 at 10:54 AM Jason Gunthorpe <jgg(a)ziepe.ca> wrote:
On Tue, Feb 23, 2021 at 08:44:52AM -0800, Dan Williams wrote:
> > The downside would be one extra lookup in dev_pagemap tree
> > for other pgmap->types (P2P, FSDAX, PRIVATE). But just one
> > per gup-fast() call.
>
> I'd guess a dev_pagemap lookup is faster than a get_user_pages slow
> path. It should be measurable that this change is at least as fast or
> faster than falling back to the slow path, but it would be good to
> measure.
What is the dev_pagemap thing doing in gup fast anyhow?
I've been wondering for a while..
It's there to synchronize against dax-device removal. The device will
suspend removal awaiting all page references to be dropped, but
gup-fast could be racing device removal. So gup-fast checks for
pte_devmap() to grab a live reference to the device before assuming it
can pin a page.