The second loop in drm_pagemap_migrate_to_devmem() checks
`page_pgmap(src_page) == pagemap && !can_migrate_same_pagemap` to skip
pages already on the target pagemap. However, this condition is always
false at this point: if can_migrate_same_pagemap is false and any own
pages exist, the first loop already returns -EBUSY before reaching here.

Signed-off-by: Zhaoyu Liu <[email protected]>
---
 drivers/gpu/drm/drm_pagemap.c | 14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c
index 15c78eca180b..6842eadee6df 100644
--- a/drivers/gpu/drm/drm_pagemap.c
+++ b/drivers/gpu/drm/drm_pagemap.c
@@ -730,8 +730,6 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem 
*devmem_allocation,
        if (err)
                goto err_aborted_migration;
 
-       own_pages = 0;
-
        for (i = 0; i < npages;) {
                unsigned long j;
                struct page *page = pfn_to_page(migrate.dst[i]);
@@ -744,12 +742,7 @@ int drm_pagemap_migrate_to_devmem(struct 
drm_pagemap_devmem *devmem_allocation,
                        struct drm_pagemap_zdd *src_zdd =
                                drm_pagemap_page_zone_device_data(src_page);
 
-                       if (page_pgmap(src_page) == pagemap &&
-                           !mdetails->can_migrate_same_pagemap) {
-                               migrate.dst[i] = 0;
-                               own_pages++;
-                               goto next;
-                       }
+                       /* Own or peer device private page */
                        cur.dpagemap = src_zdd->dpagemap;
                        cur.ops = src_zdd->devmem_allocation->ops;
                        cur.device = cur.dpagemap->drm->dev;
@@ -786,7 +779,6 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem 
*devmem_allocation,
                        goto err_finalize;
                }
 
-next:
                i += NR_PAGES(order);
        }
 
@@ -797,8 +789,6 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem 
*devmem_allocation,
        if (err)
                goto err_finalize;
 
-       drm_WARN_ON(dpagemap->drm, !!own_pages);
-
        dma_fence_put(devmem_allocation->pre_migrate_fence);
        devmem_allocation->pre_migrate_fence = NULL;
 
@@ -822,7 +812,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem 
*devmem_allocation,
                i += nr_pages;
        }
 
-       if (!err && migrated_pages < npages - own_pages) {
+       if (!err && migrated_pages < npages) {
                drm_dbg(dpagemap->drm, "Raced while finalizing migration.\n");
                err = -EBUSY;
        }
-- 
2.34.1

Reply via email to