On Fri, Aug 16, 2019 at 10:21:41AM -0700, Dan Williams wrote:
We can do a get_dev_pagemap inside the page_walk and touch the pgmap, or we can do the 'device mutex && retry' pattern and touch the pgmap in the driver, under that lock.
However in all cases the current get_dev_pagemap()'s in the page walk are not necessary, and we can delete them.
Yes, as long as 'struct page' instances resulting from that lookup are not passed outside of that lock.
Indeed.
Also, I was reflecting over lunch that the hmm_range_fault should only return DEVICE_PRIVATE pages for the caller's device (see other thread with HCH), and in this case, the caller should also be responsible to ensure that the driver is not calling hmm_range_fault at the same time it is deleting it's own DEVICE_PRIVATE mapping - ie by fencing its page fault handler.
This does not apply to PCI_P2PDMA, but, lets see how that looks when we get there.
So the whole thing seems pretty safe.
Jason