Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1019974ybt; Fri, 19 Jun 2020 21:50:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzHw5oyGrKph0I0d8Of6jPYf+STARenXwLujiIisIy8pcRTs12Sg0YlfP5OJoTOyyvJjoK6 X-Received: by 2002:aa7:c80c:: with SMTP id a12mr6734155edt.140.1592628652924; Fri, 19 Jun 2020 21:50:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592628652; cv=none; d=google.com; s=arc-20160816; b=eD80TlaCpsRwFsVyKW6ZAqixlGpiMF/C1Uf7B8CQpA5+Qn/C/tBI5FypSW3u2LkOmU UjV3oPRgGtjYrGbA0I+/hnzgsrnDUsFie8EadtFwUOnvDdXZFxp16dJ2EN1gZgHhJADc l5/9jCG7aEcaP8KpxeRAVgWlSsOasp8NtKTjFd0e632IFBbDWEZvNjhE9QQeAVZZndAV hNqCeUMA7GMbGJdMFbZXaptAnU2GPJWL52EboMTDiXsR1OCl35jFrpPAkS3uPZG4htEF G1vS/Om2o7g5kp7Q7dX9y6selBv4aL2LKcEvge36ob7g6Ulmygd/Un6GedxmyqKDFOPj jZng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:dkim-signature:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from; bh=axo1qROEDM7hJwmmu8OcpvGAO/8DiPu78Ea49fo3JP8=; b=vznfhWU8dB/mUxiZzfCdEqbkQifCR8sTc53MGQCKVii3IyZO+2p3+9heFYGI/YUFuS NxxEwLnAGEB01uYaSOHLoHICdtRfkhhUowBnVDfzp/a+mQvgkYoDaVs7sHwQD6DbSxGD EU4EZ2RJPVgE3F+lE24/KomcXXnTgu0MCya1/kj+YgewODtilqIgTKshIX1X1VBbHz0Q 5Eo/Et+kKtKE9lwLQ5Q6hcq/f99x8sRvE66nqxcYXZyx6LBMXSrhUkQfCF/v+AHtMZy9 ijs9WXDWLhLDXFgjcJ1jGFDm1Iv22mVm914mdAKR9v02BZzuN+DUEoIcWsKJjASQStsd 4VOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=NIxcE9Fd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y14si4981144edu.550.2020.06.19.21.50.31; Fri, 19 Jun 2020 21:50:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=NIxcE9Fd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728636AbgFSV63 (ORCPT + 99 others); Fri, 19 Jun 2020 17:58:29 -0400 Received: from hqnvemgate26.nvidia.com ([216.228.121.65]:2228 "EHLO hqnvemgate26.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728269AbgFSV5I (ORCPT ); Fri, 19 Jun 2020 17:57:08 -0400 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate26.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Fri, 19 Jun 2020 14:56:54 -0700 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Fri, 19 Jun 2020 14:57:07 -0700 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Fri, 19 Jun 2020 14:57:07 -0700 Received: from HQMAIL105.nvidia.com (172.20.187.12) by HQMAIL109.nvidia.com (172.20.187.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Fri, 19 Jun 2020 21:56:59 +0000 Received: from hqnvemgw03.nvidia.com (10.124.88.68) by HQMAIL105.nvidia.com (172.20.187.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Fri, 19 Jun 2020 21:56:59 +0000 Received: from rcampbell-dev.nvidia.com (Not Verified[10.110.48.66]) by hqnvemgw03.nvidia.com with Trustwave SEG (v7,5,8,10121) id ; Fri, 19 Jun 2020 14:56:59 -0700 From: Ralph Campbell To: , , , , CC: Jerome Glisse , John Hubbard , Christoph Hellwig , Jason Gunthorpe , "Ben Skeggs" , Andrew Morton , Shuah Khan , Ralph Campbell Subject: [PATCH 12/16] mm/hmm: optimize migrate_vma_setup() for holes Date: Fri, 19 Jun 2020 14:56:45 -0700 Message-ID: <20200619215649.32297-13-rcampbell@nvidia.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200619215649.32297-1-rcampbell@nvidia.com> References: <20200619215649.32297-1-rcampbell@nvidia.com> MIME-Version: 1.0 X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable Content-Type: text/plain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1592603814; bh=axo1qROEDM7hJwmmu8OcpvGAO/8DiPu78Ea49fo3JP8=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:X-NVConfidentiality: Content-Transfer-Encoding:Content-Type; b=NIxcE9Fdl7sawaTciO5YlsjyXWpVEzFy0PbON2Sjk/IyFNSrBJ3Z0/rsrrAxkjrPQ Gf9NZudc7Nbt8Zl7jnG+RRXt4NWhRcV1pDwSpZrAuJLTXo3sCmo+0KRW4p1KpP1C2O IGlJdkSh1pbgcUuFPE/eHS9ARNZCW+Vct1T3yR8P47uoaS0F8MUoGYnVrVSCAeuAAL Wa0mn3fQfKu6brwDG1bL1YBu9wmXB2HDxw8Ozxh5DG7e9SaU/k/qtMIomYAX5KoRsN dROV2rrac8AawgKXAEL67b2guP7Gye49n/ClaiscMGrEh5ewh1ZOYWwMOdfQ2WKXZS jeiLsbDR/xcHw== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When migrating system memory to device private memory, if the source address range is a valid VMA range and there is no memory or a zero page, the source PFN array is marked as valid but with no PFN. This lets the device driver allocate private memory and clear it, then insert the new device private struct page into the CPU's page tables when migrate_vma_pages() is called. migrate_vma_pages() only inserts the new page if the VMA is an anonymous range. There is no point in telling the device driver to allocate device private memory and then throwing it away. Instead, mark the source PFN array entries as not migrating to avoid this overhead. Signed-off-by: Ralph Campbell --- mm/migrate.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mm/migrate.c b/mm/migrate.c index 24535281cea3..87c52e0ee580 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -2178,9 +2178,13 @@ static int migrate_vma_collect_hole(unsigned long st= art, { struct migrate_vma *migrate =3D walk->private; unsigned long addr; + unsigned long flags; + + /* Only allow populating anonymous memory */ + flags =3D vma_is_anonymous(walk->vma) ? MIGRATE_PFN_MIGRATE : 0; =20 for (addr =3D start; addr < end; addr +=3D PAGE_SIZE) { - migrate->src[migrate->npages] =3D MIGRATE_PFN_MIGRATE; + migrate->src[migrate->npages] =3D flags; migrate->dst[migrate->npages] =3D 0; migrate->npages++; migrate->cpages++; @@ -2748,7 +2752,7 @@ static void migrate_vma_insert_page(struct migrate_vm= a *migrate, pte_t *ptep; =20 /* Only allow populating anonymous memory */ - if (!vma_is_anonymous(vma)) + if (WARN_ON_ONCE(!vma_is_anonymous(vma))) goto abort; =20 pgdp =3D pgd_offset(mm, addr); --=20 2.20.1