From nobody Sun Feb 8 15:08:22 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44D5AC77B7A for ; Tue, 30 May 2023 08:06:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229951AbjE3IGn (ORCPT ); Tue, 30 May 2023 04:06:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56702 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229977AbjE3IGb (ORCPT ); Tue, 30 May 2023 04:06:31 -0400 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6A991118; Tue, 30 May 2023 01:06:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1685433979; x=1716969979; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=OGmxL+UqnOoB6DUSYUyFxvx/lt+FRL5wf9KNfFiPBCY=; b=ng9wZFYynhWGKyhXbvZ8W/P5iR1hoO/6ZKbiZ8paLvOcP0prkQBT2Bii rYdRFbSVvVFgtjCjQdGvnRHoHcStbvYubxxJKRD4G2AIhsRSlIHoBJGod VElCzvwg6bJy6vFyJHy4E9QgM0RcVhwTsb/sOQ1QpNTqzMZhYXubQDcJm 2qMEq31CD9QtN793Yt64HAtRZwsUWVx4M+06/bd26ixnhB6gS0EHMCijf BVNnSW7G/mZ7OIQ/asqB4UajzbbH7+myCLAYB5cZAIiJV2UGkmqkVWIvO ARvspQATOe9dyQVBq8oY3MOD8FvoKaFS/+Tvizu1u51b3NzmkEsmTBH38 g==; X-IronPort-AV: E=McAfee;i="6600,9927,10725"; a="418332094" X-IronPort-AV: E=Sophos;i="6.00,203,1681196400"; d="scan'208";a="418332094" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2023 01:06:18 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10725"; a="739426336" X-IronPort-AV: E=Sophos;i="6.00,203,1681196400"; d="scan'208";a="739426336" Received: from fyin-dev.sh.intel.com ([10.239.159.32]) by orsmga001.jf.intel.com with ESMTP; 30 May 2023 01:06:16 -0700 From: Yin Fengwei To: willy@infradead.org, ryan.roberts@arm.com, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: fengwei.yin@intel.com Subject: [PATCH 1/4] filemap: avoid interfere with xas.xa_index Date: Tue, 30 May 2023 16:07:28 +0800 Message-Id: <20230530080731.1462122-2-fengwei.yin@intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230530080731.1462122-1-fengwei.yin@intel.com> References: <20230530080731.1462122-1-fengwei.yin@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Ryan noticed 1% performance regression for kernel build with the ranged file map with ext4 file system. It was later identified wrong xas.xa_index update in filemap_map_pages() when folio is not large folio. Matthew suggested to use XArray API instead of touch xas.xa_index directly at [1]. [1] https://lore.kernel.org/linux-mm/ZBho6Q6Xq%2FYqRmBT@casper.infradead.or= g/ Signed-off-by: Yin Fengwei Suggested-by: Matthew Wilcox --- mm/filemap.c | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 40be33b5ee46..fdb3e0a339b3 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -3416,10 +3416,10 @@ static bool filemap_map_pmd(struct vm_fault *vmf, s= truct folio *folio, return false; } =20 -static struct folio *next_uptodate_page(struct folio *folio, - struct address_space *mapping, - struct xa_state *xas, pgoff_t end_pgoff) +static struct folio *next_uptodate_folio(struct xa_state *xas, + struct address_space *mapping, pgoff_t end_pgoff) { + struct folio *folio =3D xas_next_entry(xas, end_pgoff); unsigned long max_idx; =20 do { @@ -3457,22 +3457,6 @@ static struct folio *next_uptodate_page(struct folio= *folio, return NULL; } =20 -static inline struct folio *first_map_page(struct address_space *mapping, - struct xa_state *xas, - pgoff_t end_pgoff) -{ - return next_uptodate_page(xas_find(xas, end_pgoff), - mapping, xas, end_pgoff); -} - -static inline struct folio *next_map_page(struct address_space *mapping, - struct xa_state *xas, - pgoff_t end_pgoff) -{ - return next_uptodate_page(xas_next_entry(xas, end_pgoff), - mapping, xas, end_pgoff); -} - /* * Map page range [start_page, start_page + nr_pages) of folio. * start_page is gotten from start by folio_page(folio, start) @@ -3543,12 +3527,11 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf, unsigned long addr; XA_STATE(xas, &mapping->i_pages, start_pgoff); struct folio *folio; - unsigned int mmap_miss =3D READ_ONCE(file->f_ra.mmap_miss); vm_fault_t ret =3D 0; int nr_pages =3D 0; =20 rcu_read_lock(); - folio =3D first_map_page(mapping, &xas, end_pgoff); + folio =3D next_uptodate_folio(&xas, mapping, end_pgoff); if (!folio) goto out; =20 @@ -3570,15 +3553,14 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf, =20 ret |=3D filemap_map_folio_range(vmf, folio, xas.xa_index - folio->index, addr, nr_pages); - xas.xa_index +=3D nr_pages; =20 folio_unlock(folio); folio_put(folio); - } while ((folio =3D next_map_page(mapping, &xas, end_pgoff)) !=3D NULL); + folio =3D next_uptodate_folio(&xas, mapping, end_pgoff); + } while (folio); pte_unmap_unlock(vmf->pte, vmf->ptl); out: rcu_read_unlock(); - WRITE_ONCE(file->f_ra.mmap_miss, mmap_miss); return ret; } EXPORT_SYMBOL(filemap_map_pages); --=20 2.30.2 From nobody Sun Feb 8 15:08:22 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44D38C77B7A for ; Tue, 30 May 2023 08:07:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230005AbjE3IHR (ORCPT ); Tue, 30 May 2023 04:07:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230047AbjE3IGv (ORCPT ); Tue, 30 May 2023 04:06:51 -0400 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15DE3E45; Tue, 30 May 2023 01:06:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1685433993; x=1716969993; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=JECnRzWsjoveNrvZKVFqMJv39FXO8gY9Cjv6t+BF/f4=; b=J8yG1yGdFAvuqe/XMreBBHjOZabgraIDKMCmT5mqNPDiaWFYXf8Hnx71 t0oMh61eU8Om+RHHcg5tC0HWAwQI+SBDNBxPS84OmN75WnMkBEO9GAMLe yM16AvbNDUtEGMtrFxoWTEaG6NsYIJ+6DT3eJjVQ01krDwxEYwUBsv/jc ZFxGxGy821NvJHXIFB2N4WymJzNbVUAyUWrKPhSjpFgKaUTXUt62jRQDa 5gN9nMuIAZhDm9Z82M7vm/AOrfeNUIZPHHbw0WEDzWQix09y4waxqPBqO Wh7qiinhU7A+K/PxpTzao/5qsr1HnFL22Dy3xv1qMpVpZ+k+l2ZYlQXLT Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10725"; a="418332163" X-IronPort-AV: E=Sophos;i="6.00,203,1681196400"; d="scan'208";a="418332163" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2023 01:06:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10725"; a="739426363" X-IronPort-AV: E=Sophos;i="6.00,203,1681196400"; d="scan'208";a="739426363" Received: from fyin-dev.sh.intel.com ([10.239.159.32]) by orsmga001.jf.intel.com with ESMTP; 30 May 2023 01:06:30 -0700 From: Yin Fengwei To: willy@infradead.org, ryan.roberts@arm.com, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: fengwei.yin@intel.com Subject: [PATCH 2/4] rmap: fix typo in folio_add_file_rmap_range() Date: Tue, 30 May 2023 16:07:29 +0800 Message-Id: <20230530080731.1462122-3-fengwei.yin@intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230530080731.1462122-1-fengwei.yin@intel.com> References: <20230530080731.1462122-1-fengwei.yin@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The "first" should be used to compare with COMPOUND_MAPPED instead of "nr". Signed-off-by: Yin Fengwei --- mm/rmap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/rmap.c b/mm/rmap.c index ec52d7f264aa..b352c14da16c 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -1330,7 +1330,7 @@ void folio_add_file_rmap_range(struct folio *folio, s= truct page *page, first =3D atomic_inc_and_test(&page->_mapcount); if (first && folio_test_large(folio)) { first =3D atomic_inc_return_relaxed(mapped); - first =3D (nr < COMPOUND_MAPPED); + first =3D (first < COMPOUND_MAPPED); } =20 if (first) --=20 2.30.2 From nobody Sun Feb 8 15:08:22 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01032C7EE23 for ; Tue, 30 May 2023 08:07:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230182AbjE3IHg (ORCPT ); Tue, 30 May 2023 04:07:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57134 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230104AbjE3IHL (ORCPT ); Tue, 30 May 2023 04:07:11 -0400 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0A2D3E5F; Tue, 30 May 2023 01:06:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1685434006; x=1716970006; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3NUJ2cV526DtOmRsdjgiB8BAWkISfmdbH9OrsnpKKCA=; b=ePA0Sj4et55eLFzeuvoOqqtw9lnmEFV7f/t413xNcDEHZiWCYdZlUnQD lvEqYmfdmbho0vUVORm+9jOtpY/B13XvgSmYXgRptxe/7+U3dO10YcOKK QfT701J0TQYILBE9/z63L364amL2YdjGrfbc8s2H2qFOKx/L/MmbyMLqW w5mansNW0WptJ6mRYmvb3GnffIcqf0Dwc7miErg493dZ3bkJpb5HitIOW B7OLD3R0Pi4h3CC0xxvxGz1WRab2S59R9Z4+5pb78PBpd557Vc6i+HrQG iFFxJqRos3LK75H3Dis8UTCGght0r/pVENy/J+DEfU0w7dxoWarhKeTyR A==; X-IronPort-AV: E=McAfee;i="6600,9927,10725"; a="335196940" X-IronPort-AV: E=Sophos;i="6.00,203,1681196400"; d="scan'208";a="335196940" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2023 01:06:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10725"; a="706326971" X-IronPort-AV: E=Sophos;i="6.00,203,1681196400"; d="scan'208";a="706326971" Received: from fyin-dev.sh.intel.com ([10.239.159.32]) by orsmga002.jf.intel.com with ESMTP; 30 May 2023 01:06:43 -0700 From: Yin Fengwei To: willy@infradead.org, ryan.roberts@arm.com, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: fengwei.yin@intel.com Subject: [PATCH 3/4] mm: mark PTEs referencing the accessed folio young Date: Tue, 30 May 2023 16:07:30 +0800 Message-Id: <20230530080731.1462122-4-fengwei.yin@intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230530080731.1462122-1-fengwei.yin@intel.com> References: <20230530080731.1462122-1-fengwei.yin@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" To allow using larger TLB entries, it's better to mark the PTEs of same folio accessed when setup the PTEs. Reported-by: Ryan Roberts Signed-off-by: Yin Fengwei --- mm/memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/memory.c b/mm/memory.c index c359fb8643e5..2615ea552613 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4259,7 +4259,7 @@ void set_pte_range(struct vm_fault *vmf, struct folio= *folio, struct vm_area_struct *vma =3D vmf->vma; bool uffd_wp =3D pte_marker_uffd_wp(vmf->orig_pte); bool write =3D vmf->flags & FAULT_FLAG_WRITE; - bool prefault =3D vmf->address !=3D addr; + bool prefault =3D (addr > vmf->address) || ((addr + nr) < vmf->address); pte_t entry; =20 flush_icache_pages(vma, page, nr); --=20 2.30.2 From nobody Sun Feb 8 15:08:22 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D7E87C7EE2E for ; Tue, 30 May 2023 08:07:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229958AbjE3IH7 (ORCPT ); Tue, 30 May 2023 04:07:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57692 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230087AbjE3IH3 (ORCPT ); Tue, 30 May 2023 04:07:29 -0400 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8CC6E196; Tue, 30 May 2023 01:07:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1685434023; x=1716970023; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=iLg8+BuQb6cfAwix3TzfWOi+K6oPegJSPNVGDscU724=; b=GrsIz0w5JHLXgZKnKvK2hqHcRv02qPfxF2wM8z+g9GqWmhw5E3FqLUHP Vabw1/vyKCeIEvZyCyNLxj+EIHLytfhyOkY8Zb/TiN5Fk5VKUsg+Rj/yL n+/UjPZQ6ZNrYm104t6Y4Mw0Q7xUrhYutzp928iwST7MFHETzlh1llD6j 4YbjbhLo7sLfEypGH9/1t8oGVL3XdiXMnN2MwZWRngkDF62PqLVfq173G sDyobAf4F7FFd/5WiJVP52dfRSShK5O/1VUg178IfE0okAH/eED36ume6 QPixbGkx5df52EM817hDfMO7nEg7ZJaogsYfDqRXGASJY4+EjTUf+EARg g==; X-IronPort-AV: E=McAfee;i="6600,9927,10725"; a="344349314" X-IronPort-AV: E=Sophos;i="6.00,203,1681196400"; d="scan'208";a="344349314" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2023 01:06:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10725"; a="880678883" X-IronPort-AV: E=Sophos;i="6.00,203,1681196400"; d="scan'208";a="880678883" Received: from fyin-dev.sh.intel.com ([10.239.159.32]) by orsmga005.jf.intel.com with ESMTP; 30 May 2023 01:06:54 -0700 From: Yin Fengwei To: willy@infradead.org, ryan.roberts@arm.com, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: fengwei.yin@intel.com Subject: [PATCH 4/4] filemap: Check address range in filemap_map_folio_range() Date: Tue, 30 May 2023 16:07:31 +0800 Message-Id: <20230530080731.1462122-5-fengwei.yin@intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230530080731.1462122-1-fengwei.yin@intel.com> References: <20230530080731.1462122-1-fengwei.yin@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" With filemap_map_folio_range(), the addr is updated with range also. Address range checking is needed to make sure correct return value (VM_FAULT_NOPAGE) if vmf->address is handled. Signed-off-by: Yin Fengwei --- mm/filemap.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index fdb3e0a339b3..0f4baba1cd31 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -3488,15 +3488,15 @@ static vm_fault_t filemap_map_folio_range(struct vm= _fault *vmf, if (!pte_none(vmf->pte[count])) goto skip; =20 - if (vmf->address =3D=3D addr) - ret =3D VM_FAULT_NOPAGE; - count++; continue; skip: if (count) { set_pte_range(vmf, folio, page, count, addr); folio_ref_add(folio, count); + if ((vmf->address < (addr + count * PAGE_SIZE)) && + (vmf->address >=3D addr)) + ret =3D VM_FAULT_NOPAGE; } =20 count++; @@ -3509,6 +3509,9 @@ static vm_fault_t filemap_map_folio_range(struct vm_f= ault *vmf, if (count) { set_pte_range(vmf, folio, page, count, addr); folio_ref_add(folio, count); + if ((vmf->address < (addr + count * PAGE_SIZE)) && + (vmf->address >=3D addr)) + ret =3D VM_FAULT_NOPAGE; } =20 vmf->pte =3D old_ptep; --=20 2.30.2