From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from sg-3-27.ptr.tlmpb.com (sg-3-27.ptr.tlmpb.com [101.45.255.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDC2A33938A for ; Thu, 6 Aug 2026 13:22:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=101.45.255.27 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786022556; cv=none; b=XGrnUWwwAvm0oklQrt6xdUYd0JoJ+V/y9YpV+A2mJMaikVfM4yQuMkdSH3tmr3sXrTC5ZbomF/Zq2tzcYBuJAlHGhBd12jjXiR5UcF4wEm0U0kJm/z15E/4m9aR/zzkbHxPUnAhClo+tronTZBR690jY1xDiZbqaYcPB/O/8M30= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786022556; c=relaxed/simple; bh=fij2i8MDAFCzr9StmvkFe6rIRYKYLK6GY9r1iT4Xggk=; h=Message-Id:Content-Type:Cc:From:Subject:Date:Mime-Version:To: Content-Disposition; b=Y/3KsK+eOsuUjSC2sm1z/d7E/7fVI5gxETQsdl4GjMUyZhJvUzqlaAZjP3YqWSpxRMyQorGucI1TwuG6gmXXRExD31U1nu9JaMcHFLeqV+3MelaI3HpccWfr2Y6L/FTSAZsltOe7QhwESzIpNhn7lGigCdfS8b9W1D7LwbrPtAU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=picoheart.com; spf=pass smtp.mailfrom=picoheart.com; dkim=pass (2048-bit key) header.d=picoheart.com header.i=@picoheart.com header.b=ECWxeprc; arc=none smtp.client-ip=101.45.255.27 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=picoheart.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=picoheart.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=picoheart.com header.i=@picoheart.com header.b="ECWxeprc" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=feishu2604151535; d=picoheart.com; t=1786022506; h=from:subject: mime-version:from:date:message-id:subject:to:cc:reply-to:content-type: mime-version:in-reply-to:message-id; bh=aSjjkQx8Ya/+sr4DejvtgE44KyfNSGZIFTl5YhsUNTw=; b=ECWxeprcImuGG97xBCbECGh3asQGyIr3JipowgLqgZMo9OgfOx0zSr/Cu2M7YExYH2sl0c +FQe2yOj9DM3CSBu+liOg7GILfq55H2dsn/D+mVjNu2lz6FjV+zwJkEyvzO4oV9Ku9qeIs IgPoyGVDU5BQvOY1C/nMD23WfljQRnkzqw04sIzFEan+9vBRDnj5MEQofleyUaeAd3ZwMB WCwagqzR8/sLYLJymPXgzEVm3yjuVtCGbsTLeDVL5YIREUt6HVmZM+zahSJPsrM8rls2Qk tQipUJb1iIfBWWBaba09Zv4Vncp0x3sKyxvY9ViXIn06CcwBsXgswguNckgKLQ== Content-Transfer-Encoding: 7bit Message-Id: Received: from hostpc ([183.129.139.234]) by smtp.feishu.cn with ESMTPS; Thu, 06 Aug 2026 21:21:43 +0800 X-Original-From: Zhaoyu Liu Content-Type: text/plain; charset=UTF-8 Cc: , From: "Zhaoyu Liu" Subject: [PATCH v2] drm/pagemap: no need to recheck own pagemap in migrate_to_devmem Date: Thu, 6 Aug 2026 21:21:41 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 To: , , , , , X-Lms-Return-Path: Content-Disposition: inline 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. v2: - Skip the no-op migrate_vma_pages() when all pages already reside on the target pagemap. Signed-off-by: Zhaoyu Liu --- drivers/gpu/drm/drm_pagemap.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c index 15c78eca180b..64922b944092 100644 --- a/drivers/gpu/drm/drm_pagemap.c +++ b/drivers/gpu/drm/drm_pagemap.c @@ -698,7 +698,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, * nothing. Raced or unknown device pages. */ err = -EBUSY; - goto err_aborted_migration; + goto direct_finalize; } /* Count device-private pages to migrate */ @@ -719,19 +719,17 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, if (own_pages == npages) { err = 0; drm_dbg(dpagemap->drm, "Migration wasn't necessary.\n"); - goto err_aborted_migration; + goto direct_finalize; } else if (own_pages && !mdetails->can_migrate_same_pagemap) { err = -EBUSY; drm_dbg(dpagemap->drm, "Migration aborted due to fragmentation.\n"); - goto err_aborted_migration; + goto direct_finalize; } err = ops->populate_devmem_pfn(devmem_allocation, npages, migrate.dst); 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,11 +812,12 @@ 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; } +direct_finalize: migrate_vma_finalize(&migrate); err_free: drm_pagemap_zdd_put(zdd); -- 2.34.1