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 30C72C83013 for ; Wed, 2 Jul 2025 10:49:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9FE9A8E0007; Wed, 2 Jul 2025 06:49:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9AEEA8E0001; Wed, 2 Jul 2025 06:49:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 828078E0007; Wed, 2 Jul 2025 06:49:39 -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 68FA98E0001 for ; Wed, 2 Jul 2025 06:49:39 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 0DAAEAFCF4 for ; Wed, 2 Jul 2025 10:49:39 +0000 (UTC) X-FDA: 83619003678.17.AAD156C Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf22.hostedemail.com (Postfix) with ESMTP id DBBEDC0005 for ; Wed, 2 Jul 2025 10:49:36 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="YqP+7/t7"; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf22.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751453376; a=rsa-sha256; cv=none; b=2XrlREXcquSlXez9rSUQpi68XVWa6U9Qg6Ba0dPjnx174bVcQD+jVqwMYIF9mMMWeKRz3h nCujkvuSzk5uBamhSMqOV7C9glYY9X1RHTFBCx0WUVErigTVARaBsDDYX5+LiwhNDu63xa kGRs2e2//at7U/cVHOdo/TfowTorUrQ= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="YqP+7/t7"; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf22.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751453376; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=VPISzlN4Ef+CieamPDhRbk3MzYno0ZPxQFyByj0IeiE=; b=xxYk0qJQ5GBvgCSGuJvLAynQ9M+os8NBgJXnpXU46BzyB/ydnYK5bt4xTkD4r9G93XMqsD p0ZWMfQytgCWAWygUT5XkBtrAg8CwR1pDmy06t5W9plgXiRUY4VzkmBenN9Hm6BN9BTVRu e+1tphah/2cveaytT675W0toBwzDa9Q= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751453376; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VPISzlN4Ef+CieamPDhRbk3MzYno0ZPxQFyByj0IeiE=; b=YqP+7/t7BqdeR9J+ykIbC913qhe9TvSu/vUrMEHPuhmiyVbH20kP76wZnpOPJBzVsrRy2p ucTO32jA6k7tmwk+EZW2rfDl/z5w0yrdTp4MSzW5fW9Pc17JI+AHrjmFu6qCIaehib4nAu NQQlYjcdunsxzeAgYRJsjgV3wBTaXBQ= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-518-P0iIPif_OUCY2zzkk9FRDQ-1; Wed, 02 Jul 2025 06:49:35 -0400 X-MC-Unique: P0iIPif_OUCY2zzkk9FRDQ-1 X-Mimecast-MFC-AGG-ID: P0iIPif_OUCY2zzkk9FRDQ_1751453374 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4537f56ab74so29915715e9.3 for ; Wed, 02 Jul 2025 03:49:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751453374; x=1752058174; 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=VPISzlN4Ef+CieamPDhRbk3MzYno0ZPxQFyByj0IeiE=; b=HlX5nUcDgGCYtyWOfCWoO7uNhWSJ2WQEj4F9U4O7NqSRP0oeK+Ia58xAgZz19wnA/o agrTlnZRLDfygZb4tluFga4ckSwvf6i0Puk8sCFUoEp1T4Na60HowpeJpyTPqAYFVDMR z0Nc/QrrC/GQ9vsNr8lLiqezzMgTUIfgve7Q10RES1i6a6l0XzrgLJeTdAhGx/6RDTr/ KPHeUVj5gL/Yh3r0gGlL7ObW6nH2tGe0LCB6QW1nlxGgoM5C20wvs9Qggg1fdEroc5W3 V/PFpAqtEvE/osJb9IHuS0ibcR0Agp1rFqxbc7S/I3JOx9b9ZOJ93ye5hzHoomm440rP rXWA== X-Gm-Message-State: AOJu0YwzP0V6y9zP01eEoZ8tH4+BaRIRnBgn5RfMetBSnzVXYnIP8Pwy 3SzUPL0RzlmE6FdfjUubuTEBL3CnTCWYlkmQsiwgLp76wWLQvO97uthtngyEyInkCa9q8qXAd1G rCBlPQntPhE1+SjXCFpPK3Oqs60U14jKjZ1I68xPvpoWkC4iiYVgZ X-Gm-Gg: ASbGncs6eMvCiMbYB2DdLodoDFegyGApF+fzqZWA45rnNuxtqr5Aa5LqRZUiMWKZ8+t MsqZhEkERgDqi2zkKU59KLj7+oPT9/jAAZdf/1edFaBWPi5XT8HpbxhQ++dQoEdwer5gtLIjSRc Dj+HWg7hHmBLkoKRgL4TmMuinPPYXuw/qMJOO21OfsA9iCRnTQwutROR+Ljpp4djdmk9K083jHt Mj9Ko7Gr6yYuGbXdJrjDK/auiL6kqny2ynu6hfqQfzZhFq4gVqCKKFy9rQ22XYy67fIyThy89XJ Oag4hLzm4yKXGxlg X-Received: by 2002:a05:600c:6992:b0:453:8a63:b484 with SMTP id 5b1f17b1804b1-454a373837cmr28268765e9.30.1751453373503; Wed, 02 Jul 2025 03:49:33 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHHQPoDIN7PwQ921rzZl2n7gXmku1+dhq1oXexaGTT/h4Oq5IhCFDNuSHNV22agwohZ0LPOxg== X-Received: by 2002:a05:600c:6992:b0:453:8a63:b484 with SMTP id 5b1f17b1804b1-454a373837cmr28268245e9.30.1751453372813; Wed, 02 Jul 2025 03:49:32 -0700 (PDT) Received: from localhost ([2a09:80c0:192:0:5dac:bf3d:c41:c3e7]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-453823b6d50sm227736465e9.30.2025.07.02.03.49.31 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 02 Jul 2025 03:49:32 -0700 (PDT) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, David Hildenbrand , Andrew Morton , "Liam R. Howlett" , Lorenzo Stoakes , Vlastimil Babka , Jann Horn , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Zi Yan , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Pedro Falcato , Rik van Riel , Harry Yoo , Lance Yang , Oscar Salvador , Lance Yang Subject: [PATCH v2 2/4] mm: smaller folio_pte_batch() improvements Date: Wed, 2 Jul 2025 12:49:24 +0200 Message-ID: <20250702104926.212243-3-david@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250702104926.212243-1-david@redhat.com> References: <20250702104926.212243-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 58Pm4e7lJFDbFNucTrzckGXcMQX7Weg8hVAQ7eycJp8_1751453374 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Stat-Signature: tkpha38iafiz3fczgdyua3ud4i6hcggz X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: DBBEDC0005 X-Rspam-User: X-HE-Tag: 1751453376-968942 X-HE-Meta: U2FsdGVkX1+Y7Cdc7A4NbX/Kj+9WnrZ0ZJK1J9TqRFikf66KV93ZM2qvR3QMMtx2tWzB8qndPcKP4LeyznWe0l8zdEkDnK/vIqJgWWUQ79f6/NWVY+SV8ascQwsTlNyBIpY9s0khtrosp6SuU2Lvy+CJhH4sKawydLdul4gzzSam6GQ8+Xhy0cv3QUksW8UItuPpyAHfKXko9By6cUrE1gwyhXq3GG5zAnVr2EyevlvQSC3sMGbXspA0pn3ldfNYrjtH7dowN3w46gKOzeMhohmXoE90v3p/PRTvzAezG6ZN073+KjcEkQqX0wyJr38rtPz1GTnpA8QRYpoaD0+Q/Q6fMQoeAm3e0XW5Mba1Lt/PsfHB0QXaOJe1FyAR+lShAxE26O2r4Sk0PMdOwp0eMoefDRevVEcjqkWfyOaUun5blqBsmZvILJYGr1VduwwL3G2cpOXXglgagd75FP1mcQihcmXElMiJn2+uXPvO7a7d0hsYIx2f+Q59XibNTU34Wsvr+oxgrDryuSd+gPz4VAPlvm8+BHezWwFiyJFBy2aXdsdT5CZrvH4q1xT/dVawqVTpMbT4TLE131Z0wrVTNwYMpxobzOyMMzx8ipoyVJwN/siI8MgDXbQF4NHQBHxxfo4mGVt//qU18FHxqacK0e32nGfNj8+r2Cvo0wWQ+3MGnVnPj0IeLV+P9ToKZp90tNBYc+mpRyYsDv6yypb4QcrHTOegM3tFtTS+1w4OJRNY1yVVuRuW5bIuGbWvlSoKHUJMrc85jS5XU7qMphRBDNCMW569xNBBUdURrr5PLdyJc1zmqZZuNBYIIg6saOSP7NlOrITN9ujFO9QIhnDwnkSW0cbyBbSU/1s8x53vN+5H/SUklFdc/54pojM5wlnLaJbGV/+V+WT9oaGBZZd3xE1V75vVTdQEy6MDJQ3cSro+hUFbiloiE2Nsmto1k2VZmhiJfg/95u1E74bKoQk Jp9goGzp xsa8E1xeu5BMWeT5eWt41mUi7voBienC9MoY0n+rRLYhp/cs6eQI4w2G7vDxIjVz2hVwi2oERJGwOpB3Ax2Rosleby3PW2XmkcRgBo7ckwMW5usHAhAPK6BAFwBWMu6cimrj2LHElQ+d9E4VJOMmIAOz7VLsUvkDM2a1Fq6zULsy1a/YPsPhQ8aY9fNWoZ06e/X8jjThxxw++OFA6ev/9+abe2GIuWTNf6PFLac5OD0MQU49C8BsUnHsapFcaArfbqbEdA8ddHBUdMnhV11e1XJJru61OdhuRRYXrV8VETgZV6JrNAmSAEVCHQHbNz2ijo9/Bpu3J5OqCpPShHALBwVF1dMFioC4kB5VYsJL2QqrjnQJlmUjmAbzBG5CbWdgg3V5x/vN/GLgGFT5Bt9MJZBOcWnUx2hpekN/HarHZWoZwkrAxOO4IS9tpBhT+BWzJhkmtLTeF0hBtGCuP5f7pl67Dyl01I4ZhhE6qVEwAc2du/mqWY+srxeuKiHHeNJ+jJECAMYn87ZaH8mS44bdDKMWGBqV0rLb1rZtKNxlOu4fibL0WRHEpQSt5j6IosomaSWvmUSxVx62VqDy0MazqNsEwB2UxFVetzX6Ac7Sd/Miv8G+V8/YgKyviikFWXneOnT2qR/e5f0UfJjPV32H3sDZgmmx1ON4IuIPYzP6QCP20a4hTKu/1neZnwQ== 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: Let's clean up a bit: (1) No need for start_ptep vs. ptep anymore, we can simply use ptep. (2) Let's switch to "unsigned int" for everything. Negative values do not make sense. (3) We can simplify the code by leaving the pte unchanged after the pte_same() check. (4) Clarify that we should never exceed a single VMA; it indicates a problem in the caller. No functional change intended. Reviewed-by: Lance Yang Reviewed-by: Lorenzo Stoakes Reviewed-by: Oscar Salvador Signed-off-by: David Hildenbrand --- mm/internal.h | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index 170d55b6851ff..dba1346ded972 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -221,7 +221,7 @@ static inline pte_t __pte_batch_clear_ignored(pte_t pte, fpb_t flags) * folio_pte_batch - detect a PTE batch for a large folio * @folio: The large folio to detect a PTE batch for. * @addr: The user virtual address the first page is mapped at. - * @start_ptep: Page table pointer for the first entry. + * @ptep: Page table pointer for the first entry. * @pte: Page table entry for the first page. * @max_nr: The maximum number of table entries to consider. * @flags: Flags to modify the PTE batch semantics. @@ -233,24 +233,24 @@ static inline pte_t __pte_batch_clear_ignored(pte_t pte, fpb_t flags) * first one is dirty. * * Detect a PTE batch: consecutive (present) PTEs that map consecutive - * pages of the same large folio. + * pages of the same large folio in a single VMA and a single page table. * * All PTEs inside a PTE batch have the same PTE bits set, excluding the PFN, * the accessed bit, writable bit, dirty bit (unless FPB_RESPECT_DIRTY is set) * and soft-dirty bit (unless FPB_RESPECT_SOFT_DIRTY is set). * - * start_ptep must map any page of the folio. max_nr must be at least one and - * must be limited by the caller so scanning cannot exceed a single page table. + * @ptep must map any page of the folio. max_nr must be at least one and + * must be limited by the caller so scanning cannot exceed a single VMA and + * a single page table. * * Return: the number of table entries in the batch. */ -static inline int folio_pte_batch(struct folio *folio, unsigned long addr, - pte_t *start_ptep, pte_t pte, int max_nr, fpb_t flags, +static inline unsigned int folio_pte_batch(struct folio *folio, unsigned long addr, + pte_t *ptep, pte_t pte, unsigned int max_nr, fpb_t flags, bool *any_writable, bool *any_young, bool *any_dirty) { - pte_t expected_pte, *ptep; - bool writable, young, dirty; - int nr, cur_nr; + unsigned int nr, cur_nr; + pte_t expected_pte; if (any_writable) *any_writable = false; @@ -267,29 +267,22 @@ static inline int folio_pte_batch(struct folio *folio, unsigned long addr, max_nr = min_t(unsigned long, max_nr, folio_pfn(folio) + folio_nr_pages(folio) - pte_pfn(pte)); - nr = pte_batch_hint(start_ptep, pte); + nr = pte_batch_hint(ptep, pte); expected_pte = __pte_batch_clear_ignored(pte_advance_pfn(pte, nr), flags); - ptep = start_ptep + nr; + ptep = ptep + nr; while (nr < max_nr) { pte = ptep_get(ptep); - if (any_writable) - writable = !!pte_write(pte); - if (any_young) - young = !!pte_young(pte); - if (any_dirty) - dirty = !!pte_dirty(pte); - pte = __pte_batch_clear_ignored(pte, flags); - if (!pte_same(pte, expected_pte)) + if (!pte_same(__pte_batch_clear_ignored(pte, flags), expected_pte)) break; if (any_writable) - *any_writable |= writable; + *any_writable |= pte_write(pte); if (any_young) - *any_young |= young; + *any_young |= pte_young(pte); if (any_dirty) - *any_dirty |= dirty; + *any_dirty |= pte_dirty(pte); cur_nr = pte_batch_hint(ptep, pte); expected_pte = pte_advance_pfn(expected_pte, cur_nr); -- 2.49.0