From patchwork Fri May 13 19:17:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yang Shi X-Patchwork-Id: 12849271 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 7409FC433F5 for ; Fri, 13 May 2022 19:17:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E4D216B007D; Fri, 13 May 2022 15:17:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DD3B56B007E; Fri, 13 May 2022 15:17:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C4D666B0080; Fri, 13 May 2022 15:17:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id AFA7C6B007D for ; Fri, 13 May 2022 15:17:10 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 7962420A40 for ; Fri, 13 May 2022 19:17:10 +0000 (UTC) X-FDA: 79461677820.07.FDB0CC5 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) by imf21.hostedemail.com (Postfix) with ESMTP id 799911C00BF for ; Fri, 13 May 2022 19:17:01 +0000 (UTC) Received: by mail-pf1-f177.google.com with SMTP id c14so8500697pfn.2 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=PnueWcpLgJM1UQfhWsDGyS97oFtEbcw2Rzd/8tAuqII66Bm3G4RvebYc6WRekEPUP5 CpgjVcf10k0UEKjmI5VEF2zCm/Hh3lp/mrWh/nleIwwGDsa8JmJW/lgwJ/nwhvf0zWnn /WbOPdfRRk/f9oSKUuqux0JcCoQAsm/PY775O0adb1npE7MCljMRI+Uya/1v4sQQKwVq R8nX3D87YI8C64fkxCdC2z3odb59xxo3d1Hj8vuTB7Ind7t9AyfC3Yf/bJZNPMeTTvL7 lwXP7gcAM7UCL660SXz1fMcnZH4IQKH24znquv1K72TLWrsPu/Yyj0FJvVIsc30MIOR6 hkGQ== X-Gm-Message-State: AOAM533ygP9JShN9ZPwpjL6YqpNhB/1h7Vjt4cVoCmM0iS6cxgB6QKCE wUfAt3iwpKI4pjkp/XgtQhg= 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 X-Rspamd-Queue-Id: 799911C00BF X-Stat-Signature: p8xpefx8ps7mzbogc5x5hx3g6uy1yhit X-Rspam-User: Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=BpOMQbTz; spf=pass (imf21.hostedemail.com: domain of shy828301@gmail.com designates 209.85.210.177 as permitted sender) smtp.mailfrom=shy828301@gmail.com; dmarc=pass (policy=none) header.from=gmail.com X-Rspamd-Server: rspam09 X-HE-Tag: 1652469421-91373 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: 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 Signed-off-by: Yang Shi Signed-off-by: Andrew Morton 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; 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);