On Tue, Jun 23, 2020 at 10:05:19AM -0700, Ralph Campbell wrote: > > On 6/23/20 4:40 AM, Christoph Hellwig wrote: >> On Mon, Jun 22, 2020 at 03:20:08PM -0700, Ralph Campbell wrote: >>> The caller of migrate_vma_setup() does not know what type of page is >>> stored in the CPU's page tables. Pages within the specified range are >>> free to be swapped out, migrated, or freed until after migrate_vma_setup() >>> returns. The caller needs to set struct migrate_vma.src_owner in case a >>> page is a ZONE device private page that the device owns and might want to >>> migrate. However, the current code skips normal anonymous pages if >>> src_owner is set, thus preventing those pages from being migrated. >>> Remove the src_owner check for normal pages since src_owner only applies >>> to device private pages and allow a range of normal and device private >>> pages to be migrated. >> >> src_owner being set means we want to migrate from device private >> memory to normal host DRAM. What kind of problem do you see of >> not touching already present pages in that path? >> > > The problem is that migrate_vma_setup() invalidates the address range so any > previously migrated pages to device private memory have to be faulted in > again. By having the PFN of those device private pages in the src array, the > driver can reinstate the device MMU mappings and avoid the page faults. Maybe add that to the changelog?