On Thu, Sep 17, 2020 at 1:06 PM Jason Gunthorpe <jgg@xxxxxxxx> wrote: > > Given that this is a user visible regression, it is nearly rc6, what > do you prefer for next steps? Since I had to deal with the page lock performance regression too, and I think we have a fairly simple way forward, I'd rather do an rc8 and get this done with, than revert and know we have to deal with it anyway. Particularly since I think this would _finally_ make page pinning make sense. In it's current state, it's just yet another broken GUP that doesn't actually fix things. But if we have the semantics that page pinning really fixes things in the page tables, I think we now have a proper solution to this and a _much_ cleaner model for it. If it means that page pinning can also stop worrying about MADV_DONTFORK any more, that would be an added API bonus. For that to happen, we'd need to have the vma flag so that we wouldn't have any worry about non-pinners, but as you suggested, I think even just a mm-wide counter - or flag - to deal with the fast-bup case is likely perfectly sufficient. Yes, you'd still take a hit on fork, but only the actual process that did pinning would take that hit. And *if* that ends up being a big deal, the MADV_DONTFORK can be used to avoid it, rather than be a correctness issue. It really feels like this should be just "tens of lines of fairly simple code", and it would clarify our GUP/PIN/COW rules enormously. Linus