Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp852699iob; Fri, 13 May 2022 14:28:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwBA11xf3r1JyvHEyaS0OhxlfM1ifqVXA9vaghPgkX+RjA+efH0lwHbl4PIdKVhAn01BRcr X-Received: by 2002:a17:907:9613:b0:6f4:3b48:b004 with SMTP id gb19-20020a170907961300b006f43b48b004mr5872024ejc.171.1652477338448; Fri, 13 May 2022 14:28:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652477338; cv=none; d=google.com; s=arc-20160816; b=lhu8UF9XcFeKTf+Fa3qZyWH9CiXEMgQp1F8GF0ulPt0Bg5qMwxe9Htp95heQV3PjtF IpDmj+JLS5Vl9y3nvg9AeLSHVV3BUgxKrYS/57MfmB3KTI0JxdhJAFGSQLOZpsDVnQYS y1Vz8V65EbyBL4Xk+DAymEyaG+6Bh7tPoYFxt1gzEScSYWdGnmv3lR69e/96k6gXEusf OelWlS8RiQKFNGFkf+r567XQ+wQJSnh0gRaPunUXETEWFOMhkvVrbixEYwsqADf2CaHC y0jkgMRJ2uTNGdfYVSph2lyDmAqEIqqTfh3FLpTTJAhoE2WAX3acUs89VEfBjOo9JQ7r eizQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=fI4s2HINPFUbEKGeiTK1C7ys6CYCE4B+Ur6Y4V+hIS8=; b=KOmzLFm7pdsfiPCwU18kd4wDplcUw0D6svimHaq5H4fQNdYt1wm5IfCBKcj/S2PZZC mX8BaQYc/IoxNR47S0DXtI9DnIWoj2l6LlCT0W9LZvcsEtyah/M1RD3OPqXI4601dzgU i1AU5Vi0vLN3ufNzEiC8E3sDlk1mogDJV9W8cxz9n+rBT54jkLk7+W0o0CWNicucFc0i HejfpAWeY7snT0qgWXmYFJ1+Y1rdHLJIQ6xHpgXeuGClqyQQvemQa5oj1v5Vj3wcFVB0 zfOxiYhK7TPGEEk2cdPe09OS7mbdJoXuoCS/0DMkxmgdoiCwH6FImv7xjsv0JoxFg6eK 6dag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=BpOMQbTz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id mf23-20020a170906cb9700b006e88cc5c374si3503142ejb.179.2022.05.13.14.28.30; Fri, 13 May 2022 14:28:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=BpOMQbTz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383620AbiEMTSe (ORCPT + 99 others); Fri, 13 May 2022 15:18:34 -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-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: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org IIUC PVMW checks if the vma is possibly huge PMD mapped by transparent_hugepage_active() and "pvmw->nr_pages >= 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 >= 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 --- 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; 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_area_struct *vma, return false; } + haddr = 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 vm_area_struct *vma) } 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 >= HPAGE_PMD_NR)) { spinlock_t *ptl = pmd_lock(mm, pvmw->pmd); -- 2.26.3