From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 25D4AC71136 for ; Tue, 17 Jun 2025 12:42:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 79B346B0088; Tue, 17 Jun 2025 08:42:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 74BA56B0089; Tue, 17 Jun 2025 08:42:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 661856B008A; Tue, 17 Jun 2025 08:42:30 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 576136B0088 for ; Tue, 17 Jun 2025 08:42:30 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id D33C4C01F1 for ; Tue, 17 Jun 2025 12:42:29 +0000 (UTC) X-FDA: 83564856018.14.23E9CB7 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by imf14.hostedemail.com (Postfix) with ESMTP id 2FD0A100006 for ; Tue, 17 Jun 2025 12:42:26 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="kA/paiBT"; spf=pass (imf14.hostedemail.com: domain of lizhe.67@bytedance.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=lizhe.67@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750164148; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=xhCeJRKJX5gly7PeRbiNYGYM1xfBGGYyk6W70uoBE2Y=; b=idTPzvbeObtWVyLftFDe9kmxNWFQmry5JBxNw2BZpOTPym0BbBH0HVsLbLmj4sh/gDULg1 bBhIm1tTPTnradu+oaQjajEH6tqFgTLvUVgvNZeUB6cO9TcBUJhn9qP2sigRMcDB27qu5C xVOssCBs/elgz/2sxA3LNLkMlEzLkZI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750164148; a=rsa-sha256; cv=none; b=H4DPKv86+YwBhGKHpP8CwAmZwmToyRirCylIGo4qpc356d+Z4ya1MIN74fNkV7NVXPyqFy va7Ko0vlUZbd2DOsB7OC26OVhBSiVtU2UjASWTmcgQUrQ9qQ+T0l17B/GOUMO4laTCriKT fiTfR3sikDW84ocGrl5mrSimBUSj2eI= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="kA/paiBT"; spf=pass (imf14.hostedemail.com: domain of lizhe.67@bytedance.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=lizhe.67@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-235f9e87f78so58795445ad.2 for ; Tue, 17 Jun 2025 05:42:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1750164146; x=1750768946; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xhCeJRKJX5gly7PeRbiNYGYM1xfBGGYyk6W70uoBE2Y=; b=kA/paiBTaHS/2b4otFkajZTSvs4rS8iNfDtCnfWxg5s+EMyrk5a20TCQ6fHL8HXeg9 pBBtFi/zp1oAmi4oc3l6FiUmTJiiQjyQX6z2q5YZrz6eOngVyvZclVqKlAVuf6IexasR XF8E0ZCter0i3hf+g5CsMuUylqJQXkcFTispnKN42F1LhF+2VRPfjtedjwruPbpnJTnh qWpoGpMJh93PfRda/J3uz4/kEGreNCZvs5Ag6XkECXVVLdlauo8wXSkHjVrYqb85D7lw yA20Csmx3YdCU0LGtcuU5K0TgkFDOnJEnjM5gwWQmINIg8Y9SYoWCCdSdjFH17o68WWF B60A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750164146; x=1750768946; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xhCeJRKJX5gly7PeRbiNYGYM1xfBGGYyk6W70uoBE2Y=; b=jifcl6M88Yq0XtSZiN+k3Cdu3/bhhqjqMqH1FRLO0zpv1K9vvnZ+v+a5MwaPdCZC+f j/8WFmi5g7rHJaGCDkyxrLTRdasYfpbNCV/tkhGbRoPhbRa2pw/Bn49JFmekSOQ45RrT Tbq3ULM6cU78E3oG6ZTIgq/u6ew74g5oQfVkHxZTCUyEMsbvpyImITGBIKwlyTnNtrNU sC8XG+Y5mzBQ0kZPSXvyKwt6G0V9DjyKDiiMIEUUuHOB7eFQ/NMEJmHSbRyygiMrP1nO u8Dh9b/lEKSkoT48bo2tbylNufFMe2l5j+IFn+KCNt58cPHHwmR6u0pD2f+AdmgI+3av 1d1w== X-Forwarded-Encrypted: i=1; AJvYcCUj7nHrWdUGDFQw3p+inwXfqndFlEGnl2mnZAt6EmdL/oBbU6xuEKGlEKH5cxTXKhfo7U3Y3IFa3Q==@kvack.org X-Gm-Message-State: AOJu0Yw/zlRdQGFzLq3l+1Wf95ktIlvfcXr71otMGwElsW1OmIspRYSe sMOfrjUoXbOveoDvx4uQUK/b8dePOHDBS6utrGnp8ZyCOiCZy7zAbPpUuH1aamILs0U= X-Gm-Gg: ASbGncvDdeaFu/7D3TKi7tQGe5niQtMWVoNL9ft5IyZwb7LabyNYlx6HXWgz9ufInZN 2tyQXvY9sW9OeF0NkxrRQbwlQWqoGR0+v2ateqpjlBb72TcC0UG6QId+VOJP39dSkGrcyaK1ZM1 YWCrFejz8zcBmJm57yDZ34LJAFhTULihjybHWcX1rQ+7WGqctoAdyzXt7SEMF7vUXQBDmgDmu+a YwRhcHI20up505OaxWbDHp3LF1tAGkokzc9rDdK31D7wYHtpFAwE5HQnLmJOTp5fnG2BGk17G+Q pxxF9zRy95XJvNol1brjpeGhH00YA4GbPDDNMbFlWaQybuVwI2Rk5Ed6hSYFeCSgq7sWrNrcbbH Kzt2JDjiSWTG+iemQ4EOdhJbM X-Google-Smtp-Source: AGHT+IEGXsCzeZJho++nxi7+sS5jom3cV2sBi3BqOhTWGBd9h13d/VIShrhQIh5avHoPxHMumouGRg== X-Received: by 2002:a17:903:1ac4:b0:234:9fea:ec5f with SMTP id d9443c01a7336-2366afd3a91mr205459905ad.1.1750164145833; Tue, 17 Jun 2025 05:42:25 -0700 (PDT) Received: from localhost.localdomain ([203.208.189.11]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-313fcae18e1sm1818708a91.0.2025.06.17.05.42.22 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 17 Jun 2025 05:42:25 -0700 (PDT) From: lizhe.67@bytedance.com To: david@redhat.com Cc: akpm@linux-foundation.org, alex.williamson@redhat.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, lizhe.67@bytedance.com, peterx@redhat.com Subject: Re: [PATCH v4 3/3] vfio/type1: optimize vfio_unpin_pages_remote() for large folio Date: Tue, 17 Jun 2025 20:42:18 +0800 Message-ID: <20250617124218.25727-1-lizhe.67@bytedance.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: 2FD0A100006 X-Stat-Signature: kzomq1codshcz43thcdnjdqoohtfu1t7 X-Rspamd-Server: rspam04 X-HE-Tag: 1750164146-989475 X-HE-Meta: U2FsdGVkX18upwjNu16VrOKfvGw+wFy9Qy/l7wzonYoY3ntuvsWBtXIMS0th1a2fDAneSw0HXvqDTtrQrhpYFuf64k8+/lAsUjCSQGzFmDG/cKF+Q9pkHi6qLoIzkTnT7I3dz1X9FLByeDzC5fHhN64n936xXkvVuGmWFc/Ga9LyGE4sk6UZFLnR5Fc96+zS4sSrrgOArrUAWfH3wtovXuJgLlTVHVnFV9L+jWoOkhMRBm57915StiLkgtDEdd5L9TYs8RfmxOM5k8VPSE4vYUHafvJHGJ59BetX9rnUR5gu3CTwCtckRCxd6PaQbLR2QqTJnVNsmT4zH+86sXvFnlLOwTDQhNKnQqSGy3tk6Tk2RkfW/ipew4AamBAEfsthG5mzOAbWz2lz8Bcx00DVSNX3wcoWwm8PtkGxp6UE9UtfZzVB963G18tB8mokgxH9VhvAIoB0KDhsolOzIrjfMsYBeZgT8WhW2zwfWN1YwsRM4CLAkcuDrz744x+k8DIbV3H0FV1rsXVvQDj1eJdTitrLo3/OXNyrpWNyd+KEBzmRZTPdOOslmIPDnc4PvB0AClDyilgHms9T49RMOXxbohjmbQkAgJKPdgT9xgxFMzaeelBjdrP/qAHWA6B5UXfhXd8SZ39JIBMY3AWPpHXBbFt/ipwVIgunrAgOPuHng2YUpRiTL/BTi7GzE5my3dWJC+bRserTLs1THht+AUONcVpHcrADH5tnx74j2MakZsOG9BsSlCbNCerA2E7p9NcT0B5+X7DLTRe0lXnEG0SMiqBYh3x9ODSysx0wPRzfXCQmFkciqIX7ckyW9io4mtiaw2VHzhvW8vgwJa67ZrYJbfc+k0EnCPZWiCL/tvf/P1H/Z5oAfVrXNr4f/R7Kh4gKdOmLUlewCS6EoqWlLs3DA1YJbOTx6exo78uGHPNUor1R4SidbdHZ3sEf59eLnEWqRruXqm7J7IHEQzFhliK ngdi+Erh 8y0xCqO8a/UfQhN5lhD0/y2MCRs8cueusc5nB5P51fA248O7ZVhUSuPINPRbY9K5kSV18L8ccaLUIzc95igahma1Eog== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, 17 Jun 2025 11:49:43 +0200, david@redhat.com wrote: > On 17.06.25 11:47, lizhe.67@bytedance.com wrote: > > On Tue, 17 Jun 2025 09:43:56 +0200, david@redhat.com wrote: > > > >>> diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c > >>> index e952bf8bdfab..d7653f4c10d5 100644 > >>> --- a/drivers/vfio/vfio_iommu_type1.c > >>> +++ b/drivers/vfio/vfio_iommu_type1.c > >>> @@ -801,16 +801,43 @@ static long vfio_pin_pages_remote(struct vfio_dma *dma, unsigned long vaddr, > >>> return pinned; > >>> } > >>> > >>> +/* Returned number includes the provided current page. */ > >>> +static inline unsigned long folio_remaining_pages(struct folio *folio, > >>> + struct page *page, unsigned long max_pages) > >>> +{ > >>> + if (!folio_test_large(folio)) > >>> + return 1; > >>> + return min_t(unsigned long, max_pages, > >>> + folio_nr_pages(folio) - folio_page_idx(folio, page)); > >>> +} > >> > >> Note that I think that should go somewhere into mm.h, and also get used > >> by GUP. So factoring it out from GUP and then using it here. > > > > I think I need to separate this out into a distinct patch within the > > patchset. Is that correct? > > Yes, that's what I would do. How do you think of this implementation? diff --git a/include/linux/mm.h b/include/linux/mm.h index 242b05671502..eb91f99ea973 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2165,6 +2165,23 @@ static inline long folio_nr_pages(const struct folio *folio) return folio_large_nr_pages(folio); } +/* + * folio_remaining_pages - Counts the number of pages from a given + * start page to the end of the folio. + * + * @folio: Pointer to folio + * @start_page: The starting page from which to begin counting. + * + * Returned number includes the provided start page. + * + * The caller must ensure that @start_page belongs to @folio. + */ +static inline unsigned long folio_remaining_pages(struct folio *folio, + struct page *start_page) +{ + return folio_nr_pages(folio) - folio_page_idx(folio, start_page); +} + /* Only hugetlbfs can allocate folios larger than MAX_ORDER */ #ifdef CONFIG_ARCH_HAS_GIGANTIC_PAGE #define MAX_FOLIO_NR_PAGES (1UL << PUD_ORDER) diff --git a/mm/gup.c b/mm/gup.c index 15debead5f5b..14ae2e3088b4 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -242,7 +242,7 @@ static inline struct folio *gup_folio_range_next(struct page *start, if (folio_test_large(folio)) nr = min_t(unsigned int, npages - i, - folio_nr_pages(folio) - folio_page_idx(folio, next)); + folio_remaining_pages(folio, next)); *ntails = nr; return folio; diff --git a/mm/page_isolation.c b/mm/page_isolation.c index b2fc5266e3d2..34e85258060c 100644 --- a/mm/page_isolation.c +++ b/mm/page_isolation.c @@ -96,7 +96,7 @@ static struct page *has_unmovable_pages(unsigned long start_pfn, unsigned long e return page; } - skip_pages = folio_nr_pages(folio) - folio_page_idx(folio, page); + skip_pages = folio_remaining_pages(folio, page); pfn += skip_pages - 1; continue; } --- Thanks, Zhe