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 06EC8C83F1A for ; Thu, 10 Jul 2025 08:54:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 999096B00A0; Thu, 10 Jul 2025 04:54:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9712A6B00A9; Thu, 10 Jul 2025 04:54:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 886666B00AB; Thu, 10 Jul 2025 04:54:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 762E36B00A0 for ; Thu, 10 Jul 2025 04:54:14 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 2503F1D9867 for ; Thu, 10 Jul 2025 08:54:14 +0000 (UTC) X-FDA: 83647743228.27.CE5E924 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) by imf11.hostedemail.com (Postfix) with ESMTP id 4632740012 for ; Thu, 10 Jul 2025 08:54:12 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=TDpTqXlL; spf=pass (imf11.hostedemail.com: domain of lizhe.67@bytedance.com designates 209.85.216.48 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=1752137652; 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=WUKujTie/xgtNbVO7AZBjb1RhL5nzywDx5C8kGbmtCs=; b=OO1Bt6kZ7iow2/ohk1W5uc8zenW8fhbrGQnP5wH/xbaIjrViJJr58gY294SFfJ+NhvG0dx MNBPNbOHlrx7SxrMez9c4wx6GJi34B1/hmGVw0r9S5bxlzqRq1o1932J9QUTIIip6NUay4 tgk/w5LYEPHBxAmpVS/UQMJ1J17fWXU= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=TDpTqXlL; spf=pass (imf11.hostedemail.com: domain of lizhe.67@bytedance.com designates 209.85.216.48 as permitted sender) smtp.mailfrom=lizhe.67@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752137652; a=rsa-sha256; cv=none; b=7D+p6kAXWhDs8vQyV7GI7Mjls5pVCbqUJdrioBHVEd+wMlV8TyO7N2ihyHM6GlsEo1lCrz In9b6zazhA8sFmkkkLGwOl6muOcxy+RRhtSJR7ju1g3V5MlreJpU44haaAyWh/AePXLscw nnBt4D5OkoZdxnC29bwafO/KgYK/4n8= Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-315cd33fa79so597122a91.3 for ; Thu, 10 Jul 2025 01:54:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1752137651; x=1752742451; 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=WUKujTie/xgtNbVO7AZBjb1RhL5nzywDx5C8kGbmtCs=; b=TDpTqXlLCuHGvJUuGCHMifpUUDok0Ab6T+HeGLfNfDW/SnSAiuEWc5engkKdpqI0ue guOJYh8uiKMHXsHMVt1E89p699D9Ob+gKLCVO1Z9SW9y2SvwkTyD2YPwAQVz+7Eqj17k Q6ol+choM7plpzX5Niew1uph+s6MBQW+ct9dipS8AwIuEqrjfsrsMAKE6gFnsvnHFKHb MxZo4Pd+6m1yYZnOXh/bRykhwdz+NA70jYMBsFsoIlN+cF0Pged7ABoU5PzQ1feIm0C2 UA6bCrKDAnPTDhtLaHvqE8x1ofVNlWDGmeQvOJQFm/ljmCpr21WKE7uc5Gb6iaYQe5cn f9kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752137651; x=1752742451; 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=WUKujTie/xgtNbVO7AZBjb1RhL5nzywDx5C8kGbmtCs=; b=uUpXFa0L+aIKkoSAkz+mQn4VmQlyv7gm9Szu6az7beB8zcWEEqftNpxhzqWG9s/nRN A+jw4OoAkKW2e/wp+VpcTcF/ACJ/APHwr/Fp6W83QqD/PqlCxMfNi/FdcH6d00CV//lx k9Vm7am0eelTSeJklORvaKfs7MuA5YVPW/2Gfr9EPK4Rk/U3yNKJiYGEhJQLjSFIEBf0 /86Z0Z1LxzMqGiAMK7NdYnMDifelSCxMgruW/8uBBi3mQaSeI8J9KikFDlVz8WljN+hq ktdB2fiRrKkLJjUxSe5vTjfmBWplvvtUOLP9GsMZDsPS/P3tkhiYHRHdsdiQqTfHeHIF H53g== X-Forwarded-Encrypted: i=1; AJvYcCXFGUMmZoZVXI+IqiUnnCaYl/Pe3qd1BVRXA/LLn6AH1hcJj0IqUekX5zJIhnds3tbP16+KMlhObg==@kvack.org X-Gm-Message-State: AOJu0YyXTxNs37TcwSOfcg+kcRl0zbtqoFHWikGUM8y27sIrfn/3TUpY JdhjlU0td3BYtEzvp7YoNRZpUdt6PJ0SflCVPU8XqfLmJ1j95O7VwHIOcN4p29Ku0ek= X-Gm-Gg: ASbGnctedI1egEAYU2LAnO9/BPtP25ll0yl6BDwuUAHp46C1avqQS+2Uj94AAHAQhjB EIvY1G7B9JYe1t+PHW7PfaSYqU8qoWm9j6y2RT+6eo6yZwT/uJJbfwB7OZHfO+6vqMsLZcO8oKm hl5KLpbwAoOtqJGb54a7g+glQsI7C4EcbZF+8l/9SWj53atEQf1Bmp7cfHOJkcVivHdTFuISftl j/aEbJFAThLv7siPROb/bxWcCUnR2nDVzlKjRu0RM8KGgWgiOSomAPB2GEwcRiLz7wAznd/dkbi w8MxWOwAs9H9gt27SwmMCZAp+KZ/To8h0t2eN9a5fTp4iR2w8TLEH3wYawskSjAwsu33ooOo95r 4RG8LC3HTb+er/w== X-Google-Smtp-Source: AGHT+IFBl6XWSS3SCRPprWFOA1sj7pbVIrvseX/rWxTSbGo3aaOmi/r+s3MsC/OYlpN25M32JL4H2g== X-Received: by 2002:a17:90b:57e5:b0:311:b3e7:fb3c with SMTP id 98e67ed59e1d1-31c2fe0ee60mr9144636a91.31.1752137650816; Thu, 10 Jul 2025 01:54:10 -0700 (PDT) Received: from localhost.localdomain ([203.208.189.12]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-31c3e975d41sm1650228a91.13.2025.07.10.01.54.07 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 10 Jul 2025 01:54:10 -0700 (PDT) From: lizhe.67@bytedance.com To: alex.williamson@redhat.com, akpm@linux-foundation.org, david@redhat.com, jgg@ziepe.ca, peterx@redhat.com Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, lizhe.67@bytedance.com Subject: [PATCH v4 1/5] mm: introduce num_pages_contiguous() Date: Thu, 10 Jul 2025 16:53:51 +0800 Message-ID: <20250710085355.54208-2-lizhe.67@bytedance.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250710085355.54208-1-lizhe.67@bytedance.com> References: <20250710085355.54208-1-lizhe.67@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: 4632740012 X-Rspamd-Server: rspam09 X-Stat-Signature: 56wmps4nkiz9ey6dd4mw9c4osr4k45te X-HE-Tag: 1752137652-713530 X-HE-Meta: U2FsdGVkX18hfAgLtVDMxpMj/SAhub6NchfhVcMWClFLWBbtyhF1w4XHlSbIwz89q2CPxNTqsigd3UOZ/ZwYgy5QTy74F7TPaYOLqV1Ec3NSFolyDFUt0kTR7G+CT7wGO91VAIeoFFDcsCyIhVphLCTnZhogr70ZpUowpfdwJvdaNo8JYblVjtF+YqJ3KCVfzeRyvcJnmtF+wHjQ0J3tXA13UdTjpwLrZsGBqLJlVKqAvjGzrpKpEdxPbROPkUFqpXuxVIldOi8hbWbMKDz95uO6OkbuCw0hPzFGtKX0nCErSBTP0ydmZplkbPDOfO0ma/Pmy3uibfufkUnowODzSnovljdhPW1tvWPU6dYxEvL9/KLYdG1+86ZNO/6KoIrbNCW0q00ngdpxPiHEepZp5a275GAeReujN4psejzBhwosoMyWLnzdzXllpU6S/YP6q4JeRmkDTRV27+otqWoh+VOuekGEORwnZFOHYQOFOw9evMJ5DIUJ5kJl8YeSFgAIUkXkbjxOhAMqDxgQl/L3wzA/6BOCBMDPBbnecCxvx0Igzqt4OuSwqfH6bRU0YtvmIo6xbwld5MCt+QGJDlAG+yQr5aCMa+cX7vbGPTjdqHbwSWWU2ad0zP+1H8Ilc/78fhoKhCCEpo/C7X5Dols18QJappZ7qH80IjNByNVAqQISWO4SniZB/q9vbfj0vMDUyeRA2GADKcOO1Bu2xqWk/aWKsuPXaSFDcagiWntZo2Oyby79mIJLDT/EpJ5UviUAhG6YSxInWzJpFnnDPYIWkHtGTZqkFXARW9wA0ixpvgguwYC/g681CWrQTfDLs9iCcjSjE9TG6OXcLogMKnGVUUUcg1HC0iq4bC6iCE3vcmpiI6Qc3puH4n6ozZeesJh91+LqVW1DgLi5uwVGr72RwfUVCCG1QWkNubrE2Xi4fxZxygV9cTcQcYGVTfwqX4XxeKJ0hNiqigaBTXjY7Z7 CNIsK52g cRSM24hJp292aSSp6y/ZHJPcyBADeoU66OaqqKAV9fHu0zO/xL2HJbFJqJLlJL3a54T6oHKnJI1IEZkoN+v1uVRMYLcFWm52HMSgAUKXKfDBhfWsJNizXvBUiykjXwc5JL5fVLxnGRteVj301EQ1yVCWCDAHXCo/Q4BsaO13/oKbHY6xGMxVi8jsetrSaKatbDDHKzoQBFtr0kwttZ5c0igM5dtlvpNalgBDrUiSMJ6zdB+Gmr2M6A8eh04hzIb48LhY28CAvn0SlkYsKGg6RDiXiqYMHoBzjALHo0hxkwYOGclBR69HzvCjBqd8SNVpUdmwrwY1m6djkpdixUJTjhOcptLCKW9qBVwNUQbQsRckNiq5fqBNE02BKmvYR6hP1v/3ORitJqO2b4brQF8Muf9xoW1/9/OcyjOgcCtEkJUyMVD0Jx7pvr5LKJxl7w94oQ7/Ww5kJZxagxnpX1DdVT2QwUA== 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: From: Li Zhe Function num_pages_contiguous() determine the number of contiguous pages starting from the first page in the given array of page pointers. VFIO will utilize this interface to accelerate the VFIO DMA map process. Suggested-by: David Hildenbrand Suggested-by: Jason Gunthorpe Signed-off-by: Li Zhe Acked-by: David Hildenbrand --- include/linux/mm.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/include/linux/mm.h b/include/linux/mm.h index 0ef2ba0c667a..fae82df6d7d7 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1761,6 +1761,29 @@ static inline unsigned long page_to_section(const struct page *page) } #endif +/* + * num_pages_contiguous() - determine the number of contiguous pages + * starting from the first page. + * + * Pages are contiguous if they represent contiguous PFNs. Depending on + * the memory model, this can mean that the addresses of the "struct page"s + * are not contiguous. + * + * @pages: an array of page pointers + * @nr_pages: length of the array + */ +static inline unsigned long num_pages_contiguous(struct page **pages, + size_t nr_pages) +{ + size_t i; + + for (i = 1; i < nr_pages; i++) + if (pages[i] != nth_page(pages[0], i)) + break; + + return i; +} + /** * folio_pfn - Return the Page Frame Number of a folio. * @folio: The folio. -- 2.20.1