From nobody Sun Jun 14 17:43:38 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 0A3B0C433F5 for ; Fri, 13 May 2022 19:18:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232246AbiEMTSf (ORCPT ); Fri, 13 May 2022 15:18:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1383651AbiEMTSJ (ORCPT ); Fri, 13 May 2022 15:18:09 -0400 Received: from mail-pg1-x529.google.com (mail-pg1-x529.google.com [IPv6:2607:f8b0:4864:20::529]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9125A39690 for ; Fri, 13 May 2022 12:17:09 -0700 (PDT) Received: by mail-pg1-x529.google.com with SMTP id 202so8326099pgc.9 for ; Fri, 13 May 2022 12:17:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fI4s2HINPFUbEKGeiTK1C7ys6CYCE4B+Ur6Y4V+hIS8=; b=BpOMQbTzc0ctTPpAZGUWCn3VcTZxJtBSVxY0YM69ErbqGE+HP9z2dvPuK2Omqjzy8C Zaz/U0oEfyWLrgwc1lx6gYQpk+LWeOd7yVycsU8TH9EGzz0FehgEnQvJ32sn4MuRZ42n GiQwRVXl+DpJJSa2FXB8ta30AnKenoESuLTiurpcDY00jhNw9y2PLZzUuK40t0Y8i6s3 tO2I6UNzRnlixlUb2UyIWJQ5asBM1qT0ianpfQnhoYGTDRRmW+XDog1koa3CEtCLu1Me m4mgnY67icX3NV8zZ4G7vmOOufBtbTOCj7Hb2/5mZGuOUQ3gXQFYCapqq1oJpFkPfvO6 g5gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fI4s2HINPFUbEKGeiTK1C7ys6CYCE4B+Ur6Y4V+hIS8=; b=j3LIUr4bPoblwHlk8HeJX+n1y8pPBcPmaALHoeyyv1P+1nrE5T1XfMgUAsRKMaR6gr Y75wtXepWR4zKLOY7By99vsTXnCpsGxVBT8nKPDQ4ydDs89/p0rJaOuGwSxsWOPuKofc uliHSE9SfjTV3tlRZtCNAMeeQKTui2BQhkJW5hcxZUfEUc2F8/hm4xbcyLx40THLXyPs Cubyd5tGCbZUmvk/5Zu+cXZPQDbauLOwG7FLnL1AnjUqqzWPnwU0nUYPed1NuCm3dxfm JkL9TG/f2+GgOffdFB/4MWXg35u8O1J14AhkLa6E5ZyDkGF2BFQ+RUB7j32ABWVFAGAW c+ug== X-Gm-Message-State: AOAM533xLgs+3pWCsWhJnTdITOtmPoLzZ5CsmHNevyQgXdjoWMc+wXyc pD6odz+844jSUQbuuJEMTUo= X-Google-Smtp-Source: ABdhPJzRhsPymC/aHtOCP3BDB15IY/DtFfRSqYLS+jInowyhP+bmkjLt8zavU/6AQhOTZ5vbttb3Yw== X-Received: by 2002:a63:2b45:0:b0:3ab:971b:be5e with SMTP id r66-20020a632b45000000b003ab971bbe5emr5074488pgr.265.1652469428643; Fri, 13 May 2022 12:17:08 -0700 (PDT) Received: from localhost.localdomain (c-67-174-241-145.hsd1.ca.comcast.net. [67.174.241.145]) by smtp.gmail.com with ESMTPSA id t11-20020a170902e84b00b0015e8d4eb1dfsm2278654plg.41.2022.05.13.12.17.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 May 2022 12:17:06 -0700 (PDT) From: Yang Shi To: willy@infradead.org, songmuchun@bytedance.com, akpm@linux-foundation.org Cc: shy828301@gmail.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [v2 PATCH] mm: pvmw: check possible huge PMD map by transhuge_vma_suitable() Date: Fri, 13 May 2022 12:17:05 -0700 Message-Id: <20220513191705.457775-1-shy828301@gmail.com> X-Mailer: git-send-email 2.26.3 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" IIUC PVMW checks if the vma is possibly huge PMD mapped by transparent_hugepage_active() and "pvmw->nr_pages >=3D HPAGE_PMD_NR". Actually pvmw->nr_pages is returned by compound_nr() or folio_nr_pages(), so the page should be THP as long as "pvmw->nr_pages >=3D HPAGE_PMD_NR". And it is guaranteed THP is allocated for valid VMA in the first place. But it may be not PMD mapped if the VMA is file VMA and it is not properly aligned. The transhuge_vma_suitable() is used to do such check, so replace transparent_hugepage_active() to it, which is too heavy and overkilling. Cc: Matthew Wilcox (Oracle) Cc: Muchun Song Signed-off-by: Yang Shi Reviewed-by: Muchun Song --- v2: * Fixed build error for !CONFIG_TRANSPARENT_HUGEPAGE * Removed fixes tag per Willy include/linux/huge_mm.h | 8 ++++++-- mm/page_vma_mapped.c | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index fbf36bb1be22..c2826b1f4069 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -117,8 +117,10 @@ extern struct kobj_attribute shmem_enabled_attr; extern unsigned long transparent_hugepage_flags; =20 static inline bool transhuge_vma_suitable(struct vm_area_struct *vma, - unsigned long haddr) + unsigned long addr) { + unsigned long haddr; + /* Don't have to check pgoff for anonymous vma */ if (!vma_is_anonymous(vma)) { if (!IS_ALIGNED((vma->vm_start >> PAGE_SHIFT) - vma->vm_pgoff, @@ -126,6 +128,8 @@ static inline bool transhuge_vma_suitable(struct vm_are= a_struct *vma, return false; } =20 + haddr =3D addr & HPAGE_PMD_MASK; + if (haddr < vma->vm_start || haddr + HPAGE_PMD_SIZE > vma->vm_end) return false; return true; @@ -328,7 +332,7 @@ static inline bool transparent_hugepage_active(struct v= m_area_struct *vma) } =20 static inline bool transhuge_vma_suitable(struct vm_area_struct *vma, - unsigned long haddr) + unsigned long addr) { return false; } diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c index c10f839fc410..e971a467fcdf 100644 --- a/mm/page_vma_mapped.c +++ b/mm/page_vma_mapped.c @@ -243,7 +243,7 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *= pvmw) * cleared *pmd but not decremented compound_mapcount(). */ if ((pvmw->flags & PVMW_SYNC) && - transparent_hugepage_active(vma) && + transhuge_vma_suitable(vma, pvmw->address) && (pvmw->nr_pages >=3D HPAGE_PMD_NR)) { spinlock_t *ptl =3D pmd_lock(mm, pvmw->pmd); =20 --=20 2.26.3