On Thursday, 10 February 2022 4:48:36 AM AEDT Christoph Hellwig wrote: > On Mon, Feb 07, 2022 at 04:19:29PM -0500, Felix Kuehling wrote: > > > > Am 2022-02-07 um 01:32 schrieb Christoph Hellwig: > >> Move the check for the actual pgmap types that need the free at refcount > >> one behavior into the out of line helper, and thus avoid the need to > >> pull memremap.h into mm.h. > >> > >> Signed-off-by: Christoph Hellwig <hch@xxxxxx> > > > > The amdkfd part looks good to me. > > > > It looks like this patch is not based on Alex Sierra's coherent memory > > series. He added two new helpers is_device_coherent_page and > > is_dev_private_or_coherent_page that would need to be moved along with > > is_device_private_page and is_pci_p2pdma_page. > > FYI, here is a branch that contains a rebase of the coherent memory > related patches on top of this series: > > http://git.infradead.org/users/hch/misc.git/shortlog/refs/heads/pgmap-refcount > > I don't have a good way to test this, but I'll at least let the build bot > finish before sending it out (probably tomorrow). Thanks, I ran up hmm-test which revealed a few minor problems with the rebase. Fixes below. --- diff --git a/mm/gup.c b/mm/gup.c index cbb49abb7992..8e85c9fb8df4 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -2007,7 +2007,6 @@ static long check_and_migrate_movable_pages(unsigned long nr_pages, if (!ret && list_empty(&movable_page_list) && !isolation_error_count) return nr_pages; - ret = 0; unpin_pages: for (i = 0; i < nr_pages; i++) if (!pages[i]) diff --git a/mm/migrate.c b/mm/migrate.c index f909f5a92757..1ae3e99baa50 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -2686,12 +2686,11 @@ static void migrate_vma_insert_page(struct migrate_vma *migrate, swp_entry = make_readable_device_private_entry( page_to_pfn(page)); entry = swp_entry_to_pte(swp_entry); - } else { - if (is_zone_device_page(page) && - is_device_coherent_page(page)) { + } else if (is_zone_device_page(page) && + !is_device_coherent_page(page)) { pr_warn_once("Unsupported ZONE_DEVICE page type.\n"); goto abort; - } + } else { entry = mk_pte(page, vma->vm_page_prot); if (vma->vm_flags & VM_WRITE) entry = pte_mkwrite(pte_mkdirty(entry));