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 7D0D1C83F07 for ; Mon, 7 Jul 2025 06:50:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0640C6B03FB; Mon, 7 Jul 2025 02:50:15 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 014E26B03FC; Mon, 7 Jul 2025 02:50:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E461A6B03FD; Mon, 7 Jul 2025 02:50:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id CE6506B03FB for ; Mon, 7 Jul 2025 02:50:14 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 819B816034B for ; Mon, 7 Jul 2025 06:50:14 +0000 (UTC) X-FDA: 83636544348.16.4B5EF10 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) by imf09.hostedemail.com (Postfix) with ESMTP id 9D61314000D for ; Mon, 7 Jul 2025 06:50:12 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=hU7PcwwS; spf=pass (imf09.hostedemail.com: domain of lizhe.67@bytedance.com designates 209.85.214.180 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=1751871012; 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=e83zaooyctJVGMAyfqno/5MLE5GO1gHM6Xp57jXORKE=; b=T6WWpxofilWaT6TCBIlH1PO8wWzbmLAWNIoARHePQuHLz46XJtbxvIssDSsWoP0MQtCuvk AvfjxiOhZL//nNDyD4mm+F5jhO47fALVzfhJwTjHls7P4lfzrca7UTTegc6Wg1CM4mVkPp Z3Pe3rC+y5H0uaE+xDrc6YpRv1JRH74= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=hU7PcwwS; spf=pass (imf09.hostedemail.com: domain of lizhe.67@bytedance.com designates 209.85.214.180 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=1751871012; a=rsa-sha256; cv=none; b=brFplw4KjuOa6yVvpoX4JnxwxDCTUBOx/vo9HuTkNODYAT/oBkNxPeOxqsJ9NkZa4J2qnJ zGK1yyQz1cXKBvBYMfI/gVGmUFCopAv7nPeW1tUDZmiY420I8rRQ0xUrY4FHPsR+glJzIC 6Vgia3cTKIGZD29AgOjxSGQ3rA8DQIE= Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2350fc2591dso24562125ad.1 for ; Sun, 06 Jul 2025 23:50:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1751871011; x=1752475811; 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=e83zaooyctJVGMAyfqno/5MLE5GO1gHM6Xp57jXORKE=; b=hU7PcwwSvFIgSexpkgLTFtjDbg03P606b2suTQ8WOVdw5FWoEV4QMTgX3yIxrphsrJ V2SRbRRgLQcsyVE/vroZrGxtQeP+VkmpIqVbM6oSkilFGVttYr+ebwBAPomF/pMVnXQ6 zhBBb4d9a4pVAY7yFlltMdJCkfvvKrPAW1gxIqCTsLIgaiJnxl/0Ijv31XB7sBP8GyW6 H6baD8kvh27nGso7zfampCiSNSL2gNiGp483kyrEPAM6hN2dfZueZ7pv/dMNKsYf+bTl srcYYH6J3nFBK85yRbjkLBEtV5GW3/0ZD9DtS2dMe27Eha8QUprbwFZ1u6R/va8RCrUz g9qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751871011; x=1752475811; 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=e83zaooyctJVGMAyfqno/5MLE5GO1gHM6Xp57jXORKE=; b=NBiDJ7OpYxylDiIkC/V1KW7Q03rkL2OY8YgsFMGqKxIG28pRj73iTMFL44iIjcOL4B L3P6hWzumrkdnTlk7QzIBTympsxslWqpMZwJzgt0x+MLjUOxUv/jKnbdtkvfsoE5TLMv 19P+UeKjG1s2+66XlvzoZqoA1hfGWb8wMxQ6/MTsq0sU1/0EKkInO1aB7bNyAHOmH9Kn ahYZvCnfJ/YR2oCkbF2jJze/Gkfd5kWoYKB72PmAUKeEGqo+jXrUGKaByRXkYBi+Wd2a eeYHXqkGSq4aQiAGTsstugm4qdtvxE0Ya0rQZ6+tdWz6XCLy8v4P5wLl3hvxIlVzzWS8 Mlog== X-Forwarded-Encrypted: i=1; AJvYcCXEJW7B9QOwt99qbul9OtAJhlVSR48E653ctmhqNKgb/AAoHMpj5HxjCZfxFjtNlsO78UkPH9WpTQ==@kvack.org X-Gm-Message-State: AOJu0YwSIuwROab5+3TsJSa5Pd/FuNPor7bQVSjnjdbg3syMybMRKPy5 BtfDzxd6AXvkDJTiJpcfH8Htv1X90qA3tqLcXwW1e4P4GfR4UWti5GfEUeSgDgLGI7g= X-Gm-Gg: ASbGncs+2KP2sMoNVmrTO4LT2+cc2aw9IqsOAfrAf5B6XytzOT2XzQbpZdsBjTSp1F1 lLIgfpMymcD1L/JWnB7AUcvXXHHWdP2M7ve1ULkzinJwukxVi2rp10Td8G/SjibBfy06WqUA7nk YBfT8FJ49TdoKgQciHqwNV4q6b2ipSf7qJdISY/o3/qbTOKtB/a+J+QFItaMTVALzesEBO2tRqi +W0peCLGaQ7h6SOxf4SOV6eSi7VLFXJcinqSdRU5uszQX60HixJHm/nwHxTQ2U8eXE0sU3cD/Jp o4lHvSxhfSBsKX3AN3DMByd0xiLCwPfIEbQ4X5cc1yCgrrngatnjzW1U7i+yWDqJhwdmPsVzRpt 2d0E8ut9ofpXn X-Google-Smtp-Source: AGHT+IHZIatv+CFtPNahfbucN1jWL70KTS2wbiORevgf6e2vHgPOO4LbLUKtKdQFdYuPICyB+irnmw== X-Received: by 2002:a17:903:1ce:b0:237:e753:1808 with SMTP id d9443c01a7336-23c84b9a123mr186936395ad.20.1751871011205; Sun, 06 Jul 2025 23:50:11 -0700 (PDT) Received: from localhost.localdomain ([203.208.189.9]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-23c8431a1aasm77377635ad.15.2025.07.06.23.50.07 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 06 Jul 2025 23:50: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 v3 1/5] mm: introduce num_pages_contiguous() Date: Mon, 7 Jul 2025 14:49:46 +0800 Message-ID: <20250707064950.72048-2-lizhe.67@bytedance.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250707064950.72048-1-lizhe.67@bytedance.com> References: <20250707064950.72048-1-lizhe.67@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: byjbkabojfaazhh9mqzt68esq8o9xuu3 X-Rspamd-Queue-Id: 9D61314000D X-Rspam-User: X-Rspamd-Server: rspam07 X-HE-Tag: 1751871012-287782 X-HE-Meta: U2FsdGVkX19thhIw3FdMlqvGB1ooML2MPp3dCkcX2OQAUvcnCtIIjmKNbFoRBFqYvuN852UlWizYyIqM4Ckw7aZS164mf5GfutGbGiqRLsjnlNQetDHG4PcV8K4z5zU5uw3eFgqe6y+tkP2u/EdAIg/5CV0qC1WYSDMze6/B96CkM2QRBehG5VNMwVfLdF1BAXdIKF12fj1/j+yfgSJwiXX/amKpLniWPpDfWhl8wR8P09C/7cwpyto561dq39HhjJnJNofLIxwVHGW+rh9fzx9jl/QVkykMdu/OSmAi/iIz1xuUBW+cEzAk7tOPxCAialybjm2f/6rw+6DUuEqPkOKOMBxD/7q6HqtOzcTauVsbdzzt4BSX/AaOHpV/ERg+01LDy20yyTguGwLFpjyihxUUYLJtFGAv5yxhEwd3qXmc9L4jxeGpTk4emS3PXP7TKY/LnVpnGu6sSd47+kJ3putzxJ/XLp570c34c4f+eWM4nXbDLDKt6F99LZ87OcLJUCC1F9rfEyLqAf19ZR0aM+lru8Km0yg0jDVRc7ptU/EUcz+Xf8FrUh/FfcRuZDhhsBtyCSAhG4Vkl2iyEAzDrH2ZlhBVn5oTmC4912hsWCK9YUn+mQqsdwn6ib02PmgsmPOqgdE56+vtlX1NfV77chl52kHrdGxrjQxq6n0mMr05ZX6WL4hizJS9iuT66/HVHkVzQQZxX93HC+GFSjrfXU9Kflm221sTUaTVO/XBNqyXFOwOZbHN1RyyQCmjMASUtJTSCih7OjT+cs3Uy6yibF34TX/B78Z5LW+BhNzh5JILUE2hoa0/qOY5KKj/KrJx37j9r5yUT5mj6CKZMIbzSweLXScKf4MiYPWM9Q8ztwFPqLu2FFROvQMUzC4GioZXajKe5b20rIYt2DV/unpDCXnDTVc/hSEUwgvnBx8ETcqy47hiAlAj0FyQyZExaUyHDCEguOPvaYOmJ4xhhE7 VBsv73fY p7Z3s4hT2tar2LHBJkdDEs4/fKbnhk9TjXNRTWqMnixNjgISCk1bwb7E5MpewQ2657f76w4X/qjZ40j/Jn5DjGIDWVI9RgBAfGXhC/H4B1z0cDqA7qQBXOTWz7Z0A7U4jLbipUH/FXsIIcHT4Cvqbq7yrv5GIBHHT8UbJETztwW7NGhKuj2FThRqGFFV/UQ8IkLoEzKrNF9Ah+tzYbangCyUAsPbdxNrxPifLMRk04RJ/nDH+9OSR3zS68HlmgBfKHaz4iMUrTFVqSDYZ1h/m2TwLTYajIp7aw1vIbTY3twvzIizgFRaqmMMEKqkwH5v8qaq3NqLlRDvHkhHdk2yzKhjozvhmlKKgKHaFbLB5gDmYQNrwg7xsSrq5QxcT53Uvz5m7cclNqpuGmio+V4S0bMN4PrAO4TJR5SkQmPGLFK0Byygdft1lj25rqxcA80cwE7hBIN1iHrLo2lbb7IsOYqE45Q== 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 --- 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