From patchwork Wed Jul 31 15:45:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068429 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EC2EE13A4 for ; Wed, 31 Jul 2019 15:46:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D882F22B39 for ; Wed, 31 Jul 2019 15:46:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CCD0B26246; Wed, 31 Jul 2019 15:46:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 647E422B39 for ; Wed, 31 Jul 2019 15:46:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 06EF58E000B; Wed, 31 Jul 2019 11:46:17 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id F14788E0003; Wed, 31 Jul 2019 11:46:16 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E03278E000B; Wed, 31 Jul 2019 11:46:16 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) by kanga.kvack.org (Postfix) with ESMTP id 95BDC8E0003 for ; Wed, 31 Jul 2019 11:46:16 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id b33so42647235edc.17 for ; Wed, 31 Jul 2019 08:46:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=BddmaCO7bOzK4AWOjB15c/2T2Rs12mf6BHbqywMmVkc=; b=mTVmOjNgIHQDQUmwGWHvLq1yHBKZDKBHikg4sMWGBs+MvHVdhsSSc2Og211KI5d1Y+ eilaqaJ/h9ZhkKjZMiaJGW7AI4TKkRkWAjcObWlWcSafDlB3BYYQ49me+eyVPhWk48Z6 63IqoW/qlCKZQ9G+mpJEBPoO2lqYhZLSiPs/sAiNyCO3HqGC40lJZpoFdNaEq3SZIiQZ FzC6LPQQvAlRTJt7staek+JO99GYJlIsMJDVCTzy/TgvHPAJrFllh+ug/v1f5Ziiyus1 o3vEFnJH+3FCj4xQVv5D1+HR9aVBzUkdZm0tEtS4rChyj3yupz5US2+h/O82N+cPjBck 3Vjg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAWpAnqgdgVtBFHq5UP8B2ZuYlxIPfqgKud1vDA2zUvrHsEWrxNp 2msfjhOTFORvHxJjv1rvpUNIyhtpgy+RpldAItgo9244JjV1EVy6KLDjyjoSIhSMnpXj69vHD1K 57/1g6rrHWCEZ3z/BBfYxQgHZeybsmTVqhZ9MUTLmt9ny2qkyk5hLOJUxE8rGZ5M6ag== X-Received: by 2002:a17:906:84f:: with SMTP id f15mr29399653ejd.22.1564587976189; Wed, 31 Jul 2019 08:46:16 -0700 (PDT) X-Google-Smtp-Source: APXvYqyIwdjM9Q49WMGwh04WMrnqgrmim418kJHrBhn/1d2+j7mTAIuXchUNQ07ggkt8RE17kAWL X-Received: by 2002:a17:906:84f:: with SMTP id f15mr29399595ejd.22.1564587975330; Wed, 31 Jul 2019 08:46:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564587975; cv=none; d=google.com; s=arc-20160816; b=T5EVVHNRGN13s3D/NPdsZEEsuJ2gP1l7yEfshU4e2/f4hodasYiMMtPgk2PUHS94Nw RwouaClH0UmPdVhrsEn25QKwoYj/ZkVaRCKv7nFeFa+OD933hxF23ZhmBNyXS8nq9A/V uD4L1wir1hVgadv0EwxtSITfj4zAWj+Dl8SiH0pe3bsNyj1MUOI4h9uGUP2BklR8+SoK mryy0HI+UBqXUOdD8mrlx0dSAc5azHcE+fmJwO84ct+TRLJaS0zlFtwAoNmhKywa7M3K kDfKx5bypRubjk5P331Sv7vMOhyejh1z2/LRFoxggzO/d/v8EhxcrPGjT6iaKTEX0k90 uXeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=BddmaCO7bOzK4AWOjB15c/2T2Rs12mf6BHbqywMmVkc=; b=Y/jDCTi6CyHKfNoCheVxRMrNuHOrHnYdYiIIxnEAiKvksdBzvJJOlmFvEeyeGMZkmX v6eXtkxfJ0VdCA7R+hkBcRBPqVMEYw85jhFD4N8jnyNHXdXpsneFofCo/OnRrohVwzJR 45jQvrAw7inth3dIfuLY3WcR1AKtwaxgZxYYQnaLBIsIHqR1+zdUcyVvG6oS3LxKrC2f +p1G96Z/Rjdw6WV3WiHoIWsvHs4GewEsepo623PzxJcq9/YzEZZo9grjfZnADi4aMkuW 9zSlaNxVj7TPJJd5OlTWm7HdcLAsvDb6L7bvHLxscmhrccNSnF3kdFfw6F2iWHP5k5G8 0pfA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id no6si19264300ejb.173.2019.07.31.08.46.15 for ; Wed, 31 Jul 2019 08:46:15 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7E38C1570; Wed, 31 Jul 2019 08:46:14 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id CE3F73F694; Wed, 31 Jul 2019 08:46:11 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton , Mark Rutland Subject: [PATCH v10 01/22] mm: Add generic p?d_leaf() macros Date: Wed, 31 Jul 2019 16:45:42 +0100 Message-Id: <20190731154603.41797-2-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP Exposing the pud/pgd levels of the page tables to walk_page_range() means we may come across the exotic large mappings that come with large areas of contiguous memory (such as the kernel's linear map). For architectures that don't provide all p?d_leaf() macros, provide generic do nothing default that are suitable where there cannot be leaf pages at that level. Futher patches will add implementations for individual architectures. The name p?d_leaf() is chosen to minimize the confusion with existing uses of "large" pages and "huge" pages which do not necessary mean that the entry is a leaf (for example it may be a set of contiguous entries that only take 1 TLB slot). For the purpose of walking the page tables we don't need to know how it will be represented in the TLB, but we do need to know for sure if it is a leaf of the tree. Signed-off-by: Steven Price Acked-by: Mark Rutland --- include/asm-generic/pgtable.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h index 75d9d68a6de7..d3d868ad21b2 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h @@ -1188,4 +1188,24 @@ static inline bool arch_has_pfn_modify_check(void) #define mm_pmd_folded(mm) __is_defined(__PAGETABLE_PMD_FOLDED) #endif +/* + * p?d_leaf() - true if this entry is a final mapping to a physical address. + * This differs from p?d_huge() by the fact that they are always available (if + * the architecture supports large pages at the appropriate level) even + * if CONFIG_HUGETLB_PAGE is not defined. + * Only meaningful when called on a valid entry. + */ +#ifndef pgd_leaf +#define pgd_leaf(x) 0 +#endif +#ifndef p4d_leaf +#define p4d_leaf(x) 0 +#endif +#ifndef pud_leaf +#define pud_leaf(x) 0 +#endif +#ifndef pmd_leaf +#define pmd_leaf(x) 0 +#endif + #endif /* _ASM_GENERIC_PGTABLE_H */ From patchwork Wed Jul 31 15:45:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068431 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 14B301399 for ; Wed, 31 Jul 2019 15:46:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0175B22B39 for ; Wed, 31 Jul 2019 15:46:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E9BD32623D; Wed, 31 Jul 2019 15:46:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7E49E22B39 for ; Wed, 31 Jul 2019 15:46:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF2E38E000C; Wed, 31 Jul 2019 11:46:19 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id CC97E8E0003; Wed, 31 Jul 2019 11:46:19 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BB8C48E000C; Wed, 31 Jul 2019 11:46:19 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id 702ED8E0003 for ; Wed, 31 Jul 2019 11:46:19 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id n3so42648233edr.8 for ; Wed, 31 Jul 2019 08:46:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=tw4JZILHpRw8yw2ivWns3JMulA885A2eTY+XMl6s8Qw=; b=UL6F4GEvIroQmKeM85vjotypHSGDwoH/nNn/ebPO3P9xH/k4hlZzHET/YamAK8Z+Md F6gNTca/lkU1/o6YAbNcA0WwPYsF1mNRC/00YrgHJyWXhx7SumBW36Zk7sjLyhuBNOTt zoYj3/csYpHyMMi5Gfl/r7s9Y9KmaHrSomIjjAnmWYnViT0wvaFgoISwyGVigW4kLFxQ Kwck9N3Ce/C4yTp9C9Fmlo2rIjbqyAKfurihfllNA/AdPQRHy+YZpOAVa4HERz1j+Tyj oyVGkB2AmrtB+k7ZJptEwcI4OrZxMw+GwHLoj4Y0L3LLzwN/tgr0flpO9cQ/qQ8eLd+U GHAA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAUB8yK3oqCYEcpWI7hN7sx189VzvW1+cGnLxhu5Lxs4RzQZCXX5 r66Y9U8UgKcfHtNDpvOOtgcYoQkeRB7x1kOtCz/wkjlYAkr2krbBThTodaIc/nRZu9rzy2dPMYE VLReuqpzk9/vA8AOxOqIAOwPQUNYWZ1kgM8r4vuCmXXgZQTaUqMPWIpH0EOEHyQiGKA== X-Received: by 2002:a05:6402:652:: with SMTP id u18mr107828099edx.85.1564587979062; Wed, 31 Jul 2019 08:46:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqxBetaK+Cj+QuxlfXhNCNjXbciRmw6tmTdX8bGUYWaGxWc3l6SfvOQ/KvWuuQwQRTltn1k9 X-Received: by 2002:a05:6402:652:: with SMTP id u18mr107828032edx.85.1564587978327; Wed, 31 Jul 2019 08:46:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564587978; cv=none; d=google.com; s=arc-20160816; b=AhycmE/PSxojOWmzhUN3UBeNs2kLL7dwPKZ2RzlLN6h64LxtqVQzv3bRMJQ1VBGDs9 c1oUH11EZdHJLHKXeOvUh8CMNnbhibkXYyqrbX4zmd5gq2PdtONXXVY3W/YyHcT3944x 4ugK9k3Becay9ycyjkUxbL6WVHLOMGKYpJs/NKMHmJWdFkxBD98pFDxSDdATknyVA6wK HRlA06mH2eq5wRqM+PU5LaPugetVWVZtVKP3eQj9azA6EoOyLG3mCri80XcTO7l/QCvg nf8921/F3E9NyGbAuG7FuN7FhWURLutRbDdb0noZ4y13wo3xFn4Ud+jLZN/hiuVMxpcg Paug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=tw4JZILHpRw8yw2ivWns3JMulA885A2eTY+XMl6s8Qw=; b=bdda7FKOvAUgj40SIHjyqfQ4HDBTpJFojipMzNtIfnAHpTJaYiU3gwo1nG+kDv5lXT 3j/in68WZPX4srSRlXocUY9Ss2nSYr74XdqVFDhip9tDKmAa/XMq8KmGiYjaAP+inKvM n8c/e5fQUiiEWVEwU/ZjroqgH5yCTrA8ZO4H88JCGwmehR0tnr6Rng/7NgjJJfD72jMM svtHbtppolPZtGIkJRbmqiJ4b+8YpXDX38NgtgBPLSg6RaAlbqKaY+XBP6KZiP4PV3Og hrjIbYf2J+ziBFx10t2uZqZ9x/frNT4Ckg/8Zv6+UwqJALOHuxLUkLhTTgF2Hv6Gxqr4 UvIg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id b10si19031589ejq.174.2019.07.31.08.46.18 for ; Wed, 31 Jul 2019 08:46:18 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8040E1576; Wed, 31 Jul 2019 08:46:17 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B52053F694; Wed, 31 Jul 2019 08:46:14 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton , Vineet Gupta , linux-snps-arc@lists.infradead.org Subject: [PATCH v10 02/22] arc: mm: Add p?d_leaf() definitions Date: Wed, 31 Jul 2019 16:45:43 +0100 Message-Id: <20190731154603.41797-3-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP walk_page_range() is going to be allowed to walk page tables other than those of user space. For this it needs to know when it has reached a 'leaf' entry in the page tables. This information will be provided by the p?d_leaf() functions/macros. For arc, we only have two levels, so only pmd_leaf() is needed. CC: Vineet Gupta CC: linux-snps-arc@lists.infradead.org Signed-off-by: Steven Price --- arch/arc/include/asm/pgtable.h | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h index 1d87c18a2976..8c425cf796db 100644 --- a/arch/arc/include/asm/pgtable.h +++ b/arch/arc/include/asm/pgtable.h @@ -274,6 +274,7 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep) #define pmd_none(x) (!pmd_val(x)) #define pmd_bad(x) ((pmd_val(x) & ~PAGE_MASK)) #define pmd_present(x) (pmd_val(x)) +#define pmd_leaf(x) (pmd_val(pmd) & _PAGE_HW_SZ) #define pmd_clear(xp) do { pmd_val(*(xp)) = 0; } while (0) #define pte_page(pte) pfn_to_page(pte_pfn(pte)) From patchwork Wed Jul 31 15:45:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068437 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4B9B51399 for ; Wed, 31 Jul 2019 15:46:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3633D26246 for ; Wed, 31 Jul 2019 15:46:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2A00B23201; Wed, 31 Jul 2019 15:46:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9388B237A5 for ; Wed, 31 Jul 2019 15:46:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C7DC98E000D; Wed, 31 Jul 2019 11:46:22 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id C54048E0003; Wed, 31 Jul 2019 11:46:22 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B46B68E000D; Wed, 31 Jul 2019 11:46:22 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id 6760A8E0003 for ; Wed, 31 Jul 2019 11:46:22 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id y3so42642885edm.21 for ; Wed, 31 Jul 2019 08:46:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=eKl9NY7OTKmyYuPsGrRoNPFWZw8MxP6jB3gNXjnh+E8=; b=o+mQOInfbVX0JxzvXUVuYEwqOw7ecBshjBNLAsGUyxB3R+l08Qwk6CM9YyfLtcjO5Z TuAwaA4w1t6ige9nxYgCRI9IacsRE6a9zDV7Kwy0DAB7OI6xQ5+f4At/UuC02XMeipMG bwUUegEL8xYUPQyi/pOKFQWMhTNLSVQydsD8UmPY55WMpObkaMLhg8ny23elYQl7RK2x IahsZRAOM4pcivQDbgSmyHwn15UDWqoq1aWWc+GUnvko1v6AunEG343+TKbV2zUebaNz EcTubul6yjhXsFcoKzOaLOPyv7iuQwrxLfL4ZwVNf4AGBD12kYznu32Qw63r1cV2VrqJ Gk1w== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAWeOkCg1pmx4r3bTbOYSGZb7WPFdDAfLU6KH+fRRd1t18uJnDuZ U/tgsEQrCzZnoKn/rZh1b+fpYXv+maNEmdp+IPCgb0oGdVQ5rxD3Gx5fsxftdL9ndl+/0SoUXAq uO1LnJvShGZ4HUMwJTeubRRdZ6cNOClqDg3YT4Q5irL6nYSmHMujwQGu/pvT2Ekvi6Q== X-Received: by 2002:a50:886a:: with SMTP id c39mr40694800edc.214.1564587982018; Wed, 31 Jul 2019 08:46:22 -0700 (PDT) X-Google-Smtp-Source: APXvYqwuHGqUDaic/05JahkVWTtRiAJzv2/cyA/0cQ4z45zwvQczSj0SqOh2XigZ8Uy8aQogrTuQ X-Received: by 2002:a50:886a:: with SMTP id c39mr40694715edc.214.1564587981213; Wed, 31 Jul 2019 08:46:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564587981; cv=none; d=google.com; s=arc-20160816; b=DOgbJPHaAzttkTuGoTZTABcdOmpVOCMwjpA7V2b6ZF0gUZVEjamxd5nU7zklXnUDFt YEj7CzDJt7c+j3h/CavAQcNaAtaXgJOyEeVmw5xPGCojj5ZtbfLMf5sJZA58HxZUT3+j JpOu4NDxU6OWvZQ0ffTSLyEFciyOE2GwSKwvZGeQD8Bo37zWPQZlIwUu1ensWM1JOCgp 91EzJOK+oO2gm5z0g9voIB8b1O0e8U1uaP1DuFcUsUgzYIBPNxMMXZXKXAeWF7Nirl5J iqRYUXKqVlYWURqDGMPhDt9P4PR2rjltRO1uE+nmHcJmtzH5LhmcAkzOpQfcGlM5RZBC 9ilA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=eKl9NY7OTKmyYuPsGrRoNPFWZw8MxP6jB3gNXjnh+E8=; b=IcNlOyLIYrZ7qkfhDATs0mPIKOw2i7ZY7RK3IDPsgwbHmXV8JWmVN2HHizr0FyZY2t Xi6wJhS/bkSzFDCIyBFxpZiYkHXhgfnIYPvJ+910uYqmT6O3upwUZKi5ohlYQkV0DSWM LWwqehuFkCklpp4/rwhsGLMU64pUGLgQ2snW6w/EuWA5TAoRBemel1DgN3j8RZ1J7jwJ 16y5F1up7JuOFF7nYs3KS6W1a9If5bQFXZO6JU3BeDw8GUcpmWlxb4LVWKYMTeLB1+Ue ZXss6X+bz7dikmnnwPNwh2QaWBwiNkbwrVFl9nb4YsD41XXjpVhPOIoPs6OGEKo4gC5R 8QYw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id fx2si18183992ejb.203.2019.07.31.08.46.20 for ; Wed, 31 Jul 2019 08:46:21 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 668A21596; Wed, 31 Jul 2019 08:46:20 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B66633F694; Wed, 31 Jul 2019 08:46:17 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton , Russell King Subject: [PATCH v10 03/22] arm: mm: Add p?d_leaf() definitions Date: Wed, 31 Jul 2019 16:45:44 +0100 Message-Id: <20190731154603.41797-4-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP walk_page_range() is going to be allowed to walk page tables other than those of user space. For this it needs to know when it has reached a 'leaf' entry in the page tables. This information is provided by the p?d_leaf() functions/macros. For arm pmd_large() already exists and does what we want. So simply provide the generic pmd_leaf() name. CC: Russell King CC: linux-arm-kernel@lists.infradead.org Signed-off-by: Steven Price --- arch/arm/include/asm/pgtable-2level.h | 1 + arch/arm/include/asm/pgtable-3level.h | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/arm/include/asm/pgtable-2level.h b/arch/arm/include/asm/pgtable-2level.h index 51beec41d48c..0d3ea35c97fe 100644 --- a/arch/arm/include/asm/pgtable-2level.h +++ b/arch/arm/include/asm/pgtable-2level.h @@ -189,6 +189,7 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr) } #define pmd_large(pmd) (pmd_val(pmd) & 2) +#define pmd_leaf(pmd) (pmd_val(pmd) & 2) #define pmd_bad(pmd) (pmd_val(pmd) & 2) #define pmd_present(pmd) (pmd_val(pmd)) diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h index 5b18295021a0..ad55ab068dbf 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h @@ -134,6 +134,7 @@ #define pmd_sect(pmd) ((pmd_val(pmd) & PMD_TYPE_MASK) == \ PMD_TYPE_SECT) #define pmd_large(pmd) pmd_sect(pmd) +#define pmd_leaf(pmd) pmd_sect(pmd) #define pud_clear(pudp) \ do { \ From patchwork Wed Jul 31 15:45:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068439 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 121001399 for ; Wed, 31 Jul 2019 15:46:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F2BD022B39 for ; Wed, 31 Jul 2019 15:46:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E701022F3E; Wed, 31 Jul 2019 15:46:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 76B8D23201 for ; Wed, 31 Jul 2019 15:46:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9E8E68E000E; Wed, 31 Jul 2019 11:46:25 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 94D1A8E0003; Wed, 31 Jul 2019 11:46:25 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7E76D8E000E; Wed, 31 Jul 2019 11:46:25 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by kanga.kvack.org (Postfix) with ESMTP id 32B878E0003 for ; Wed, 31 Jul 2019 11:46:25 -0400 (EDT) Received: by mail-ed1-f72.google.com with SMTP id y24so42732057edb.1 for ; Wed, 31 Jul 2019 08:46:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=7eguvhFG3vFIX+cjWUMgrCPyT9l1sSVqWaOQbfj+tXE=; b=LBYEy1TYZMGgJqE8CyhNCPDFr0849iaWFIbbtoaN6ECW12EWUdZ5JurSTGB7mKyW3f WebcBTPp/9zQnyvw6i2xXftCtGkq1XPyuIHoSS1pKlnNGoK8C9j0A0/9aAiXGzFkkB5r 0cSYxwbq0jBoXjBMDHJ9XYLAwQzRHT5c1QaaAyOKkUXJleqc29u2I26dJGtx27Ck5Uki T7OE8xgc36klnFVSEEwgRgcOU0k8BHK0g/aYytUCDOVQxR/r238BRoQm8LJ/tOkBDoqW JZCPzQXw6GJxzbk6om5VpT4uJtF9rNLRxpNgCwcdeVkvunQjFchRkjzdMVd4eFMowwXb 5QXw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAUSHCVs1tyhA0g5eIHJ3cd93FnKnJV9YcOk1kopP254K/JbjpCS Vd2jECwG2gKkXvJ6E+sU7jkBbqRgaSbQU//U7ek0qr+yToJR6ebKeKr8hn1cQuEYY69CJjNZ5ZH fgrFm7IYN6dbW3LE37OxPZMNE1LjYDHJheIyra+hc/0nDA/HAnmQRkbZsazqurBY5OA== X-Received: by 2002:a50:c28a:: with SMTP id o10mr105550736edf.182.1564587984789; Wed, 31 Jul 2019 08:46:24 -0700 (PDT) X-Google-Smtp-Source: APXvYqywB8EIrN0KfRtbjsBQd91xffvHyts0rEOQ3OukdUvA60AjIG3Uk5DzcXGnSsceV+XeCuII X-Received: by 2002:a50:c28a:: with SMTP id o10mr105550662edf.182.1564587984017; Wed, 31 Jul 2019 08:46:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564587984; cv=none; d=google.com; s=arc-20160816; b=WVRQ1XdWfWRuF5LUGmfUOlffp2QFuSTWHZV3/2bZfpB8wtsiXsKC97OgD6dht8L8Mp /javN2HiaNt84XQ5tLoIe2WmVzmw8py3/fi0T8Ocw0vtTR9UnRATaa1YgP9qQKTVELyB flch7gTnGxukzw4KHSt7AZVaQlXFS6ZLex4WdAETwRQr1JyFEYo4AvBkgkacV6kjft4G 3CeLZDTMmjQuK/oXJVfRQjWkHeHMbBZ4p9OPklShMbY8N8aFVR0NiJjHZonfNuMHLuhV aI+qfkGqYKvzTIr+euTAwW9vSnmqnntitvpJN3GwhTRgdbVJFuMISeaQhhydhbvLk+7Q +JCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=7eguvhFG3vFIX+cjWUMgrCPyT9l1sSVqWaOQbfj+tXE=; b=PlVDBsUCnKsEJLbjHkUsGlAWJWarBiEHn5LgQl4ageOKOtlCXASfFuBCJlE//b+/Hb 27Fkdn7h8ohkWiMdW6s87WrHyCXipMDz0WHRelNbT63WrLHrf5QHSnjIcQOen2GRlfoo 1TbaDVmQ4RhitQPaqcXbWIClI8qa3Tn4pA4nBGz+aF3/9/shKCIYd9BpWV+Ae5lp64la S/MXJfS2iFfATboKOWh5TTc0RHSOR67WK/IoGcGs+PC4E05oSQtDbVjMQ/NpB2xh4Jt2 VX75aUwAsutMZqa9nw50stuKQOeAQA6sJXiJ/ltTTHsjvJRlix4QWrZGHhVH97skzMTr WJcg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id b38si21700149edb.341.2019.07.31.08.46.23 for ; Wed, 31 Jul 2019 08:46:24 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 342EC344; Wed, 31 Jul 2019 08:46:23 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9D62A3F694; Wed, 31 Jul 2019 08:46:20 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 04/22] arm64: mm: Add p?d_leaf() definitions Date: Wed, 31 Jul 2019 16:45:45 +0100 Message-Id: <20190731154603.41797-5-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP walk_page_range() is going to be allowed to walk page tables other than those of user space. For this it needs to know when it has reached a 'leaf' entry in the page tables. This information will be provided by the p?d_leaf() functions/macros. For arm64, we already have p?d_sect() macros which we can reuse for p?d_leaf(). pud_sect() is defined as a dummy function when CONFIG_PGTABLE_LEVELS < 3 or CONFIG_ARM64_64K_PAGES is defined. However when the kernel is configured this way then architecturally it isn't allowed to have a large page at this level, and any code using these page walking macros is implicitly relying on the page size/number of levels being the same as the kernel. So it is safe to reuse this for p?d_leaf() as it is an architectural restriction. CC: Catalin Marinas CC: Will Deacon Signed-off-by: Steven Price --- arch/arm64/include/asm/pgtable.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index 87a4b2ddc1a1..2c123d59dbff 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -446,6 +446,7 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, PMD_TYPE_TABLE) #define pmd_sect(pmd) ((pmd_val(pmd) & PMD_TYPE_MASK) == \ PMD_TYPE_SECT) +#define pmd_leaf(pmd) pmd_sect(pmd) #if defined(CONFIG_ARM64_64K_PAGES) || CONFIG_PGTABLE_LEVELS < 3 #define pud_sect(pud) (0) @@ -528,6 +529,7 @@ static inline void pte_unmap(pte_t *pte) { } #define pud_none(pud) (!pud_val(pud)) #define pud_bad(pud) (!(pud_val(pud) & PUD_TABLE_BIT)) #define pud_present(pud) pte_present(pud_pte(pud)) +#define pud_leaf(pud) pud_sect(pud) #define pud_valid(pud) pte_valid(pud_pte(pud)) static inline void set_pud(pud_t *pudp, pud_t pud) From patchwork Wed Jul 31 15:45:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068441 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8AFBE14DB for ; Wed, 31 Jul 2019 15:46:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 744BB228C9 for ; Wed, 31 Jul 2019 15:46:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 66CA3237A5; Wed, 31 Jul 2019 15:46:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9425C23E64 for ; Wed, 31 Jul 2019 15:46:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D67798E0012; Wed, 31 Jul 2019 11:46:28 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id D3E3F8E0003; Wed, 31 Jul 2019 11:46:28 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C5E098E0012; Wed, 31 Jul 2019 11:46:28 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id 72BF48E0003 for ; Wed, 31 Jul 2019 11:46:28 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id f19so42681301edv.16 for ; Wed, 31 Jul 2019 08:46:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=ELwmRF22LLX0tCygT2lvRbCbwdd+dUVbxYOXSRLI/y4=; b=QZnyZo9UFbXgsZUuYJu96Ctv6r+i94QcsAr3Z/SpXd0H/R8mRgLJbxWFyziOt+8Gux ucSA3AiKKWrK83B8Z1m/UjGpIEUeOXeGlLkW51tKgwAXZZSbzuXw8T6EcO2VO827zVkV aMQ+COUKmzCiQP+nURttY4IIYVGjno2wipYuB36orQaNE7Dn3Tod8QJbj0j2P64FeRbo svPUyAKq781GKvG6XAEOgrmE+UhXGZRoG1N0OI1Lhg5pxH5um3WZ5K7NIK19Ifj4L5p7 5IxPEDpbElYUUeGTIcA1FzAr5/zogAzh8SjSRawT9ctz1tb3lrMEie1Bteqm9TLpCZ8j YqRA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAUGOoATd0oC/q6/OcqU849ixxzA+3xCSslllfdMQr4WH4RQEXYs 2l8vUY0kGAczC8Q18zvn8AAi5J5jhN+/ljdEjGCzFOnZ7QzygeaFXBrljUxbrn5HnpS6g9neSLn nkCNwc6VpWKG1ULK/mtFv6ftIF7UaKVfJqe1qG6ZLjuQdr/idEl08fiFKNXfkxzEqsg== X-Received: by 2002:a17:906:8053:: with SMTP id x19mr94874367ejw.306.1564587988039; Wed, 31 Jul 2019 08:46:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqxztl0K40e034+kZnO+87+ks4qsR5prlDwtwjS4jS410y421hBotEVMofbcA8ivyE4RrlNL X-Received: by 2002:a17:906:8053:: with SMTP id x19mr94874315ejw.306.1564587987267; Wed, 31 Jul 2019 08:46:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564587987; cv=none; d=google.com; s=arc-20160816; b=wVMlyz4ukYOxp+mHZRFwWorFDkznTqnqNBIgDE9sHRurM/NWv1o1mMfk47s946Ia+q 238bMYorI7MIsLluMDxzeEWzon2+49ud9waI019TfxQBN/Lc+qWyciPWzybtDH7cbBIB j5/eE/MkI+AXmbUGg4Kk7SBmiJ+v0ofIbZBU2QI++AcTpIsx/DE75H1WJEWP6IHQ+Y/a znNT1RWEpZQ4S4zZs+tE/cejJLCZr9j5Q1gofu2R3IMiG/xtHii7re4fmjhE+oF7Pniu lVYWaAHdM/pLTwNL3Ho2Y+0uzQHI3AYkDFr7QKsWPNV3/aB5g5RwYMFbV65srvjCP4JG 8BDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=ELwmRF22LLX0tCygT2lvRbCbwdd+dUVbxYOXSRLI/y4=; b=K5PMObdGKC38OuqoLIdNAJgKaaXNEdI+6HMcbZZ0hSkbDaNrQBVdJFaewyVrsJivT1 d9ct5eRJ+2m3HTtutsnP4PreGb5rp2s4ogPGTsJi6v4a+N0IoJRnmlFScu+TD+7MlP9i ePtFMn208MJKSMfuNMtgO6ankJmXxiurkWeLhGPZRsQDhiFVIE1QPILv1E47viu47M5i kG1+Obd9mNayCuDqVMHOt37Avi2vT8kmvcrLBI+3+XJHQwuTykLx51hRqDDrX+H7vQ9B 2OgEvPDpMwLv1waQpKsthgiPX8clgEnxD2ger8VhDE7Brn4MHv6c0V7eLH6QW3/dAhEy d6UA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id l50si21106871edc.212.2019.07.31.08.46.27 for ; Wed, 31 Jul 2019 08:46:27 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6D1621570; Wed, 31 Jul 2019 08:46:26 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6B6463F694; Wed, 31 Jul 2019 08:46:23 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton , Ralf Baechle , Paul Burton , James Hogan , linux-mips@vger.kernel.org Subject: [PATCH v10 05/22] mips: mm: Add p?d_leaf() definitions Date: Wed, 31 Jul 2019 16:45:46 +0100 Message-Id: <20190731154603.41797-6-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP walk_page_range() is going to be allowed to walk page tables other than those of user space. For this it needs to know when it has reached a 'leaf' entry in the page tables. This information is provided by the p?d_leaf() functions/macros. If _PAGE_HUGE is defined we can simply look for it. When not defined we can be confident that there are no leaf pages in existence and fall back on the generic implementation (added in a later patch) which returns 0. CC: Ralf Baechle CC: Paul Burton CC: James Hogan CC: linux-mips@vger.kernel.org Signed-off-by: Steven Price Acked-by: Paul Burton --- arch/mips/include/asm/pgtable.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h index 7d27194e3b45..238ca243ad31 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h @@ -627,6 +627,11 @@ static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm, #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ +#ifdef _PAGE_HUGE +#define pmd_leaf(pmd) ((pmd_val(pmd) & _PAGE_HUGE) != 0) +#define pud_leaf(pud) ((pud_val(pud) & _PAGE_HUGE) != 0) +#endif + #define gup_fast_permitted(start, end) (!cpu_has_dc_aliases) #include From patchwork Wed Jul 31 15:45:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068443 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CAB161399 for ; Wed, 31 Jul 2019 15:46:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B602C22362 for ; Wed, 31 Jul 2019 15:46:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A7D1822B39; Wed, 31 Jul 2019 15:46:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E467F22362 for ; Wed, 31 Jul 2019 15:46:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 32EB48E0013; Wed, 31 Jul 2019 11:46:32 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 3087E8E0003; Wed, 31 Jul 2019 11:46:32 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1CE768E0013; Wed, 31 Jul 2019 11:46:32 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id C205D8E0003 for ; Wed, 31 Jul 2019 11:46:31 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id l26so42690155eda.2 for ; Wed, 31 Jul 2019 08:46:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=EC/gTJC/ZTlBnG7KHf3GkHZ2M0gvGSck7pciHwmxI7s=; b=RsahkDywWtPjTzVWDRDNsfGReN/gmMzfz2yMCihjDnePmuF9CRFA1C/Ey2hu74JIaa 0w9G0HSoL/GuPCpmFNuRdxmA6Rt+/Kzeg5iMz4+vTF9a5q2xLqX2VC7H96I4WPaVhpWY AOWSAOyBrVj2AD0FMH7a+6N2+d+0xIA4ENFa16bB3IotDGsjy6ALz0mHC7Tyk7G/JmVV /FLykw5DrgZIVjzkcxYV3VhhPtDZauVq7Kd/2grUybVAHSwb33dIGfChC1RLwG7Jx5De 3OT2Ggunf4cJ0QMaooaNPx+mGli/BMPKFRHT9IxilsQhbD2laq/YxP0nSBV2yQ9pFPeH 0a/A== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAUxhEbcV9rrLkKuVrlKxEMc5NcmDEl5jPY3uE22sXoFWNGWLqyx ZvdYgIqeQM637IGPREMaMA4Z+N89iJBeEsHrFm1jycnCwcHWoi8WmXWTb+LcgHg5SKsdsxmgY7E c+a3J486PW4QzHnN4R+mlNcN3fgP8v+zKtnYdRhPDPecmnJrCCHWfQOXxDufW6fjGcA== X-Received: by 2002:a50:a3ec:: with SMTP id t41mr107564937edb.43.1564587991367; Wed, 31 Jul 2019 08:46:31 -0700 (PDT) X-Google-Smtp-Source: APXvYqz7SYVySIOkDowuPNrUi/D2RgyypJwRi1JZjtvx/3ItjDD9GmKEp4qIwz6LGbX/H2mZRRaY X-Received: by 2002:a50:a3ec:: with SMTP id t41mr107564876edb.43.1564587990638; Wed, 31 Jul 2019 08:46:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564587990; cv=none; d=google.com; s=arc-20160816; b=RcWHLrwfpM6ICEvHospPtFPN+uhwEAtohyi+hodUrT04l1l9ce9NxkwaRCyM+gjT5i 46pHue5QW/5nVcn3n4qVWkgnNKB6pEMcobxryiCVGa1olwZxIaa9v0X6gQJpxOiLsoqx muGb1KsSgJucamUo8n1/SUnFMqYin4buz188nsKbZ4w9B5woASqGMNhf9n71TrChqIUm 6JegOBztpMaz/8Fn+gsPiYsoleuYUFibx/nFPWY21m3oWcxrPOWT5iFondB9Hdsx7KfJ 68MymJ78FRBLcnIHMC7C0W2lZ9Mtgu0hSc77XWWqfXOMXdKfVoQNTclJxP5nlMHWCloD BTqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=EC/gTJC/ZTlBnG7KHf3GkHZ2M0gvGSck7pciHwmxI7s=; b=Bbg6YH7h9+cfDvBUYfMbhWkWS47b0ByOubOfDky3FIc39seS7M0IqFau+yfVZPdlhD 4VgBzRlbk5fDgWynPCJdZW0POvIXDhWsFy8GtwgiMNgbRmLeuDN3W+SiiNmjQG6x/6va sxsChbp/FZ2yb61JPJ2UhG1F+S3BP3ZfY2IA1Wn9qym+sASIpUE3d2ELIv5F0dDF5ajv opqrDxHJdn2MUgejn0Al7pHiptaoTAzj/5caynrLCt3cPU4xVWAeznBEmTeFWtwagd0y 76qeMEWdgwNXalSmg4u2GyBOAIkpjIydPmAU+4Uk4dzxtu/8/6kTUlfsbR/wPHB01wrl QVAA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id j17si20098029edh.221.2019.07.31.08.46.30 for ; Wed, 31 Jul 2019 08:46:30 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C06831576; Wed, 31 Jul 2019 08:46:29 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A45C73F694; Wed, 31 Jul 2019 08:46:26 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , linuxppc-dev@lists.ozlabs.org, kvm-ppc@vger.kernel.org Subject: [PATCH v10 06/22] powerpc: mm: Add p?d_leaf() definitions Date: Wed, 31 Jul 2019 16:45:47 +0100 Message-Id: <20190731154603.41797-7-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP walk_page_range() is going to be allowed to walk page tables other than those of user space. For this it needs to know when it has reached a 'leaf' entry in the page tables. This information is provided by the p?d_leaf() functions/macros. For powerpc pmd_large() already exists and does what we want, so hoist it out of the CONFIG_TRANSPARENT_HUGEPAGE condition and implement the other levels. Macros are used to provide the generic p?d_leaf() names. CC: Benjamin Herrenschmidt CC: Paul Mackerras CC: Michael Ellerman CC: linuxppc-dev@lists.ozlabs.org CC: kvm-ppc@vger.kernel.org Signed-off-by: Steven Price --- arch/powerpc/include/asm/book3s/64/pgtable.h | 30 ++++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h index 8308f32e9782..84270666355c 100644 --- a/arch/powerpc/include/asm/book3s/64/pgtable.h +++ b/arch/powerpc/include/asm/book3s/64/pgtable.h @@ -921,6 +921,12 @@ static inline int pud_present(pud_t pud) return !!(pud_raw(pud) & cpu_to_be64(_PAGE_PRESENT)); } +#define pud_leaf pud_large +static inline int pud_large(pud_t pud) +{ + return !!(pud_raw(pud) & cpu_to_be64(_PAGE_PTE)); +} + extern struct page *pud_page(pud_t pud); extern struct page *pmd_page(pmd_t pmd); static inline pte_t pud_pte(pud_t pud) @@ -964,6 +970,12 @@ static inline int pgd_present(pgd_t pgd) return !!(pgd_raw(pgd) & cpu_to_be64(_PAGE_PRESENT)); } +#define pgd_leaf pgd_large +static inline int pgd_large(pgd_t pgd) +{ + return !!(pgd_raw(pgd) & cpu_to_be64(_PAGE_PTE)); +} + static inline pte_t pgd_pte(pgd_t pgd) { return __pte_raw(pgd_raw(pgd)); @@ -1131,6 +1143,15 @@ static inline bool pmd_access_permitted(pmd_t pmd, bool write) return pte_access_permitted(pmd_pte(pmd), write); } +#define pmd_leaf pmd_large +/* + * returns true for pmd migration entries, THP, devmap, hugetlb + */ +static inline int pmd_large(pmd_t pmd) +{ + return !!(pmd_raw(pmd) & cpu_to_be64(_PAGE_PTE)); +} + #ifdef CONFIG_TRANSPARENT_HUGEPAGE extern pmd_t pfn_pmd(unsigned long pfn, pgprot_t pgprot); extern pmd_t mk_pmd(struct page *page, pgprot_t pgprot); @@ -1157,15 +1178,6 @@ pmd_hugepage_update(struct mm_struct *mm, unsigned long addr, pmd_t *pmdp, return hash__pmd_hugepage_update(mm, addr, pmdp, clr, set); } -/* - * returns true for pmd migration entries, THP, devmap, hugetlb - * But compile time dependent on THP config - */ -static inline int pmd_large(pmd_t pmd) -{ - return !!(pmd_raw(pmd) & cpu_to_be64(_PAGE_PTE)); -} - static inline pmd_t pmd_mknotpresent(pmd_t pmd) { return __pmd(pmd_val(pmd) & ~_PAGE_PRESENT); From patchwork Wed Jul 31 15:45:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068445 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A735214DB for ; Wed, 31 Jul 2019 15:46:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 940ED22A6F for ; Wed, 31 Jul 2019 15:46:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 88054237A5; Wed, 31 Jul 2019 15:46:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E4A3212BE for ; Wed, 31 Jul 2019 15:46:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 441CC8E0015; Wed, 31 Jul 2019 11:46:35 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 41A8B8E0003; Wed, 31 Jul 2019 11:46:35 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 32D338E0015; Wed, 31 Jul 2019 11:46:35 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by kanga.kvack.org (Postfix) with ESMTP id DCE0A8E0003 for ; Wed, 31 Jul 2019 11:46:34 -0400 (EDT) Received: by mail-ed1-f72.google.com with SMTP id n3so42648625edr.8 for ; Wed, 31 Jul 2019 08:46:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=gEVtoQCi6h+GyKxSDd1Xkj6e1d5Rk0HO8h+TUtam2wg=; b=TRP0eYwFBOc5jHFpfZp9IhxlpUxM7ocNmgpnnUVyPlRGlr2gMsSJXhPboiJL3uZl+5 MV1+drrgWAaxH8lK0bjVrqERdgQNWw/aWeXJYrOpBMIusqAHVwYWe3I7u7gGAT9UNG7a MnqdKoKjYNttnQozpwd2ZT/FOa1ElfXvnFxV2ZJvh0qVB/aIl37oFIlQ7OumhAINNwTT 7R+QmZ5xcuv79ms52hPI1jwPD6fE8UAK1nup+10ozBn67OkbwjFk8A1SAiMY+cXxjrXJ jKPQynyg/PMJH0Yln7kzYn2+ZVvberlqaUHCpR5vIJt4He8NgDQXePabYOBE7IMeSKU2 fQGA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAUNZXjOsl5FDCBSCKrIlVgRAm+87MDBr5h0UXJXtgTLEUBdUwkz 3lUKCZDX1eOmWKWuDosJXg3z86eT9iqAJSZ+4BX8PrQV3togsyghAt4edZ/Ykhd/9cBOX0cwW84 GDYTr9CWcAyzdf0BfXG8rQHVF1wf10nU/NPLFj3TJgJ4Txtpn2z/IkAMeFyhnStyz1w== X-Received: by 2002:a17:906:6c97:: with SMTP id s23mr96202779ejr.136.1564587994462; Wed, 31 Jul 2019 08:46:34 -0700 (PDT) X-Google-Smtp-Source: APXvYqy+0c4NfmIp3BLTt66fXe+FCNhLvk0fhtkyuaSnVX2FurKtGwSGuPnNChJ1k7zGzX9B2OBl X-Received: by 2002:a17:906:6c97:: with SMTP id s23mr96202726ejr.136.1564587993730; Wed, 31 Jul 2019 08:46:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564587993; cv=none; d=google.com; s=arc-20160816; b=fwhPMF5uzi/og2SISdqmb9MsdXNwKSvdj/T5u/XNNfqqsyba+yyfWuMr4ibamzylWa foZSRYw8p3xn1+RTPbUv3+9nxqNUXXIrOyoxinoKALoqJgj1IyYFwzexY9/aWk9RR/2B //Vq2vgxObK0LZiiHNXnSjW1h1jWhcmOC+IBf45rZTeypUv89JT1Wa1pkaJCylILHv1K V/jy91w+fO7IUTLA5wvWUKUXhoEB1k6OZFSOinUAMEFR4wZ74ANRhSVw3vlPy1zAzGk5 ennF6YL0bpE5R90sV/1ADI3gK8bJvoEESNx4oqxsfXOVxMmDcq7nH1VlsRydPMGhMHBM 4pqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=gEVtoQCi6h+GyKxSDd1Xkj6e1d5Rk0HO8h+TUtam2wg=; b=XAC+3MarjZHmT5wJRqUGDs13Oq3Vuuj1un1zAYOnm+f3/rEOBEycApnruPXNhQeSB8 GY6r6hxMN/TfmdB0pYwwwYKG7nvFizw30Dw8XO866+d2TFDJ3gSPZ4s9TBolqGBoLaoP l5Cx1h/jwRGyEKXzOmTj0yVjCdxMLSZjw8/fys4kLimb93ggrWVlcDvUrfVa/CUfOzBE 0yM/Yp7zP4rQEXOXX3p7pHLhPMEqyyQguf5jgRFDtW4R9vu2MGTBRaEBnIs1jZBqhsi8 dy8qxKD/9b3lKNaPduvqqm/f9R7d46CLHl4jgnB64xqqLh8fkB7FH5NWmAA4fCYxB1Q1 1BDA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id y13si19074706eje.259.2019.07.31.08.46.33 for ; Wed, 31 Jul 2019 08:46:33 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DEEA41596; Wed, 31 Jul 2019 08:46:32 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 034703F694; Wed, 31 Jul 2019 08:46:29 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton , Palmer Dabbelt , Albert Ou , linux-riscv@lists.infradead.org Subject: [PATCH v10 07/22] riscv: mm: Add p?d_leaf() definitions Date: Wed, 31 Jul 2019 16:45:48 +0100 Message-Id: <20190731154603.41797-8-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP walk_page_range() is going to be allowed to walk page tables other than those of user space. For this it needs to know when it has reached a 'leaf' entry in the page tables. This information is provided by the p?d_leaf() functions/macros. For riscv a page is a leaf page when it has a read, write or execute bit set on it. CC: Palmer Dabbelt CC: Albert Ou CC: linux-riscv@lists.infradead.org Signed-off-by: Steven Price --- arch/riscv/include/asm/pgtable-64.h | 7 +++++++ arch/riscv/include/asm/pgtable.h | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/arch/riscv/include/asm/pgtable-64.h b/arch/riscv/include/asm/pgtable-64.h index 74630989006d..e88a8e8acbdf 100644 --- a/arch/riscv/include/asm/pgtable-64.h +++ b/arch/riscv/include/asm/pgtable-64.h @@ -43,6 +43,13 @@ static inline int pud_bad(pud_t pud) return !pud_present(pud); } +#define pud_leaf pud_leaf +static inline int pud_leaf(pud_t pud) +{ + return pud_present(pud) + && (pud_val(pud) & (_PAGE_READ | _PAGE_WRITE | _PAGE_EXEC)); +} + static inline void set_pud(pud_t *pudp, pud_t pud) { *pudp = pud; diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h index a364aba23d55..f6523155111a 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -105,6 +105,13 @@ static inline int pmd_bad(pmd_t pmd) return !pmd_present(pmd); } +#define pmd_leaf pmd_leaf +static inline int pmd_leaf(pmd_t pmd) +{ + return pmd_present(pmd) + && (pmd_val(pmd) & (_PAGE_READ | _PAGE_WRITE | _PAGE_EXEC)); +} + static inline void set_pmd(pmd_t *pmdp, pmd_t pmd) { *pmdp = pmd; From patchwork Wed Jul 31 15:45:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068449 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9F08F14DB for ; Wed, 31 Jul 2019 15:46:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8C5F6212BE for ; Wed, 31 Jul 2019 15:46:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8073123E64; Wed, 31 Jul 2019 15:46:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1A278212BE for ; Wed, 31 Jul 2019 15:46:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7C62A8E0016; Wed, 31 Jul 2019 11:46:38 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 74BF68E0003; Wed, 31 Jul 2019 11:46:38 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 639FA8E0016; Wed, 31 Jul 2019 11:46:38 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id 182FB8E0003 for ; Wed, 31 Jul 2019 11:46:38 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id c31so42717847ede.5 for ; Wed, 31 Jul 2019 08:46:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=SeXVsMnk2ItLAq9xssoCnMjuOjZOxOqXJMYOSk/jj2w=; b=IdGeCEAqoAzNrLLLwYMFal1YUbYCxL8tcNpA4bn73NjByTOTaqpX1vfmJJO5YZAkHX Y2ogAmkHuUsHyinDyCPkGYIazixvdJZRXIEWp79oZf0/M6HMe5mme63w+FeAGQhpYySm wsr+u6+7iIgJ7ac2d+Ms6XDPaQ+YXDSf2FP5+zFIAKU+qvaPVqSmNfD7lrKUGfPwr72n P/CRGzDnRzD4ztYXgvhHjWkR372y6kgEbZPBnTT3dpyv4Myde81tE3rBlE8B229PnZtG RqJ7x/L5a4Dhj0Y3C5aW/Udlxw0ADeKkZCbYtN/TiUJceUBTQCT048cNvEpwNGAd7qMR Xpbw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAXKtZLhT4tQ1pYC5ok16RjaC+SQ3HZvrS4BP/x3lrSMlbKAcYKS 5zGASdLxHhWGi/ZEiz7yBAIo60WRL6eyau1adFzwBt1O77iVEY2uRwX8QWs0u0qVY9KTEycw9bV lapQUgoxEv0izujPXavNfezr2mzbphRw5n3dwBE3IQFg4cULLn6FRzdA0lHkvhMAcfg== X-Received: by 2002:a17:906:698e:: with SMTP id i14mr78330219ejr.122.1564587997657; Wed, 31 Jul 2019 08:46:37 -0700 (PDT) X-Google-Smtp-Source: APXvYqyXpZVBxiJHj5TWjOC8qBXtqm1Qcz7Ne41ua4kaWQu0vLIA0yEIOOTIduEy6u0mkVxURE0M X-Received: by 2002:a17:906:698e:: with SMTP id i14mr78330165ejr.122.1564587996875; Wed, 31 Jul 2019 08:46:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564587996; cv=none; d=google.com; s=arc-20160816; b=M5nShT9Hprkencb8agB1TiHq9XtLN4hzO24VAe7vFi+25ZQYlwHOwCt0Al6eTtU+pe Sjb2XVIIVixSUB2uN0Zl6QKl/sMPBAo6QyvXKqojRaVSEfZo/WRnKiXNLW8JtWDVdUxD Wd+eKLGe7g9C/lKghl2gBN5/VUWuUp36LVcwfLgzJcH2bWxT2DokkBUhJiEX2SHg8Wz7 5HnXM7wVYjewOMJuxdj8RZV6GEjAHC2Z+W3wOz1TRUlZ1I3E8j529Hkfts4gGF8kNqEL tW1XyAZhwBcX7JB1N6l4CTLgrPeRVV86ddW08D86EU7/wVK+VhxaEyOFCK6f7k3tfvLu yWOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=SeXVsMnk2ItLAq9xssoCnMjuOjZOxOqXJMYOSk/jj2w=; b=y/dkR07Lpwz+FQSbTIkU5qpEddrNdVwrdpUaESmAiEes9W9qbKJc4sr2qej5QTQf6o 8r8iFLTSrnWMPu3iSurJr7GOalnNETLh9j6CA9IUokj/uoLmM121blfcPRCwMccMD2C4 iNTis6C2PVZhzdQoAre9gDZolVe3RuD73MeQHRK0Ifm/rHdz7DiRtqZMBbECGwcV4OLw B55ZXLQgsUZT5T/ZTao/elXiLEMTA1reWZXOgy409HlzJTEecvHUrFZ8qstgZaZFcb31 OIr3D+IhD0lsPR2sAoCQIiGTBnn5rL2l/TkkIGqPwJzl/biCPmIJpZPypiAsoqMugmGT wtzQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id c28si22591513edb.158.2019.07.31.08.46.36 for ; Wed, 31 Jul 2019 08:46:36 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 230CC1570; Wed, 31 Jul 2019 08:46:36 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 21C233F694; Wed, 31 Jul 2019 08:46:33 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , linux-s390@vger.kernel.org Subject: [PATCH v10 08/22] s390: mm: Add p?d_leaf() definitions Date: Wed, 31 Jul 2019 16:45:49 +0100 Message-Id: <20190731154603.41797-9-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP walk_page_range() is going to be allowed to walk page tables other than those of user space. For this it needs to know when it has reached a 'leaf' entry in the page tables. This information is provided by the p?d_leaf() functions/macros. For s390, pud_large() and pmd_large() are already implemented as static inline functions. Add a macro to provide the p?d_leaf names for the generic code to use. CC: Heiko Carstens CC: Vasily Gorbik CC: Christian Borntraeger CC: linux-s390@vger.kernel.org Signed-off-by: Steven Price --- arch/s390/include/asm/pgtable.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index 9b274fcaacb6..f99a5f546e5e 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h @@ -674,6 +674,7 @@ static inline int pud_none(pud_t pud) return pud_val(pud) == _REGION3_ENTRY_EMPTY; } +#define pud_leaf pud_large static inline int pud_large(pud_t pud) { if ((pud_val(pud) & _REGION_ENTRY_TYPE_MASK) != _REGION_ENTRY_TYPE_R3) @@ -691,6 +692,7 @@ static inline unsigned long pud_pfn(pud_t pud) return (pud_val(pud) & origin_mask) >> PAGE_SHIFT; } +#define pmd_leaf pmd_large static inline int pmd_large(pmd_t pmd) { return (pmd_val(pmd) & _SEGMENT_ENTRY_LARGE) != 0; From patchwork Wed Jul 31 15:45:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068451 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2722714DB for ; Wed, 31 Jul 2019 15:46:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 13767228C9 for ; Wed, 31 Jul 2019 15:46:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 078C926246; Wed, 31 Jul 2019 15:46:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7307622F3E for ; Wed, 31 Jul 2019 15:46:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 810358E0019; Wed, 31 Jul 2019 11:46:41 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 7EA3B8E0003; Wed, 31 Jul 2019 11:46:41 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6D7F38E0019; Wed, 31 Jul 2019 11:46:41 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id 2146A8E0003 for ; Wed, 31 Jul 2019 11:46:41 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id l26so42690436eda.2 for ; Wed, 31 Jul 2019 08:46:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=9yNPMoYJcGoxoxeHWzB9fU8wwaC0bR8nBAs+Hiw9CLE=; b=jQU3/zT7RbPE2sKg/Hk5R/ZwK6tcGDADomUOlL0+ytMrkuIA8zO0rubNMPrR/uB1UA sE9XK4nTVaEEXJQMjOSnW/szS4geMVB7EgH80x73VW7UHA6uhazPNyYHXviA0EiqOO8s Cos9iedCiWtjuUU2ECPC0L8RpcveeRqmRYlSbZJUuexShCn9LR5Fx6Pvh4UC7/mcMmkf 4S2Wy9zmk/CGhKz6wglSWTIJ24RFpLomxCHMBjLDqvNseKbfvmerJmi5P4W86wF592Nx ZBmUWS4hVlb1VvJLn/dFuhL+ohkbPBQg0S3i/bVmxal43A0ZY6vbRBDlt4fN5WZQlAnX PblQ== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAUVIW4Ck0YLF8fyz+0YrwEKUlluD9NDjaz29N0Sw8iruijqV8bJ pG15/WAZxWV5ZybHe+zQ9vUFSw+iko41ALASDEtVv88nx2SqbfWWeulgZg2MAoct5RSXjPzN9ef 78SoVIYtKAmA7T0heT/mc+7XgXmLuQ2rrr0wdAVNeKWY/V6PbAbFev/xI6pS/zjwGeQ== X-Received: by 2002:a17:906:2ecc:: with SMTP id s12mr43274727eji.110.1564588000720; Wed, 31 Jul 2019 08:46:40 -0700 (PDT) X-Google-Smtp-Source: APXvYqy1YGFCB+M/ZBi9US5g06ZBRz7ICqwoxVgL06JiR9hO2qM8wNToRgBceZdQgkJ/0FRCG2do X-Received: by 2002:a17:906:2ecc:: with SMTP id s12mr43274677eji.110.1564587999879; Wed, 31 Jul 2019 08:46:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564587999; cv=none; d=google.com; s=arc-20160816; b=PKbwIg6VpC1UHBYVdhSl5gcbY81NV7Cr7KFQgx9crkf9dGqmqx9vdKogtGh8vmGzMd t8zTjvdxTq5UQMRaPLEgunaSmWpry4xxzNizUasisyPHhvVCz8B3eLqzcS2SjEUlmR0g ZqDlX7It4ornsXjkar+7pklg9CDIperUGhkucKP+UZSKvqiCOn4aiVh/fjnfgNVlRiJ9 CGhKcLy+vvgi8t3yXjwtiqPbKRAtu6IiSedSy53s2z1YvzWu15vZ3901qtX/z2gszeZV 90bzgWb3Og3kqI/nn6evKnaT1oVye7nyjO8eTnAeqDrT6xyw0kBRXxIui87bKBaqeoqb a2mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=9yNPMoYJcGoxoxeHWzB9fU8wwaC0bR8nBAs+Hiw9CLE=; b=M0byZ7v4xI3vIMsPZIVCL+C/DypS51dSc5X4Zr4GbRmdvsx+832KyI/Xhl7/0+kuD2 Z3330CrrvoJZeFwDnAuZLrIK3sm98hXw8VUmTgfnfK7AulssL2BoceApz/5d/0xWTYyW WH6fZhwYZosrt6Es+cndsboS4CkMjkfppzDYH+EPfKTgZVvgv9mV8lMVZuBXdgCAvfOL YIQME8iAnysFsuhuvqHZ1mzgvND99ubl3l1IvuhWlknjMAL2dRdI2ciN5/R70zcA1p6x u/dTKkufGDwhVWuYqJ75F4mx2aOF+W/MvuvyXv7rHjQ9ou/rJ/t6Y66/HjDSmmnE+Jgn J5ow== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id y11si18696076ejp.213.2019.07.31.08.46.39 for ; Wed, 31 Jul 2019 08:46:39 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 267971576; Wed, 31 Jul 2019 08:46:39 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 59AAA3F694; Wed, 31 Jul 2019 08:46:36 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton , "David S. Miller" , sparclinux@vger.kernel.org Subject: [PATCH v10 09/22] sparc: mm: Add p?d_leaf() definitions Date: Wed, 31 Jul 2019 16:45:50 +0100 Message-Id: <20190731154603.41797-10-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP walk_page_range() is going to be allowed to walk page tables other than those of user space. For this it needs to know when it has reached a 'leaf' entry in the page tables. This information is provided by the p?d_leaf() functions/macros. For sparc 64 bit, pmd_large() and pud_large() are already provided, so add macros to provide the p?d_leaf names required by the generic code. CC: "David S. Miller" CC: sparclinux@vger.kernel.org Signed-off-by: Steven Price --- arch/sparc/include/asm/pgtable_64.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h index 1599de730532..a78b968ae3fa 100644 --- a/arch/sparc/include/asm/pgtable_64.h +++ b/arch/sparc/include/asm/pgtable_64.h @@ -683,6 +683,7 @@ static inline unsigned long pte_special(pte_t pte) return pte_val(pte) & _PAGE_SPECIAL; } +#define pmd_leaf pmd_large static inline unsigned long pmd_large(pmd_t pmd) { pte_t pte = __pte(pmd_val(pmd)); @@ -867,6 +868,7 @@ static inline unsigned long pud_page_vaddr(pud_t pud) /* only used by the stubbed out hugetlb gup code, should never be called */ #define pgd_page(pgd) NULL +#define pud_leaf pud_large static inline unsigned long pud_large(pud_t pud) { pte_t pte = __pte(pud_val(pud)); From patchwork Wed Jul 31 15:45:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068453 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 297CA1399 for ; Wed, 31 Jul 2019 15:46:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 15C17212BE for ; Wed, 31 Jul 2019 15:46:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0926C23E64; Wed, 31 Jul 2019 15:46:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8C2F9212BE for ; Wed, 31 Jul 2019 15:46:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6663A8E001B; Wed, 31 Jul 2019 11:46:44 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 5EE498E0003; Wed, 31 Jul 2019 11:46:44 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4DC178E001B; Wed, 31 Jul 2019 11:46:44 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) by kanga.kvack.org (Postfix) with ESMTP id F22D68E0003 for ; Wed, 31 Jul 2019 11:46:43 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id r21so42680971edc.6 for ; Wed, 31 Jul 2019 08:46:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=nxKy+dHCcQ52WwJbQmiHduBQhK1uZKwGIaDaQ5m0n9k=; b=akgPoPCA/jXAB/FaxMIJu7B/0XpFUdU3c+L+GUTHWR9HSz/7M6bogKwE5rvleK+px4 jKAu2IW3FtFwAQ6gokokEawC+rdaE/cSEwjyPelMD24kRynO+LGMfeSmqoRiAn12JAj3 XXA6pXZzb4OcCcfo+5uZXJV9zo9MSOPEwcQpjXAcozfoWo8THpKRvJWkodyLWolRANdm DdiXHtEgwKBUY0IpLmiUzDQoVpgjXb04COE55YV7wNjsS1M/QnFmuK3wACZ5tEe5QUvV 5f51kUDOidGbMf4l6WcN2vN8CRY/63q8hbWKnsqiETeZvdLfWSgeJtAUlGh/qm4BhqaU dABg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAX94QC/I+hfpC6PGS6ZC/TXQoURF1nH1ZvseRttl4Jflxdyv6lH n+5lVyVDR/6NcTvKexBtTUmsq+eCQl/UjJXmJW3axZ0fgSbleIU/rpdwOTPXcwF6J+tvRsYSYmf CvlmX7ru5r7gfDnDtHJxJxOJccUF6WWmGgQVNkEqmDkadlUt5+10TWIwAh26KutkHkA== X-Received: by 2002:a17:906:634f:: with SMTP id a15mr93722948ejm.184.1564588003551; Wed, 31 Jul 2019 08:46:43 -0700 (PDT) X-Google-Smtp-Source: APXvYqyIsRYRr5SepoWPBzWcbJHfyW8/N1jjZTY9w+4Emb8m/grHPaQ5c6NqE4UdsgzjsGFsfuBw X-Received: by 2002:a17:906:634f:: with SMTP id a15mr93722887ejm.184.1564588002713; Wed, 31 Jul 2019 08:46:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588002; cv=none; d=google.com; s=arc-20160816; b=KwsjkAHIG3VoLFolQE2HzG50LvQfM9DSV4z/pN8w9bXV3PXOMWgZ+NotktPKtgg+3R nER6w+Ztn1FaJmWalRSvvGoLadj2R9yg+rmA3NW9W5HLArgvgZih25t7Igs6CPrq8h1N Q0xCmM1kpRAgwI2Thp6Iqn4ntfckRDBrOaJ+jca6pxfo+ZCJNd30KoTiLLbaZB3Brv4G pDzsqq5/YAPrN/ercETWoVuMkuFIyxnp5Zfz9s7G88ocJRpovxGg5pi6NGGR+gkSg5ZK tPnjbMA5yWadlfYbGA+3iVc0ttC77TTMpVjAcaGd/jGGEdBmt6d7y5BfCm3RlJXNoYzR W9dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=nxKy+dHCcQ52WwJbQmiHduBQhK1uZKwGIaDaQ5m0n9k=; b=NWz5ouxTRfgT0MKuYdnJmsTrBo6n+ZRBNl5PQhC0SqSZf+nEXXDEg7uU3TdU2kukJj DlcEBBWqgWlRqb2zLokrE1uBxLoDstwAkbt03Gu44VtM8B44OO15uhsrUAyyf/QcRYs3 L6x2lgRxgx+0ydj+vrevFHraFbPH1aInY9Gn0DJs+l3juK4Ii+uFjD059a38Bp2Wl1Ow t4GJC8C6zLeSeIzDVg9GJdTruZURhnoqfpV7mNZuHkKgvfYoCEHj9INR0yvVZRj7Petd nB1r0T60m6GEsQedgBk76ejMtpmGILkrX3kHI+P2aVnQm/OCZsr0j4zGEzxeCLJhKAqG f5VQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id h53si21822459edh.114.2019.07.31.08.46.42 for ; Wed, 31 Jul 2019 08:46:42 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E5E021596; Wed, 31 Jul 2019 08:46:41 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 5CED33F694; Wed, 31 Jul 2019 08:46:39 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 10/22] x86: mm: Add p?d_leaf() definitions Date: Wed, 31 Jul 2019 16:45:51 +0100 Message-Id: <20190731154603.41797-11-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP walk_page_range() is going to be allowed to walk page tables other than those of user space. For this it needs to know when it has reached a 'leaf' entry in the page tables. This information is provided by the p?d_leaf() functions/macros. For x86 we already have p?d_large() functions, so simply add macros to provide the generic p?d_leaf() names for the generic code. Signed-off-by: Steven Price --- arch/x86/include/asm/pgtable.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 0bc530c4eb13..6986a451619e 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -239,6 +239,7 @@ static inline unsigned long pgd_pfn(pgd_t pgd) return (pgd_val(pgd) & PTE_PFN_MASK) >> PAGE_SHIFT; } +#define p4d_leaf p4d_large static inline int p4d_large(p4d_t p4d) { /* No 512 GiB pages yet */ @@ -247,6 +248,7 @@ static inline int p4d_large(p4d_t p4d) #define pte_page(pte) pfn_to_page(pte_pfn(pte)) +#define pmd_leaf pmd_large static inline int pmd_large(pmd_t pte) { return pmd_flags(pte) & _PAGE_PSE; @@ -874,6 +876,7 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address) return (pmd_t *)pud_page_vaddr(*pud) + pmd_index(address); } +#define pud_leaf pud_large static inline int pud_large(pud_t pud) { return (pud_val(pud) & (_PAGE_PSE | _PAGE_PRESENT)) == @@ -885,6 +888,7 @@ static inline int pud_bad(pud_t pud) return (pud_flags(pud) & ~(_KERNPG_TABLE | _PAGE_USER)) != 0; } #else +#define pud_leaf pud_large static inline int pud_large(pud_t pud) { return 0; @@ -1233,6 +1237,7 @@ static inline bool pgdp_maps_userspace(void *__ptr) return (((ptr & ~PAGE_MASK) / sizeof(pgd_t)) < PGD_KERNEL_START); } +#define pgd_leaf pgd_large static inline int pgd_large(pgd_t pgd) { return 0; } #ifdef CONFIG_PAGE_TABLE_ISOLATION From patchwork Wed Jul 31 15:45:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068455 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6167214DB for ; Wed, 31 Jul 2019 15:46:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4E23C22F3E for ; Wed, 31 Jul 2019 15:46:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 423E122B39; Wed, 31 Jul 2019 15:46:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9F3A722362 for ; Wed, 31 Jul 2019 15:46:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 775768E001C; Wed, 31 Jul 2019 11:46:47 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 726598E0003; Wed, 31 Jul 2019 11:46:47 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6146E8E001C; Wed, 31 Jul 2019 11:46:47 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by kanga.kvack.org (Postfix) with ESMTP id 115FA8E0003 for ; Wed, 31 Jul 2019 11:46:47 -0400 (EDT) Received: by mail-ed1-f71.google.com with SMTP id b12so42618688ede.23 for ; Wed, 31 Jul 2019 08:46:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=idcCraew5kDYKUJXALkAj+l9XAI2mPAFcI9lteeEtuk=; b=XnCvKmzgGXcvGDW5EON4jqNCBhizEGvsrKM/AwzQZsepoJTYiBgtZK/qQ2/Rw+Iuls F2ygIKV988GDGP75YNiMxg/VIbuD3d63M4ANScIsrag+eGMao07F0abLNhQXtSapq7A8 ZYX60ZBysWBHqVpT1YrNcOEc+awrdTElnsA3twga8OG2ZJJwgJWT+S9bW1bBMSpRm4Za XBXxAA4lwX0FiKB5XaXU1KdL5QzBCp0DHYryk5qYstCVbHtlSWRaEhPW0VjouBwLQd7r tAxrO92YSnW18M3h/q7AfKYJro3MhMToGKTTOIR04/XXAQao40rG4Qpaco+eyVP+Sp4E 9AcQ== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAVk3ffla+wSLRZKj4zINPB2YH9GGmdeglczOrw/nPMDaMl5elfw YJsR6VTBz7+DASSxMjU4IVNCIunwcn7ibZvKf//owESPk0JOXnq41k2O94LjgtDEtA/HFfQSGdI tmHgCCUJ43k7Y2B1YA9OkAbpjncjT/5cEeopE7jxYR46OPlDgXPjis4YeX5p8pGS40w== X-Received: by 2002:a17:906:3108:: with SMTP id 8mr15770595ejx.196.1564588006620; Wed, 31 Jul 2019 08:46:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqzoyVIOA8B/1Ta6IKdPwpmSy1pNyoHv0Vm8RGmJmIu+u4KXVSbfLzP4S6cNoxVOgWK9vk9f X-Received: by 2002:a17:906:3108:: with SMTP id 8mr15770527ejx.196.1564588005646; Wed, 31 Jul 2019 08:46:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588005; cv=none; d=google.com; s=arc-20160816; b=uWCdPHStb7T6HLTQg67iskkU1eeeTGpMDwZVAvippELtLC0J6zsgYbBPm6FhCdRm6g 3w6EDBP7DIpLzRq2AShmp2EJga7GKyyxbEtzkFiJ8uWvvqYmNVYvCKah+0LlLxMkbNrL VMA0pybNFMddaUs/Oqv5SpwRSHJ92N4S2ApKN4MA5eazk9Og1iic6AMWJX/KY82zBV0Q FkhG37sT8mGBE1Ns6m47pZ6UFrE/utq5Shwk1UdnOmtPhMPPUtrJbym6VbbBEkbHPXxd BfFmaKIOXqP0PoUMdcscsFLy2kWt7EwcjTdfMZruxlCF4JKEs0C7ed1x1Z5Vsj3sIVil upkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=idcCraew5kDYKUJXALkAj+l9XAI2mPAFcI9lteeEtuk=; b=cRZgbQF6eyVcMfACe22Yl34R/+DHyk58idD2jq/50q2MoczWFbgGkJeaK/RQ4B3+yI bptjcwUTjvbJItQwbz0elWGOBKd/Alxw9gF8jkeYOZUSwpdxIuNbbJWc+YLVGn9DSKim ymxjMFiBfZYtSseGCiarGWn6RZx9TiNmefyI2/uLLZNoNY3nJ6s/A1oFSYFhjlCXhwwD 8f67NUkPrI0cN52EkYLjaV8oS12RcIqA4FU410FJlRxviMkWRwi4Kd6k3JsoSS09U6z4 DkduQUgOkyqC3jQd3dwp4MhA89nYJ8SMuHv2/65ym8FkGr6KDS4aECZVqEZCRdpwfxla k29Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id o13si18319711ejb.163.2019.07.31.08.46.45 for ; Wed, 31 Jul 2019 08:46:45 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B25621570; Wed, 31 Jul 2019 08:46:44 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 283DB3F694; Wed, 31 Jul 2019 08:46:42 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 11/22] mm: pagewalk: Add p4d_entry() and pgd_entry() Date: Wed, 31 Jul 2019 16:45:52 +0100 Message-Id: <20190731154603.41797-12-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP pgd_entry() and pud_entry() were removed by commit 0b1fbfe50006c410 ("mm/pagewalk: remove pgd_entry() and pud_entry()") because there were no users. We're about to add users so reintroduce them, along with p4d_entry() as we now have 5 levels of tables. Note that commit a00cc7d9dd93d66a ("mm, x86: add support for PUD-sized transparent hugepages") already re-added pud_entry() but with different semantics to the other callbacks. Since there have never been upstream users of this, revert the semantics back to match the other callbacks. This means pud_entry() is called for all entries, not just transparent huge pages. Signed-off-by: Steven Price --- include/linux/mm.h | 18 ++++++++++++------ mm/pagewalk.c | 27 ++++++++++++++++----------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 0334ca97c584..0a1e83c4e267 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1432,15 +1432,14 @@ void unmap_vmas(struct mmu_gather *tlb, struct vm_area_struct *start_vma, /** * mm_walk - callbacks for walk_page_range - * @pud_entry: if set, called for each non-empty PUD (2nd-level) entry - * this handler should only handle pud_trans_huge() puds. - * the pmd_entry or pte_entry callbacks will be used for - * regular PUDs. - * @pmd_entry: if set, called for each non-empty PMD (3rd-level) entry + * @pgd_entry: if set, called for each non-empty PGD (top-level) entry + * @p4d_entry: if set, called for each non-empty P4D entry + * @pud_entry: if set, called for each non-empty PUD entry + * @pmd_entry: if set, called for each non-empty PMD entry * this handler is required to be able to handle * pmd_trans_huge() pmds. They may simply choose to * split_huge_page() instead of handling it explicitly. - * @pte_entry: if set, called for each non-empty PTE (4th-level) entry + * @pte_entry: if set, called for each non-empty PTE (lowest-level) entry * @pte_hole: if set, called for each hole at all levels * @hugetlb_entry: if set, called for each hugetlb entry * @test_walk: caller specific callback function to determine whether @@ -1453,8 +1452,15 @@ void unmap_vmas(struct mmu_gather *tlb, struct vm_area_struct *start_vma, * @private: private data for callbacks' usage * * (see the comment on walk_page_range() for more details) + * + * p?d_entry callbacks are called even if those levels are folded on a partial + * architecture/configuration. */ struct mm_walk { + int (*pgd_entry)(pgd_t *pgd, unsigned long addr, + unsigned long next, struct mm_walk *walk); + int (*p4d_entry)(p4d_t *p4d, unsigned long addr, + unsigned long next, struct mm_walk *walk); int (*pud_entry)(pud_t *pud, unsigned long addr, unsigned long next, struct mm_walk *walk); int (*pmd_entry)(pmd_t *pmd, unsigned long addr, diff --git a/mm/pagewalk.c b/mm/pagewalk.c index c3084ff2569d..98373a9f88b8 100644 --- a/mm/pagewalk.c +++ b/mm/pagewalk.c @@ -90,15 +90,9 @@ static int walk_pud_range(p4d_t *p4d, unsigned long addr, unsigned long end, } if (walk->pud_entry) { - spinlock_t *ptl = pud_trans_huge_lock(pud, walk->vma); - - if (ptl) { - err = walk->pud_entry(pud, addr, next, walk); - spin_unlock(ptl); - if (err) - break; - continue; - } + err = walk->pud_entry(pud, addr, next, walk); + if (err) + break; } split_huge_pud(walk->vma, pud, addr); @@ -131,7 +125,12 @@ static int walk_p4d_range(pgd_t *pgd, unsigned long addr, unsigned long end, break; continue; } - if (walk->pmd_entry || walk->pte_entry) + if (walk->p4d_entry) { + err = walk->p4d_entry(p4d, addr, next, walk); + if (err) + break; + } + if (walk->pud_entry || walk->pmd_entry || walk->pte_entry) err = walk_pud_range(p4d, addr, next, walk); if (err) break; @@ -157,7 +156,13 @@ static int walk_pgd_range(unsigned long addr, unsigned long end, break; continue; } - if (walk->pmd_entry || walk->pte_entry) + if (walk->pgd_entry) { + err = walk->pgd_entry(pgd, addr, next, walk); + if (err) + break; + } + if (walk->p4d_entry || walk->pud_entry || walk->pmd_entry || + walk->pte_entry) err = walk_p4d_range(pgd, addr, next, walk); if (err) break; From patchwork Wed Jul 31 15:45:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068457 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6B6DC13A0 for ; Wed, 31 Jul 2019 15:46:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 57306228C9 for ; Wed, 31 Jul 2019 15:46:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4A7E82623D; Wed, 31 Jul 2019 15:46:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8FCF228C9 for ; Wed, 31 Jul 2019 15:46:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E519E8E001D; Wed, 31 Jul 2019 11:46:49 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id E022D8E0003; Wed, 31 Jul 2019 11:46:49 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CA5168E001D; Wed, 31 Jul 2019 11:46:49 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id 7CCF98E0003 for ; Wed, 31 Jul 2019 11:46:49 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id y15so42689321edu.19 for ; Wed, 31 Jul 2019 08:46:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=x1V6OHqN3EauZVYY6EyiL7lCxOhh04YiNYXgSPv0O1I=; b=MGNMjmJcZYjgM/k36ioRx/r3pzROycROHXSEmyzMP+RK3jSu0eQjpXxZTj7ve063Op qELeChUOrDTVJR6nZCTJ//M48qT1xCV7MtYjwebhHZCjyDJc+BMYeMc0gUEjDo798lnV NXg2sTym2d6LonCueGcts0rV/MW1QZQ14CmVD34KN10H56m2iP+pQ5rnNs5Ge0sLjXqe NGy1FEWxS48eRkkF9JAzq0qrFANLrjkx6BmBaiq/icfGTJNaKP3SlNGbDlHLAncZcgFE hXa36cvFV9btjQCT/XSHabd8I6a0rAKRM49s5k60HoeoS4laMzkVCBvngqPxUoxFx1EQ d5mg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAWQnuwoF/Pp62tjx+zlwjqxLbjmsgxhpWtYFr2VFEeXxlCQNQVh 6r1ejxQRE0lmxLO7/VPUHL0tJ3LeD/zsTQnwd8blK8USGDD1qRQtPWmnPCCDNzk5Lrz+SweEUmz h1gIEYNiKFW7LbguwvxmF9iTKWX5xK9YM8exf1Zal7cIXnaOkHnHVFxSqnUW+8VjT4w== X-Received: by 2002:aa7:df8b:: with SMTP id b11mr5444071edy.6.1564588009107; Wed, 31 Jul 2019 08:46:49 -0700 (PDT) X-Google-Smtp-Source: APXvYqwF7HyMwsByqmFYRqqZdnU8/bdQF4ekYsIJeHEoHh65dsbdn75mzkwmRumIbTqYFqOYHsOz X-Received: by 2002:aa7:df8b:: with SMTP id b11mr5444002edy.6.1564588008290; Wed, 31 Jul 2019 08:46:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588008; cv=none; d=google.com; s=arc-20160816; b=GZynEnkklfElLR7b9nxNCbg7MnKQIi1K+F9djdTkQ/ViTWi7Ms4AI6b7yXbPAA5GPs h8FR0f3aINCVBo+UKbvULPS4QGxk1Ayv7wsCl0VJmFdobRbLKUvHsXNMcFrrXvwgulzi Qrl6OiHqcfaW5i/VPsx9ygwRZwogtGP7E4AHM1evoMVdProYktzoKUXCLcf83glpMBhf 4+BLry76Qu0jCo3KfKVAcFhQ3Cv4rZUDMFVYLbTCVVNLqpKpCE7yoztRDV0NpuPsQRcH z5/fEZsDHNyAbLJ/SjiemFjj4I2RP7O21LahL9O3St191I9gFN80rR0VIohQk2zNUGZa Bv7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=x1V6OHqN3EauZVYY6EyiL7lCxOhh04YiNYXgSPv0O1I=; b=k1oBH5PMsu5yS9Iuk1TmOuxj83XoY0p+5qQ2ddPNDBjYko61mc56JkvBY5qubbH8/Q ysJTN6t0YJ/+SlTRxLc/w4WKXYedZPSJFzQWxmGldiKM5M01auk9KZXqxH/7DtU0Xkw2 S/EMRU5jHJ2Yld2zjh5909D3mCyMBQltri84plunpen/YvvK4i50ruqLsCfNWpmVrGkK b2hJJNYGE3Msp4lp0Xt6TiuSe2bhObHr8RLY1VMrjIv6M5T7WIlKzwgnZZCHCdBy6sii B/SwrZ4tOPr/v89dfFDK7zSCWCthmRDeVh0ZWW4JFAH+PTIz/vOo+LUzHoEpJNpOgcD8 5Bbw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id a14si18225073ejr.135.2019.07.31.08.46.48 for ; Wed, 31 Jul 2019 08:46:48 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7E73F15A2; Wed, 31 Jul 2019 08:46:47 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E93093F694; Wed, 31 Jul 2019 08:46:44 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 12/22] mm: pagewalk: Allow walking without vma Date: Wed, 31 Jul 2019 16:45:53 +0100 Message-Id: <20190731154603.41797-13-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP Since 48684a65b4e3: "mm: pagewalk: fix misbehavior of walk_page_range for vma(VM_PFNMAP)", page_table_walk() will report any kernel area as a hole, because it lacks a vma. This means each arch has re-implemented page table walking when needed, for example in the per-arch ptdump walker. Remove the requirement to have a vma except when trying to split huge pages. Signed-off-by: Steven Price --- mm/pagewalk.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/mm/pagewalk.c b/mm/pagewalk.c index 98373a9f88b8..1cbef99e9258 100644 --- a/mm/pagewalk.c +++ b/mm/pagewalk.c @@ -36,7 +36,7 @@ static int walk_pmd_range(pud_t *pud, unsigned long addr, unsigned long end, do { again: next = pmd_addr_end(addr, end); - if (pmd_none(*pmd) || !walk->vma) { + if (pmd_none(*pmd)) { if (walk->pte_hole) err = walk->pte_hole(addr, next, walk); if (err) @@ -59,9 +59,14 @@ static int walk_pmd_range(pud_t *pud, unsigned long addr, unsigned long end, if (!walk->pte_entry) continue; - split_huge_pmd(walk->vma, pmd, addr); - if (pmd_trans_unstable(pmd)) - goto again; + if (walk->vma) { + split_huge_pmd(walk->vma, pmd, addr); + if (pmd_trans_unstable(pmd)) + goto again; + } else if (pmd_leaf(*pmd)) { + continue; + } + err = walk_pte_range(pmd, addr, next, walk); if (err) break; @@ -81,7 +86,7 @@ static int walk_pud_range(p4d_t *p4d, unsigned long addr, unsigned long end, do { again: next = pud_addr_end(addr, end); - if (pud_none(*pud) || !walk->vma) { + if (pud_none(*pud)) { if (walk->pte_hole) err = walk->pte_hole(addr, next, walk); if (err) @@ -95,9 +100,13 @@ static int walk_pud_range(p4d_t *p4d, unsigned long addr, unsigned long end, break; } - split_huge_pud(walk->vma, pud, addr); - if (pud_none(*pud)) - goto again; + if (walk->vma) { + split_huge_pud(walk->vma, pud, addr); + if (pud_none(*pud)) + goto again; + } else if (pud_leaf(*pud)) { + continue; + } if (walk->pmd_entry || walk->pte_entry) err = walk_pmd_range(pud, addr, next, walk); From patchwork Wed Jul 31 15:45:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068459 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D494F1399 for ; Wed, 31 Jul 2019 15:46:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C0AD31FF28 for ; Wed, 31 Jul 2019 15:46:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B405326246; Wed, 31 Jul 2019 15:46:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 31BCE1FF28 for ; Wed, 31 Jul 2019 15:46:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3F2F28E001E; Wed, 31 Jul 2019 11:46:53 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 37BE48E0003; Wed, 31 Jul 2019 11:46:53 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 26AC78E001E; Wed, 31 Jul 2019 11:46:53 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id CEE868E0003 for ; Wed, 31 Jul 2019 11:46:52 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id y3so42643786edm.21 for ; Wed, 31 Jul 2019 08:46:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=tfQclRJFdWfuHFy/tc7DxTTKm79xYcooIC8rpGbhg7A=; b=rbZp71MbTJCnolwHrzur3nrWNSAOVUjP/ZZmNAvH+EXzo6dVeqzoWKtYBwXF+RxaMC c9JRv94pzWWrp+5cr8j1hJIDYharrUgyTBMqnO/rLLojlbmyIztZaktQak+6RcHQVcq6 bslajAGZzyEiYzx+imOihaxVQ8P9JeKbFrB5QzOWmnDJh2+7riR8PsemOPzWeyHDyYi5 5wWCICpKwpPEZToLX78YLmQvjUZcoS5twpXy5U7V4RbNade5LT6AfDeEKcVDgLDDTNDh vx1kTMsZzpjRnwZNSbOC5xInztsLb2l1AVsZ8is9l0zfs7p9iR428Yjh34Cg5/R9Grsr AAmw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAWPCHle9g+LoV3Q/JIOp5dbLF0Ec11SOEZ6EBawSLpKKYYRqGcp x7aeGkGwpd+ek4zmmMmklIKSFW+enslMhO1hvUoAWODskG0vStlpOHUjpRt5oXnfK+fGiTQlift BcsgKUUgT6pwXgQuSntVst9ptW3gJCiBrWoGQ2cewmkFSdew/Dq1fw23J46nGX52n0A== X-Received: by 2002:a17:906:4e95:: with SMTP id v21mr95419079eju.105.1564588012386; Wed, 31 Jul 2019 08:46:52 -0700 (PDT) X-Google-Smtp-Source: APXvYqwE7heEYXpPKb6EMpo7VRanjstKbLN+HokGQ9JdTMA6lOPaZV/8NprQBsSieR9Mjo+v7zl8 X-Received: by 2002:a17:906:4e95:: with SMTP id v21mr95419000eju.105.1564588011215; Wed, 31 Jul 2019 08:46:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588011; cv=none; d=google.com; s=arc-20160816; b=o39K/1fxkmpTjLBzQVvMDYomQNP+GkJlI33qAKtUFOWKJZ8hKYX4tmu8WySG7vkeTG NakGfY7N38haSYr6ZzImaVA7dez+Q1dYINOuil/OjrISqe8ZxO+UxElTIl8nBK0JQyU4 dEwIlM3YL6EDNZpxLuofUz1kuqU6vt8MkG3eoyRp1Djoatx79ryamPFnogjBE6qpjJwR 2K+zY4cvuAy+1fcun37D70go1h5+EmvO6NwynlhB1QhBf0HHkQV5BxdI/HQw2lzHz149 mSPasrquNWcq2cm/pf5X9eP+rCqaA1smUX0UCWe3t3zgk1nrT/yXBroU5zZGGcdmIvfS Ui7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=tfQclRJFdWfuHFy/tc7DxTTKm79xYcooIC8rpGbhg7A=; b=N5aHL4Xfy6Wdpidh6TvEDfVY/zB43y/Lv7fbc7ciBYYUyjJrRp1c1z01JMqk9RtrPO nBoRfxGF4EiN3GkKdfVYHN2zXNUa8f+ABTb799BykNgz0l3BBegRqywTrsRcyl/+0AOx GxjpBk1hhbyFUVu5hE4ltvFxTullUB46LOl0TuMcZ8xd4i+3qVWaW3+iZmnUk6R0I/VF YMmOV63uYdoRu0KEiVCm5j7m36EbjaBumVXwHwGajUIqG/BE1h0X+R+88uFNKlbbgSvM 1wkg+uPGQwjwmoCJS+lHrKFuubfBgiRkvAMa+nNGNzo9NJaiTiv+i80cO3zfhyGvDjM2 qtIw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id nw22si19699764ejb.388.2019.07.31.08.46.50 for ; Wed, 31 Jul 2019 08:46:51 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4AB4115AB; Wed, 31 Jul 2019 08:46:50 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B46AD3F694; Wed, 31 Jul 2019 08:46:47 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 13/22] mm: pagewalk: Add test_p?d callbacks Date: Wed, 31 Jul 2019 16:45:54 +0100 Message-Id: <20190731154603.41797-14-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP It is useful to be able to skip parts of the page table tree even when walking without VMAs. Add test_p?d callbacks similar to test_walk but which are called just before a table at that level is walked. If the callback returns non-zero then the entire table is skipped. Signed-off-by: Steven Price --- include/linux/mm.h | 11 +++++++++++ mm/pagewalk.c | 24 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/include/linux/mm.h b/include/linux/mm.h index 0a1e83c4e267..e2581ec5324e 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1447,6 +1447,11 @@ void unmap_vmas(struct mmu_gather *tlb, struct vm_area_struct *start_vma, * value means "do page table walk over the current vma," * and a negative one means "abort current page table walk * right now." 1 means "skip the current vma." + * @test_pmd: similar to test_walk(), but called for every pmd. + * @test_pud: similar to test_walk(), but called for every pud. + * @test_p4d: similar to test_walk(), but called for every p4d. + * Returning 0 means walk this part of the page tables, + * returning 1 means to skip this range. * @mm: mm_struct representing the target process of page table walk * @vma: vma currently walked (NULL if walking outside vmas) * @private: private data for callbacks' usage @@ -1474,6 +1479,12 @@ struct mm_walk { struct mm_walk *walk); int (*test_walk)(unsigned long addr, unsigned long next, struct mm_walk *walk); + int (*test_pmd)(unsigned long addr, unsigned long next, + pmd_t *pmd_start, struct mm_walk *walk); + int (*test_pud)(unsigned long addr, unsigned long next, + pud_t *pud_start, struct mm_walk *walk); + int (*test_p4d)(unsigned long addr, unsigned long next, + p4d_t *p4d_start, struct mm_walk *walk); struct mm_struct *mm; struct vm_area_struct *vma; void *private; diff --git a/mm/pagewalk.c b/mm/pagewalk.c index 1cbef99e9258..6bea79b95be3 100644 --- a/mm/pagewalk.c +++ b/mm/pagewalk.c @@ -32,6 +32,14 @@ static int walk_pmd_range(pud_t *pud, unsigned long addr, unsigned long end, unsigned long next; int err = 0; + if (walk->test_pmd) { + err = walk->test_pmd(addr, end, pmd_offset(pud, 0UL), walk); + if (err < 0) + return err; + if (err > 0) + return 0; + } + pmd = pmd_offset(pud, addr); do { again: @@ -82,6 +90,14 @@ static int walk_pud_range(p4d_t *p4d, unsigned long addr, unsigned long end, unsigned long next; int err = 0; + if (walk->test_pud) { + err = walk->test_pud(addr, end, pud_offset(p4d, 0UL), walk); + if (err < 0) + return err; + if (err > 0) + return 0; + } + pud = pud_offset(p4d, addr); do { again: @@ -124,6 +140,14 @@ static int walk_p4d_range(pgd_t *pgd, unsigned long addr, unsigned long end, unsigned long next; int err = 0; + if (walk->test_p4d) { + err = walk->test_p4d(addr, end, p4d_offset(pgd, 0UL), walk); + if (err < 0) + return err; + if (err > 0) + return 0; + } + p4d = p4d_offset(pgd, addr); do { next = p4d_addr_end(addr, end); From patchwork Wed Jul 31 15:45:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068461 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8588114DB for ; Wed, 31 Jul 2019 15:47:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6F0E122F3E for ; Wed, 31 Jul 2019 15:47:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 62DC52624B; Wed, 31 Jul 2019 15:47:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8BD4F22F3E for ; Wed, 31 Jul 2019 15:46:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D18A88E001F; Wed, 31 Jul 2019 11:46:55 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id CF0D08E0003; Wed, 31 Jul 2019 11:46:55 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BB8258E001F; Wed, 31 Jul 2019 11:46:55 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id 69E2E8E0003 for ; Wed, 31 Jul 2019 11:46:55 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id o13so42688922edt.4 for ; Wed, 31 Jul 2019 08:46:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=wIgp+k+2ujziSCzMqofK2+n/6Gw2lFVBBkY93b4Ysm4=; b=GGn7iP5z90rsnJCOK+ANtmrnfz/6G5N1uImnNDqBbhdr6QNqiW/irQrubAh2ztmcpO zYcPFvM8Q7VX0FJw1s3X7/Syf55ySzx/TUnC7EdOg5/wrqMKcErU7C9ULcX/H1QuXJlb bTebfMInYj4uB/vLzD8RYZSMNx6VobQoAvUWIompi6CXu/Wf1SU/RBP7l5FXLg88sE1e u4+QYIMMWI27X1gOOEqmG+ln8mQO/zkNjwqrepTNX3UkBB1Do6gukUrAaTZw6XMh60Gu QoTX5c5pSTef2sDj+cfip9IX4bbf2j68Bz96wcZuuf62hXGY4An5xI2htDhb8VS1mCD9 srwg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAW0mOfYhKRPxRbTHHs5Zbs8yrPuGMukVw0iPo/LcHzL5PnbsYvL hYkWspPZT+SvYNVhhR7IcQSJD1ZXftr6zsU0OPdfLyPlk3y1Ctac2OWHRqb+0+0lANkHPkSI+E3 Y22BRnwO2QJTRTYBu58dcI0EBYxZTMqmtfkGw0l0doni/VQFwbruaSrtDLMT+dC31Ug== X-Received: by 2002:a17:906:1596:: with SMTP id k22mr12723267ejd.102.1564588014966; Wed, 31 Jul 2019 08:46:54 -0700 (PDT) X-Google-Smtp-Source: APXvYqzlydKkelRmdCxCFCWvkjEJ7ngytgzIgQIcDX3aDCdrvcOht8ZDqqwzCkOqtyjxpplzRQN9 X-Received: by 2002:a17:906:1596:: with SMTP id k22mr12723202ejd.102.1564588013931; Wed, 31 Jul 2019 08:46:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588013; cv=none; d=google.com; s=arc-20160816; b=qxFqwJtG18UlI9xUe+AxpwrAVf8vtygyXQqIJ586gqxkFLFhg2h84+E9SxWyBkR0vI 518j6bI1+Eqim5JeSyltUdjWZHosap58f5KhrY0MZTVu9fqcYIf/nLEQH6yOT3chOXO6 q8/rRbgsNIPBM1vZuXfmr4u5EKUPSfjqUXE8SOjfnz4uHI3U5VjK5DAnsl4QIVXT9C6M IDfYipH6+l2c6plAXqtqux/T05yMW9jxJYDdQgt0t+D10NonFy0cgZFZeC3c24OILhfy N1B/XWeeg6wLr4SFZiCM//oAtYyRiYD5Ftkzk26lLFOCMMbIWFX1Jdc+hEWZ1ZD8nxjv KWVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=wIgp+k+2ujziSCzMqofK2+n/6Gw2lFVBBkY93b4Ysm4=; b=gObdcThb1Mv4Wfp+37UrVkdTiMBj+2m+me/Huw74C+U3XVlCyu3MW5HLF6ZMBA57pL WGf1aKI6vLRpNp1ljkqkgAYsyXD1aGuWPf7WhHN7G7jHpIhT8fKTAQOBdPtsWLeGPyy+ tgLI7bVVgwmbVgqvhsP8EuQiqwudlwrL8DnjfGBiMvgdZJnEv3q1ZQJkeGICVQd+TS58 M0oiglLkMWC1G1efspvv6XskSrV4tGNjDeS8xB3pEoEDG+f2njijTgUy5gdT1Uliu9+M GpDEZfWNvKSzcL1wsw4KO/Br8TLsXwNM7m+5+RbEfAjImskWHTQAk83RN7DRrrs9ZOUb fuhA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id h10si21523838edh.141.2019.07.31.08.46.53 for ; Wed, 31 Jul 2019 08:46:53 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 16A1B1570; Wed, 31 Jul 2019 08:46:53 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8125E3F694; Wed, 31 Jul 2019 08:46:50 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 14/22] mm: pagewalk: Add 'depth' parameter to pte_hole Date: Wed, 31 Jul 2019 16:45:55 +0100 Message-Id: <20190731154603.41797-15-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP The pte_hole() callback is called at multiple levels of the page tables. Code dumping the kernel page tables needs to know what at what depth the missing entry is. Add this is an extra parameter to pte_hole(). When the depth isn't know (e.g. processing a vma) then -1 is passed. The depth that is reported is the actual level where the entry is missing (ignoring any folding that is in place), i.e. any levels where PTRS_PER_P?D is set to 1 are ignored. Note that depth starts at 0 for a PGD so that PUD/PMD/PTE retain their natural numbers as levels 2/3/4. Signed-off-by: Steven Price --- fs/proc/task_mmu.c | 4 ++-- include/linux/mm.h | 6 ++++-- mm/hmm.c | 2 +- mm/migrate.c | 1 + mm/mincore.c | 1 + mm/pagewalk.c | 31 +++++++++++++++++++++++++------ 6 files changed, 34 insertions(+), 11 deletions(-) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 731642e0f5a0..b2f87fde69eb 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -504,7 +504,7 @@ static void smaps_account(struct mem_size_stats *mss, struct page *page, #ifdef CONFIG_SHMEM static int smaps_pte_hole(unsigned long addr, unsigned long end, - struct mm_walk *walk) + __always_unused int depth, struct mm_walk *walk) { struct mem_size_stats *mss = walk->private; @@ -1274,7 +1274,7 @@ static int add_to_pagemap(unsigned long addr, pagemap_entry_t *pme, } static int pagemap_pte_hole(unsigned long start, unsigned long end, - struct mm_walk *walk) + __always_unused int depth, struct mm_walk *walk) { struct pagemapread *pm = walk->private; unsigned long addr = start; diff --git a/include/linux/mm.h b/include/linux/mm.h index e2581ec5324e..6b2e6d65cb4c 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1440,7 +1440,9 @@ void unmap_vmas(struct mmu_gather *tlb, struct vm_area_struct *start_vma, * pmd_trans_huge() pmds. They may simply choose to * split_huge_page() instead of handling it explicitly. * @pte_entry: if set, called for each non-empty PTE (lowest-level) entry - * @pte_hole: if set, called for each hole at all levels + * @pte_hole: if set, called for each hole at all levels, + * depth is -1 if not known, 0:PGD, 1:P4D, 2:PUD, 3:PMD, 4:PTE + * any depths where PTRS_PER_P?D is equal to 1 are skipped * @hugetlb_entry: if set, called for each hugetlb entry * @test_walk: caller specific callback function to determine whether * we walk over the current vma or not. Returning 0 @@ -1473,7 +1475,7 @@ struct mm_walk { int (*pte_entry)(pte_t *pte, unsigned long addr, unsigned long next, struct mm_walk *walk); int (*pte_hole)(unsigned long addr, unsigned long next, - struct mm_walk *walk); + int depth, struct mm_walk *walk); int (*hugetlb_entry)(pte_t *pte, unsigned long hmask, unsigned long addr, unsigned long next, struct mm_walk *walk); diff --git a/mm/hmm.c b/mm/hmm.c index e1eedef129cf..413944bb99dc 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -433,7 +433,7 @@ static void hmm_range_need_fault(const struct hmm_vma_walk *hmm_vma_walk, } static int hmm_vma_walk_hole(unsigned long addr, unsigned long end, - struct mm_walk *walk) + __always_unused int depth, struct mm_walk *walk) { struct hmm_vma_walk *hmm_vma_walk = walk->private; struct hmm_range *range = hmm_vma_walk->range; diff --git a/mm/migrate.c b/mm/migrate.c index 8992741f10aa..b92014ceb6dc 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -2130,6 +2130,7 @@ struct migrate_vma { static int migrate_vma_collect_hole(unsigned long start, unsigned long end, + __always_unused int depth, struct mm_walk *walk) { struct migrate_vma *migrate = walk->private; diff --git a/mm/mincore.c b/mm/mincore.c index 4fe91d497436..8ba0fd80d449 100644 --- a/mm/mincore.c +++ b/mm/mincore.c @@ -112,6 +112,7 @@ static int __mincore_unmapped_range(unsigned long addr, unsigned long end, } static int mincore_unmapped_range(unsigned long addr, unsigned long end, + __always_unused int depth, struct mm_walk *walk) { walk->private += __mincore_unmapped_range(addr, end, diff --git a/mm/pagewalk.c b/mm/pagewalk.c index 6bea79b95be3..cecc91259707 100644 --- a/mm/pagewalk.c +++ b/mm/pagewalk.c @@ -4,6 +4,22 @@ #include #include +/* + * We want to know the real level where a entry is located ignoring any + * folding of levels which may be happening. For example if p4d is folded then + * a missing entry found at level 1 (p4d) is actually at level 0 (pgd). + */ +static int real_depth(int depth) +{ + if (depth == 3 && PTRS_PER_PMD == 1) + depth = 2; + if (depth == 2 && PTRS_PER_PUD == 1) + depth = 1; + if (depth == 1 && PTRS_PER_P4D == 1) + depth = 0; + return depth; +} + static int walk_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end, struct mm_walk *walk) { @@ -31,6 +47,7 @@ static int walk_pmd_range(pud_t *pud, unsigned long addr, unsigned long end, pmd_t *pmd; unsigned long next; int err = 0; + int depth = real_depth(3); if (walk->test_pmd) { err = walk->test_pmd(addr, end, pmd_offset(pud, 0UL), walk); @@ -46,7 +63,7 @@ static int walk_pmd_range(pud_t *pud, unsigned long addr, unsigned long end, next = pmd_addr_end(addr, end); if (pmd_none(*pmd)) { if (walk->pte_hole) - err = walk->pte_hole(addr, next, walk); + err = walk->pte_hole(addr, next, depth, walk); if (err) break; continue; @@ -89,6 +106,7 @@ static int walk_pud_range(p4d_t *p4d, unsigned long addr, unsigned long end, pud_t *pud; unsigned long next; int err = 0; + int depth = real_depth(2); if (walk->test_pud) { err = walk->test_pud(addr, end, pud_offset(p4d, 0UL), walk); @@ -104,7 +122,7 @@ static int walk_pud_range(p4d_t *p4d, unsigned long addr, unsigned long end, next = pud_addr_end(addr, end); if (pud_none(*pud)) { if (walk->pte_hole) - err = walk->pte_hole(addr, next, walk); + err = walk->pte_hole(addr, next, depth, walk); if (err) break; continue; @@ -139,6 +157,7 @@ static int walk_p4d_range(pgd_t *pgd, unsigned long addr, unsigned long end, p4d_t *p4d; unsigned long next; int err = 0; + int depth = real_depth(1); if (walk->test_p4d) { err = walk->test_p4d(addr, end, p4d_offset(pgd, 0UL), walk); @@ -153,7 +172,7 @@ static int walk_p4d_range(pgd_t *pgd, unsigned long addr, unsigned long end, next = p4d_addr_end(addr, end); if (p4d_none_or_clear_bad(p4d)) { if (walk->pte_hole) - err = walk->pte_hole(addr, next, walk); + err = walk->pte_hole(addr, next, depth, walk); if (err) break; continue; @@ -184,7 +203,7 @@ static int walk_pgd_range(unsigned long addr, unsigned long end, next = pgd_addr_end(addr, end); if (pgd_none_or_clear_bad(pgd)) { if (walk->pte_hole) - err = walk->pte_hole(addr, next, walk); + err = walk->pte_hole(addr, next, 0, walk); if (err) break; continue; @@ -230,7 +249,7 @@ static int walk_hugetlb_range(unsigned long addr, unsigned long end, if (pte) err = walk->hugetlb_entry(pte, hmask, addr, next, walk); else if (walk->pte_hole) - err = walk->pte_hole(addr, next, walk); + err = walk->pte_hole(addr, next, -1, walk); if (err) break; @@ -273,7 +292,7 @@ static int walk_page_test(unsigned long start, unsigned long end, if (vma->vm_flags & VM_PFNMAP) { int err = 1; if (walk->pte_hole) - err = walk->pte_hole(start, end, walk); + err = walk->pte_hole(start, end, -1, walk); return err ? err : 1; } return 0; From patchwork Wed Jul 31 15:45:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068465 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2DFFB13A0 for ; Wed, 31 Jul 2019 15:47:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1992822B39 for ; Wed, 31 Jul 2019 15:47:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0DD1B2623D; Wed, 31 Jul 2019 15:47:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3CFFA22B39 for ; Wed, 31 Jul 2019 15:47:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A81318E0020; Wed, 31 Jul 2019 11:46:58 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id A5B6C8E0003; Wed, 31 Jul 2019 11:46:58 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 884D88E0020; Wed, 31 Jul 2019 11:46:58 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id 3595F8E0003 for ; Wed, 31 Jul 2019 11:46:58 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id b33so42648326edc.17 for ; Wed, 31 Jul 2019 08:46:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=vPW0tQLt9R9rk2ldN7aTCPavDqlFzekXxQZ20ZVd904=; b=TyjVBGbmcDqvxN2/NutKlcVw90bErw0x+dHc+x6q4mBuDLQPrITr/8H1X5AR/k2E/l 4WcUvoohSNP+UkH2BsDtvyJ/qC9tw6KN1cWvZX8ZkXS0aLVt62MfXT1/6IvsV36A1zYW SuWnxRXDLemB/DXFsHSpbnSXdDNdcp4LOpsjJAlCAAx1FpbUa/T1ktO4/0nt3EF6omb+ 6ebAKmnMLb8KXIVHJS4CTVlRXtAp/qc6ONvUNzCYJ23PY4Vn1KCDJRhJZsyhFwQT9/RG B5scLEhdG7Ga4TrMEv8hLBq7ayYcuXpuyxG3d5er2C1PFbWWyAQTkzF4OaaS9bXdrAco SWhQ== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAUYo+/1hG4/VfqNB6+6tDTCRvoHcVN5FZYojKaYcpA06e4nTTyI oWe6edVvImIAajCIbjHNCgpYHEzUereNPSIUBx27W/NBeTrLANwNOC8ORH6PYH3z3nH6b09Cjsb aqz9CAKfPolHytOs1IF6/9w5wcohYVC3+g+UQ+vkyA/vzFniNIcOsmjaTdzFZeXIEuw== X-Received: by 2002:a50:ad45:: with SMTP id z5mr106630630edc.21.1564588017777; Wed, 31 Jul 2019 08:46:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqygXQXTScqy32KrM45zY5CRNXiJ6ANjpQ0acK1awZhmg2vlCKTDa8AYBtg+8KjQSNyweEJ2 X-Received: by 2002:a50:ad45:: with SMTP id z5mr106630544edc.21.1564588016815; Wed, 31 Jul 2019 08:46:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588016; cv=none; d=google.com; s=arc-20160816; b=vosQRDDvo9rhKaGLNwBCn+pBllZH1rtspQmA4nmWgY5HwYkHtJGWm4Nr3tFw0XTXfE zUMMvStIkftJlPIYHNrvOoAjLDAreAPQyKvw0IuWqSEo4HWBHqOca9iO4Dy+FYyX+/dM eNu4u+BXhRbZ5JI2eV3534o4Bh8tqNdUV3VZBxjhbIo+xPKx3Xan11XvK4xyslCKgFqZ Y5R6e2FHuUQihcI7sBnTniHIvqATp+nhbddg//16DFTZ+xtBY3Jb6G5JgcDblkqF1Zbu RiMnVW4gfJSVuBHV0Unl/iixbMi5VF7p+6ZmGILEhvebt+ZHeW1/xeB+c0pgT+PZXsu8 iySg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=vPW0tQLt9R9rk2ldN7aTCPavDqlFzekXxQZ20ZVd904=; b=Kq70gkDyhATfKMQH+9OXucEps8+3LxQyayWzv8H4mKe94m3570HMkgWPsY6yNVc0Bv 2kmyUfA2aEyIHFnE/UNRMs1WXMh2xjLr//MNGU3aKvcr3bgwlU5EuJBZ1HRx3FVhSDEj ewBkzDeNPfCinNgZtEFWHRChZtOGLuHsva/XIt8OU4P8PLhPlunTVzmt4Yh4BvTP5CVa inL8GvNvwkK7Od6fc8eNX6GPf5ZNqnXGVDx4Z5PS0CEE73/1HahoPgWdyr8SR9erR4lH 7JPO77IApqgqwuH8s3nzOGzYHGsCpeTFpVsjqxJucX5705SsJkF+VCFCd1SMko25LYs1 wR1A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id y12si21148319edd.87.2019.07.31.08.46.56 for ; Wed, 31 Jul 2019 08:46:56 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id F1BAA344; Wed, 31 Jul 2019 08:46:55 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4D2743F694; Wed, 31 Jul 2019 08:46:53 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 15/22] x86: mm: Point to struct seq_file from struct pg_state Date: Wed, 31 Jul 2019 16:45:56 +0100 Message-Id: <20190731154603.41797-16-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP mm/dump_pagetables.c passes both struct seq_file and struct pg_state down the chain of walk_*_level() functions to be passed to note_page(). Instead place the struct seq_file in struct pg_state and access it from struct pg_state (which is private to this file) in note_page(). Signed-off-by: Steven Price --- arch/x86/mm/dump_pagetables.c | 69 ++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index ab67822fd2f4..4dc6f4df40af 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -36,6 +36,7 @@ struct pg_state { bool to_dmesg; bool check_wx; unsigned long wx_pages; + struct seq_file *seq; }; struct addr_marker { @@ -265,11 +266,12 @@ static void note_wx(struct pg_state *st) * of PTE entries; the next one is different so we need to * print what we collected so far. */ -static void note_page(struct seq_file *m, struct pg_state *st, - pgprot_t new_prot, pgprotval_t new_eff, int level) +static void note_page(struct pg_state *st, pgprot_t new_prot, + pgprotval_t new_eff, int level) { pgprotval_t prot, cur, eff; static const char units[] = "BKMGTPE"; + struct seq_file *m = st->seq; /* * If we have a "break" in the series, we need to flush the state that @@ -354,8 +356,8 @@ static inline pgprotval_t effective_prot(pgprotval_t prot1, pgprotval_t prot2) ((prot1 | prot2) & _PAGE_NX); } -static void walk_pte_level(struct seq_file *m, struct pg_state *st, pmd_t addr, - pgprotval_t eff_in, unsigned long P) +static void walk_pte_level(struct pg_state *st, pmd_t addr, pgprotval_t eff_in, + unsigned long P) { int i; pte_t *pte; @@ -366,7 +368,7 @@ static void walk_pte_level(struct seq_file *m, struct pg_state *st, pmd_t addr, pte = pte_offset_map(&addr, st->current_address); prot = pte_flags(*pte); eff = effective_prot(eff_in, prot); - note_page(m, st, __pgprot(prot), eff, 5); + note_page(st, __pgprot(prot), eff, 5); pte_unmap(pte); } } @@ -379,22 +381,20 @@ static void walk_pte_level(struct seq_file *m, struct pg_state *st, pmd_t addr, * us dozens of seconds (minutes for 5-level config) while checking for * W+X mapping or reading kernel_page_tables debugfs file. */ -static inline bool kasan_page_table(struct seq_file *m, struct pg_state *st, - void *pt) +static inline bool kasan_page_table(struct pg_state *st, void *pt) { if (__pa(pt) == __pa(kasan_early_shadow_pmd) || (pgtable_l5_enabled() && __pa(pt) == __pa(kasan_early_shadow_p4d)) || __pa(pt) == __pa(kasan_early_shadow_pud)) { pgprotval_t prot = pte_flags(kasan_early_shadow_pte[0]); - note_page(m, st, __pgprot(prot), 0, 5); + note_page(st, __pgprot(prot), 0, 5); return true; } return false; } #else -static inline bool kasan_page_table(struct seq_file *m, struct pg_state *st, - void *pt) +static inline bool kasan_page_table(struct pg_state *st, void *pt) { return false; } @@ -402,7 +402,7 @@ static inline bool kasan_page_table(struct seq_file *m, struct pg_state *st, #if PTRS_PER_PMD > 1 -static void walk_pmd_level(struct seq_file *m, struct pg_state *st, pud_t addr, +static void walk_pmd_level(struct pg_state *st, pud_t addr, pgprotval_t eff_in, unsigned long P) { int i; @@ -416,27 +416,27 @@ static void walk_pmd_level(struct seq_file *m, struct pg_state *st, pud_t addr, prot = pmd_flags(*start); eff = effective_prot(eff_in, prot); if (pmd_large(*start) || !pmd_present(*start)) { - note_page(m, st, __pgprot(prot), eff, 4); - } else if (!kasan_page_table(m, st, pmd_start)) { - walk_pte_level(m, st, *start, eff, + note_page(st, __pgprot(prot), eff, 4); + } else if (!kasan_page_table(st, pmd_start)) { + walk_pte_level(st, *start, eff, P + i * PMD_LEVEL_MULT); } } else - note_page(m, st, __pgprot(0), 0, 4); + note_page(st, __pgprot(0), 0, 4); start++; } } #else -#define walk_pmd_level(m,s,a,e,p) walk_pte_level(m,s,__pmd(pud_val(a)),e,p) +#define walk_pmd_level(s,a,e,p) walk_pte_level(s,__pmd(pud_val(a)),e,p) #define pud_large(a) pmd_large(__pmd(pud_val(a))) #define pud_none(a) pmd_none(__pmd(pud_val(a))) #endif #if PTRS_PER_PUD > 1 -static void walk_pud_level(struct seq_file *m, struct pg_state *st, p4d_t addr, - pgprotval_t eff_in, unsigned long P) +static void walk_pud_level(struct pg_state *st, p4d_t addr, pgprotval_t eff_in, + unsigned long P) { int i; pud_t *start, *pud_start; @@ -450,33 +450,33 @@ static void walk_pud_level(struct seq_file *m, struct pg_state *st, p4d_t addr, prot = pud_flags(*start); eff = effective_prot(eff_in, prot); if (pud_large(*start) || !pud_present(*start)) { - note_page(m, st, __pgprot(prot), eff, 3); - } else if (!kasan_page_table(m, st, pud_start)) { - walk_pmd_level(m, st, *start, eff, + note_page(st, __pgprot(prot), eff, 3); + } else if (!kasan_page_table(st, pud_start)) { + walk_pmd_level(st, *start, eff, P + i * PUD_LEVEL_MULT); } } else - note_page(m, st, __pgprot(0), 0, 3); + note_page(st, __pgprot(0), 0, 3); start++; } } #else -#define walk_pud_level(m,s,a,e,p) walk_pmd_level(m,s,__pud(p4d_val(a)),e,p) +#define walk_pud_level(s,a,e,p) walk_pmd_level(s,__pud(p4d_val(a)),e,p) #define p4d_large(a) pud_large(__pud(p4d_val(a))) #define p4d_none(a) pud_none(__pud(p4d_val(a))) #endif -static void walk_p4d_level(struct seq_file *m, struct pg_state *st, pgd_t addr, - pgprotval_t eff_in, unsigned long P) +static void walk_p4d_level(struct pg_state *st, pgd_t addr, pgprotval_t eff_in, + unsigned long P) { int i; p4d_t *start, *p4d_start; pgprotval_t prot, eff; if (PTRS_PER_P4D == 1) - return walk_pud_level(m, st, __p4d(pgd_val(addr)), eff_in, P); + return walk_pud_level(st, __p4d(pgd_val(addr)), eff_in, P); p4d_start = start = (p4d_t *)pgd_page_vaddr(addr); @@ -486,13 +486,13 @@ static void walk_p4d_level(struct seq_file *m, struct pg_state *st, pgd_t addr, prot = p4d_flags(*start); eff = effective_prot(eff_in, prot); if (p4d_large(*start) || !p4d_present(*start)) { - note_page(m, st, __pgprot(prot), eff, 2); - } else if (!kasan_page_table(m, st, p4d_start)) { - walk_pud_level(m, st, *start, eff, + note_page(st, __pgprot(prot), eff, 2); + } else if (!kasan_page_table(st, p4d_start)) { + walk_pud_level(st, *start, eff, P + i * P4D_LEVEL_MULT); } } else - note_page(m, st, __pgprot(0), 0, 2); + note_page(st, __pgprot(0), 0, 2); start++; } @@ -529,6 +529,7 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd, } st.check_wx = checkwx; + st.seq = m; if (checkwx) st.wx_pages = 0; @@ -542,13 +543,13 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd, eff = prot; #endif if (pgd_large(*start) || !pgd_present(*start)) { - note_page(m, &st, __pgprot(prot), eff, 1); + note_page(&st, __pgprot(prot), eff, 1); } else { - walk_p4d_level(m, &st, *start, eff, + walk_p4d_level(&st, *start, eff, i * PGD_LEVEL_MULT); } } else - note_page(m, &st, __pgprot(0), 0, 1); + note_page(&st, __pgprot(0), 0, 1); cond_resched(); start++; @@ -556,7 +557,7 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd, /* Flush out the last page */ st.current_address = normalize_addr(PTRS_PER_PGD*PGD_LEVEL_MULT); - note_page(m, &st, __pgprot(0), 0, 0); + note_page(&st, __pgprot(0), 0, 0); if (!checkwx) return; if (st.wx_pages) From patchwork Wed Jul 31 15:45:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068467 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 663B713A0 for ; Wed, 31 Jul 2019 15:47:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5212B22362 for ; Wed, 31 Jul 2019 15:47:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4618D22A6F; Wed, 31 Jul 2019 15:47:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AC8B322B39 for ; Wed, 31 Jul 2019 15:47:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4402F8E0023; Wed, 31 Jul 2019 11:47:01 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 41A108E0003; Wed, 31 Jul 2019 11:47:01 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 307EA8E0023; Wed, 31 Jul 2019 11:47:01 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by kanga.kvack.org (Postfix) with ESMTP id D7AA88E0003 for ; Wed, 31 Jul 2019 11:47:00 -0400 (EDT) Received: by mail-ed1-f72.google.com with SMTP id b12so42619092ede.23 for ; Wed, 31 Jul 2019 08:47:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=maKVlbOyQye3qG0rXhjb4/gEvSCwsev433JyCg81uSU=; b=lemJFRzjSFgf8dVC0jjFDnfJmKYfUuxsVuEZ2cbgxuT37OefZ9gK63GYKhuM/fbKl6 cFP+jybZdqPAm6JIHLcdZHwoQHCUuhzxzcV/XEgAaWdUqg62jWTmdvv4nF21OxFdPDJ7 1/GjEsvJNRnLFjOiTrHxh4XeY+eON4tFWyBhzGYDfihbXjZW8M1cvDd5lUlHkeDXWhEP YLNXneiLCxDuCv1WFXEA9fAAEhDoxj9sqkj/4rvAyGmh0YOHWL8mkOHdGbTxOR5x4551 e98Jy9GSd5r5Pal+avwrJ8KVJLM1kNEGksUrmUQ/5XddHSqcDlL3jmD1H1sxhI9SOvHB hNFw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAWhTdGgnWmCM2cveJHmXX9pLJk0KJOm5yMg+v2xZe8DVMJvv4TQ Tjkq7GSnP7D0hxAFux1y0Bb03QL17GUoiinJFYiHpP/T+mqLNs4CGp/gyCP0pbo/L9U9uqVeB+o lxcupRza32emU064jfsCIRZGXhUZlOZeqBBA8fdzZSaX8nOASf7hD2vHm5h8Ad42dvQ== X-Received: by 2002:aa7:d404:: with SMTP id z4mr107674283edq.131.1564588020463; Wed, 31 Jul 2019 08:47:00 -0700 (PDT) X-Google-Smtp-Source: APXvYqztNfgH5FEglLW5dkCLT1t6LT/uXnWbfVfE2ttWaDEAi81r6EiKTrQYWeJQMVVSqq68L+ul X-Received: by 2002:aa7:d404:: with SMTP id z4mr107674221edq.131.1564588019658; Wed, 31 Jul 2019 08:46:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588019; cv=none; d=google.com; s=arc-20160816; b=yx1riLafVJwCUB1+pZaS+dw2aavU0aEkiHklNefsCHRgMyNPG9iVi/tGBsfH4BiP4L +rExnln382IwTIkuzJysVDJ5VvmFjNQJ7awYTuaUeLOtqnI/p+dGP+o5pebuLsf+a11u HUJRg0+2mUAm58FUrokeZWFD2qJy9DEBE8BIuYfBwfINbxPZWYEJK/mWmW7ubfgIRZhG ZNJA0R+lYNfmN8nLJMJvUlBKb2oE3buKB1tIRxWOhdxO8xPRRnnBiv19zL3Y483rfqB+ z+mFG3j2M4VXRW7oAWaqVSpFimbnJ3wNYg5xxuuj1J4PV9kGaPG8flP6Ut9h2dnnhqEc jMHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=maKVlbOyQye3qG0rXhjb4/gEvSCwsev433JyCg81uSU=; b=US8i8YqijX2vB65Lep/sLDt1WE5XFJGms1c32T1oY/9KWRqnw/WeEWKBIi80RtHZwg V8r10xH9WPeRUVJDlAsOFzpXd3143Hey7z7R6qcjCWIKIy+h0UWNh6zvdu2dATVGsuxR wnSFsl1xFVyDqV/ew2MQ3cu0v2thJdeqQxiiRxUqEcitDDcnCbclFAE1kzB+fRtg312T +yy76gKMt6ZGoNAo68vsfvaCmgI19MK1HOx8n5KQQYTm0uzuLu2SAczwZs1BLW0PunIn vnYLLWvhxhENUTJGJqNxXEnw++KHB+rCBLZ32NlsiBK65NlyAUVaBnOJ8c95yn3Bjp/C cHPw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id i20si18560008ejb.107.2019.07.31.08.46.59 for ; Wed, 31 Jul 2019 08:46:59 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BF05B1596; Wed, 31 Jul 2019 08:46:58 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 340B43F694; Wed, 31 Jul 2019 08:46:56 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 16/22] x86: mm+efi: Convert ptdump_walk_pgd_level() to take a mm_struct Date: Wed, 31 Jul 2019 16:45:57 +0100 Message-Id: <20190731154603.41797-17-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP To enable x86 to use the generic walk_page_range() function, the callers of ptdump_walk_pgd_level() need to pass an mm_struct rather than the raw pgd_t pointer. Luckily since commit 7e904a91bf60 ("efi: Use efi_mm in x86 as well as ARM") we now have an mm_struct for EFI on x86. Signed-off-by: Steven Price --- arch/x86/include/asm/pgtable.h | 2 +- arch/x86/mm/dump_pagetables.c | 4 ++-- arch/x86/platform/efi/efi_32.c | 2 +- arch/x86/platform/efi/efi_64.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 6986a451619e..1a2b469f6e75 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -29,7 +29,7 @@ extern pgd_t early_top_pgt[PTRS_PER_PGD]; int __init __early_make_pgtable(unsigned long address, pmdval_t pmd); -void ptdump_walk_pgd_level(struct seq_file *m, pgd_t *pgd); +void ptdump_walk_pgd_level(struct seq_file *m, struct mm_struct *mm); void ptdump_walk_pgd_level_debugfs(struct seq_file *m, pgd_t *pgd, bool user); void ptdump_walk_pgd_level_checkwx(void); void ptdump_walk_user_pgd_level_checkwx(void); diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index 4dc6f4df40af..24fe76325b31 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -567,9 +567,9 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd, pr_info("x86/mm: Checked W+X mappings: passed, no W+X pages found.\n"); } -void ptdump_walk_pgd_level(struct seq_file *m, pgd_t *pgd) +void ptdump_walk_pgd_level(struct seq_file *m, struct mm_struct *mm) { - ptdump_walk_pgd_level_core(m, pgd, false, true); + ptdump_walk_pgd_level_core(m, mm->pgd, false, true); } void ptdump_walk_pgd_level_debugfs(struct seq_file *m, pgd_t *pgd, bool user) diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c index 9959657127f4..1616074075c3 100644 --- a/arch/x86/platform/efi/efi_32.c +++ b/arch/x86/platform/efi/efi_32.c @@ -49,7 +49,7 @@ void efi_sync_low_kernel_mappings(void) {} void __init efi_dump_pagetable(void) { #ifdef CONFIG_EFI_PGT_DUMP - ptdump_walk_pgd_level(NULL, swapper_pg_dir); + ptdump_walk_pgd_level(NULL, &init_mm); #endif } diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c index 08ce8177c3af..3cb63cd369d6 100644 --- a/arch/x86/platform/efi/efi_64.c +++ b/arch/x86/platform/efi/efi_64.c @@ -614,9 +614,9 @@ void __init efi_dump_pagetable(void) { #ifdef CONFIG_EFI_PGT_DUMP if (efi_enabled(EFI_OLD_MEMMAP)) - ptdump_walk_pgd_level(NULL, swapper_pg_dir); + ptdump_walk_pgd_level(NULL, &init_mm); else - ptdump_walk_pgd_level(NULL, efi_mm.pgd); + ptdump_walk_pgd_level(NULL, &efi_mm); #endif } From patchwork Wed Jul 31 15:45:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068469 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5E7EA13A0 for ; Wed, 31 Jul 2019 15:47:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 49121212BE for ; Wed, 31 Jul 2019 15:47:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3CAA822A6F; Wed, 31 Jul 2019 15:47:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A583E212BE for ; Wed, 31 Jul 2019 15:47:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 26A0A8E0024; Wed, 31 Jul 2019 11:47:04 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 242978E0003; Wed, 31 Jul 2019 11:47:04 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 10BE08E0024; Wed, 31 Jul 2019 11:47:04 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by kanga.kvack.org (Postfix) with ESMTP id B5F828E0003 for ; Wed, 31 Jul 2019 11:47:03 -0400 (EDT) Received: by mail-ed1-f71.google.com with SMTP id z20so42703874edr.15 for ; Wed, 31 Jul 2019 08:47:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=S8UWoGAjbQzkRfJne+k52mUoFeIHKsUKT3qxB38cy7g=; b=a/uJ+FpCNDQhrWb57au5n+MmkM6+nDuZvHTduxSME/8IEppmEz0jLi1EEmRu+UeciN dTgo1Q1RDdoumQbhmzFEokM6uc/wpSXyS4M4sl5AqCMDKEKzpAX/dRLF2wM66ru9+fkG kgdg2BahZENzKJGy9qF6yZQPwpLJooHc3htirVGD16lR7nTzUJbQlY5C9LQhsAeLh388 bi8eru6uWjS89qdEOB/vREYhIuY8kLoYhygZSWT9GJhR+e8atULscbSLh3G7L3daTt5n 5CeBJebcnxB+88xDkissnpu83hsjdu49Kg/xWYFBmBy+DWZfvtyLvAUUH8CIwrJjg5kx aKCg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAW1tSsfp2lXS8XBGshPzIdjWcschmqUYDgaiUIZzDxr+b/3US5t ppDMc/UhXhF+/cefVnUFiP18he9JSEZyj8CKsc2JeyWh2vguIBtrbdiN1V1ucK4k3TbLSU0vHgx IRNH3gcjf3bfkhwWKf7M1UU5Nka/150bOU3sKDv96UAzzYvVemL8UbPiWOkaNfe+feQ== X-Received: by 2002:a17:906:7d12:: with SMTP id u18mr93462099ejo.24.1564588023320; Wed, 31 Jul 2019 08:47:03 -0700 (PDT) X-Google-Smtp-Source: APXvYqwqmghijKYNbHhIf9N/+HoEJB0x691sVDofzGIo5/8pgKlhm/YgToED1Bf5iBOXXvSqS7si X-Received: by 2002:a17:906:7d12:: with SMTP id u18mr93462044ejo.24.1564588022407; Wed, 31 Jul 2019 08:47:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588022; cv=none; d=google.com; s=arc-20160816; b=GpeIUoyj5l8+PzV9nyIU9zSj+9gVHmVpp+LRZzcBa7xXnm5CroQwfMvOAmX6I3n7DI +TrLzNCvZJRq+wJqtDP+LIuhop79XL9ozzW/DC/mN/JyqPrDbt7DCCYQREDiqyUbX8tk JgnEdJd74j0nqYGGkhnwpkeQw12i+XyyNwyUDEWN2E15QMgx9MQVj8D7LcBujTLdvFdL 5+0AMVjdiGTNsa9+A/iO9VoLIMA3zR+g4eqXgGyK8ilSt5t6BodxD5KMLZrNPIth7lsx 0Wi5cFqIxGpntKfDtLXkB1qZHkNhHa8bD89yPXE2ZhE0GKFfAUOU90LZEaUX61a6Uhkx gCcg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=S8UWoGAjbQzkRfJne+k52mUoFeIHKsUKT3qxB38cy7g=; b=vGDwnERgZAdlDVD+8Yii/Jw2MZN45MFZmhTDGAfqKyWFMgbBZQX6d6vC3unc5xyQf3 y8bQZeKruZ2Lpvcoe+pdQaMYa8T5R8TwKnF/0xdlgADZ0SmcWuHuloR7KwFimWIgn2OK gkFmx7mIsPvDV9i7GhSYyDr5OkzAYZ7M0Jdxg08iBp/tR4aiWTacMVlV2prnJtHbPFWl GIHt+hBYc1Bjj3mAiZhCrE3NckQWeqHXxew70+LIUTQs4LwDI30woBVN1Tzsf9sBOgeC 3IAyja7q9Ds9HyiqE0pOyvZbuOwRL8hhAVDq7akXPWQowJcaKg8rulWGvhklhvs7yRL6 /JQw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id f12si22860525edd.204.2019.07.31.08.47.02 for ; Wed, 31 Jul 2019 08:47:02 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8A2281570; Wed, 31 Jul 2019 08:47:01 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0131B3F694; Wed, 31 Jul 2019 08:46:58 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 17/22] x86: mm: Convert ptdump_walk_pgd_level_debugfs() to take an mm_struct Date: Wed, 31 Jul 2019 16:45:58 +0100 Message-Id: <20190731154603.41797-18-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP To enable x86 to use the generic walk_page_range() function, the callers of ptdump_walk_pgd_level_debugfs() need to pass in the mm_struct. This means that ptdump_walk_pgd_level_core() is now always passed a valid pgd, so drop the support for pgd==NULL. Signed-off-by: Steven Price --- arch/x86/include/asm/pgtable.h | 3 ++- arch/x86/mm/debug_pagetables.c | 8 ++++---- arch/x86/mm/dump_pagetables.c | 14 ++++++-------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 1a2b469f6e75..1b255987712e 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -30,7 +30,8 @@ extern pgd_t early_top_pgt[PTRS_PER_PGD]; int __init __early_make_pgtable(unsigned long address, pmdval_t pmd); void ptdump_walk_pgd_level(struct seq_file *m, struct mm_struct *mm); -void ptdump_walk_pgd_level_debugfs(struct seq_file *m, pgd_t *pgd, bool user); +void ptdump_walk_pgd_level_debugfs(struct seq_file *m, struct mm_struct *mm, + bool user); void ptdump_walk_pgd_level_checkwx(void); void ptdump_walk_user_pgd_level_checkwx(void); diff --git a/arch/x86/mm/debug_pagetables.c b/arch/x86/mm/debug_pagetables.c index 39001a401eff..d0efec713c6c 100644 --- a/arch/x86/mm/debug_pagetables.c +++ b/arch/x86/mm/debug_pagetables.c @@ -7,7 +7,7 @@ static int ptdump_show(struct seq_file *m, void *v) { - ptdump_walk_pgd_level_debugfs(m, NULL, false); + ptdump_walk_pgd_level_debugfs(m, &init_mm, false); return 0; } @@ -17,7 +17,7 @@ static int ptdump_curknl_show(struct seq_file *m, void *v) { if (current->mm->pgd) { down_read(¤t->mm->mmap_sem); - ptdump_walk_pgd_level_debugfs(m, current->mm->pgd, false); + ptdump_walk_pgd_level_debugfs(m, current->mm, false); up_read(¤t->mm->mmap_sem); } return 0; @@ -30,7 +30,7 @@ static int ptdump_curusr_show(struct seq_file *m, void *v) { if (current->mm->pgd) { down_read(¤t->mm->mmap_sem); - ptdump_walk_pgd_level_debugfs(m, current->mm->pgd, true); + ptdump_walk_pgd_level_debugfs(m, current->mm, true); up_read(¤t->mm->mmap_sem); } return 0; @@ -43,7 +43,7 @@ DEFINE_SHOW_ATTRIBUTE(ptdump_curusr); static int ptdump_efi_show(struct seq_file *m, void *v) { if (efi_mm.pgd) - ptdump_walk_pgd_level_debugfs(m, efi_mm.pgd, false); + ptdump_walk_pgd_level_debugfs(m, &efi_mm, false); return 0; } diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index 24fe76325b31..2f5f32f21f81 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -518,16 +518,12 @@ static inline bool is_hypervisor_range(int idx) static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd, bool checkwx, bool dmesg) { - pgd_t *start = INIT_PGD; + pgd_t *start = pgd; pgprotval_t prot, eff; int i; struct pg_state st = {}; - if (pgd) { - start = pgd; - st.to_dmesg = dmesg; - } - + st.to_dmesg = dmesg; st.check_wx = checkwx; st.seq = m; if (checkwx) @@ -572,8 +568,10 @@ void ptdump_walk_pgd_level(struct seq_file *m, struct mm_struct *mm) ptdump_walk_pgd_level_core(m, mm->pgd, false, true); } -void ptdump_walk_pgd_level_debugfs(struct seq_file *m, pgd_t *pgd, bool user) +void ptdump_walk_pgd_level_debugfs(struct seq_file *m, struct mm_struct *mm, + bool user) { + pgd_t *pgd = mm->pgd; #ifdef CONFIG_PAGE_TABLE_ISOLATION if (user && boot_cpu_has(X86_FEATURE_PTI)) pgd = kernel_to_user_pgdp(pgd); @@ -599,7 +597,7 @@ void ptdump_walk_user_pgd_level_checkwx(void) void ptdump_walk_pgd_level_checkwx(void) { - ptdump_walk_pgd_level_core(NULL, NULL, true, false); + ptdump_walk_pgd_level_core(NULL, INIT_PGD, true, false); } static int __init pt_dump_init(void) From patchwork Wed Jul 31 15:45:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068471 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7945E13A0 for ; Wed, 31 Jul 2019 15:47:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 66782228C9 for ; Wed, 31 Jul 2019 15:47:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5AACF22F3E; Wed, 31 Jul 2019 15:47:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C5CD4228C9 for ; Wed, 31 Jul 2019 15:47:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF2EB8E0025; Wed, 31 Jul 2019 11:47:06 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id CCADB8E0003; Wed, 31 Jul 2019 11:47:06 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B91E98E0025; Wed, 31 Jul 2019 11:47:06 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by kanga.kvack.org (Postfix) with ESMTP id 654688E0003 for ; Wed, 31 Jul 2019 11:47:06 -0400 (EDT) Received: by mail-ed1-f72.google.com with SMTP id y24so42733254edb.1 for ; Wed, 31 Jul 2019 08:47:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=0ZNi3wu57Zc9Md+8OEhjIzPPnSQp51CnLOM2RGWHFP8=; b=ExAtsk4lWP+VZEIGWxsUsiJQs5EbLPmUct6eipnh5KuuI8FCuyd/kmwsDqEahPdo5V N3qahli8AbVVh58kw8WL9Ac+3Jc98sEoSfT/Wr60mq0J0zUXbRzxX45G+YaDEFk/oOEZ Iz4rop48f5zIS/+T02fDvOKWoOxUf6/jnixEcGlZTfwY2lPSAnXlVoLHmTu3XXIpznso fnCOXVkDyDsYoVx8EEP7qiJkJuZldTj2k9AB3GVYoN2OIfPBx0mYkAeXPnwokime9T5p tqEvRt8xRUpXy/QvhCACfB0m07a8e1+xXKy/3LldXFBZRm0sH4GF9CkehcxMvpSZlo+x j2Xg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAWfO1d4sv3lY6q10lQTIuPW9/GQsEEPc95dOUuVMjoieuU/j7HC hnTx6AxZnVLI2IaF5c0ksvy87b9q/mwwgHTtSOeAVtpz0Kk7uLMFITImEXozWLclRaiI2lmQ302 5SCMfUfl9/c6qZmfkQu4sDdaeu+peDOrkhhVOMHqO/0PU+tCVOylO10cQ7u6LBpVYRg== X-Received: by 2002:a50:d7d0:: with SMTP id m16mr105538637edj.162.1564588025998; Wed, 31 Jul 2019 08:47:05 -0700 (PDT) X-Google-Smtp-Source: APXvYqwiIEkE1nFakMWdh567UME55ptXYkgFepJsVEjqQtysxicJiUkNKPC2JH1VVaXeGlSOWaCZ X-Received: by 2002:a50:d7d0:: with SMTP id m16mr105538575edj.162.1564588025190; Wed, 31 Jul 2019 08:47:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588025; cv=none; d=google.com; s=arc-20160816; b=oacGW36hIBCQwMWl/c8I2qVfLT++pTdFerT0Cb28i+0Zf9T1OmU0/I2l20S/R4pXaO EsM8d10OBSpaBS3ns7qw8FstM/v01/xxxIkdMgqaQjxsv8soL023cYmGBd/cszF1yt7y oNf8UUN+Uev2gH1K/UorYS8Q4k5Rbn9E/e/+nXtHYT7aiE3lFRWZJNk3Kf+K/gh7i2+3 ono2kKFGyqQG4TtCpiDJ0MKNz/kgj50h+EHuW+//1GB3j1dv6hGVahrBNVOdBYMdCF3x iw+krIUcybtpHMgn1GmEedHSigaGGLsMKGEY6gS9sycQy8fdjbIi+lnuAFTsSIg8v8ls P+EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=0ZNi3wu57Zc9Md+8OEhjIzPPnSQp51CnLOM2RGWHFP8=; b=hdbMRLzcLZXiXL+6E9r/c4iyMGFUwzQXp29FcZNCbUjnZiQf2Kr+0vCNe7t2ULuwHY aWBmAOVu3CVkaVyOddY5T78L3V8uc4V45bbVeEMZYsnqb2uvyf9/ZI0s9apNNN1KmCZc EudK+Op2sez7P/kzxGnWdj5+HRf+PuX6UYzIMJ0yyhSCIMgTnt8D5SBlKFEEI0ywTeDR iO/52PKavSyOF80jJSuNBComwR3vNaNQfyS9lADMfyjffnj+ZhSzxVDPT7/eRztDHEEx ns9l/wEuqu4v7EmWx+0HquazL+Rq29YEy9xz3n71z21y3TlQ4mx6VBkQ3mFoG7Amf/yN AmJA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id f13si21824472eda.21.2019.07.31.08.47.04 for ; Wed, 31 Jul 2019 08:47:05 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 56001344; Wed, 31 Jul 2019 08:47:04 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C0CF33F694; Wed, 31 Jul 2019 08:47:01 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 18/22] x86: mm: Convert ptdump_walk_pgd_level_core() to take an mm_struct Date: Wed, 31 Jul 2019 16:45:59 +0100 Message-Id: <20190731154603.41797-19-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP An mm_struct is needed to enable x86 to use of the generic walk_page_range() function. In the case of walking the user page tables (when CONFIG_PAGE_TABLE_ISOLATION is enabled), it is necessary to create a fake_mm structure because there isn't an mm_struct with a pointer to the pgd of the user page tables. This fake_mm structure is initialised with the minimum necessary for the generic page walk code. Signed-off-by: Steven Price --- arch/x86/mm/dump_pagetables.c | 36 ++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index 2f5f32f21f81..3632be89ec99 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -107,8 +107,6 @@ static struct addr_marker address_markers[] = { [END_OF_SPACE_NR] = { -1, NULL } }; -#define INIT_PGD ((pgd_t *) &init_top_pgt) - #else /* CONFIG_X86_64 */ enum address_markers_idx { @@ -143,8 +141,6 @@ static struct addr_marker address_markers[] = { [END_OF_SPACE_NR] = { -1, NULL } }; -#define INIT_PGD (swapper_pg_dir) - #endif /* !CONFIG_X86_64 */ /* Multipliers for offsets within the PTEs */ @@ -515,10 +511,10 @@ static inline bool is_hypervisor_range(int idx) #endif } -static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd, +static void ptdump_walk_pgd_level_core(struct seq_file *m, struct mm_struct *mm, bool checkwx, bool dmesg) { - pgd_t *start = pgd; + pgd_t *start = mm->pgd; pgprotval_t prot, eff; int i; struct pg_state st = {}; @@ -565,39 +561,49 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd, void ptdump_walk_pgd_level(struct seq_file *m, struct mm_struct *mm) { - ptdump_walk_pgd_level_core(m, mm->pgd, false, true); + ptdump_walk_pgd_level_core(m, mm, false, true); } +#ifdef CONFIG_PAGE_TABLE_ISOLATION +static void ptdump_walk_pgd_level_user_core(struct seq_file *m, + struct mm_struct *mm, + bool checkwx, bool dmesg) +{ + struct mm_struct fake_mm = { + .pgd = kernel_to_user_pgdp(mm->pgd) + }; + init_rwsem(&fake_mm.mmap_sem); + ptdump_walk_pgd_level_core(m, &fake_mm, checkwx, dmesg); +} +#endif + void ptdump_walk_pgd_level_debugfs(struct seq_file *m, struct mm_struct *mm, bool user) { - pgd_t *pgd = mm->pgd; #ifdef CONFIG_PAGE_TABLE_ISOLATION if (user && boot_cpu_has(X86_FEATURE_PTI)) - pgd = kernel_to_user_pgdp(pgd); + ptdump_walk_pgd_level_user_core(m, mm, false, false); + else #endif - ptdump_walk_pgd_level_core(m, pgd, false, false); + ptdump_walk_pgd_level_core(m, mm, false, false); } EXPORT_SYMBOL_GPL(ptdump_walk_pgd_level_debugfs); void ptdump_walk_user_pgd_level_checkwx(void) { #ifdef CONFIG_PAGE_TABLE_ISOLATION - pgd_t *pgd = INIT_PGD; - if (!(__supported_pte_mask & _PAGE_NX) || !boot_cpu_has(X86_FEATURE_PTI)) return; pr_info("x86/mm: Checking user space page tables\n"); - pgd = kernel_to_user_pgdp(pgd); - ptdump_walk_pgd_level_core(NULL, pgd, true, false); + ptdump_walk_pgd_level_user_core(NULL, &init_mm, true, false); #endif } void ptdump_walk_pgd_level_checkwx(void) { - ptdump_walk_pgd_level_core(NULL, INIT_PGD, true, false); + ptdump_walk_pgd_level_core(NULL, &init_mm, true, false); } static int __init pt_dump_init(void) From patchwork Wed Jul 31 15:46:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068473 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 104F813A0 for ; Wed, 31 Jul 2019 15:47:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F066422A6F for ; Wed, 31 Jul 2019 15:47:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E4A212623D; Wed, 31 Jul 2019 15:47:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 397A222B26 for ; Wed, 31 Jul 2019 15:47:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C56258E0027; Wed, 31 Jul 2019 11:47:09 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id BB96F8E0003; Wed, 31 Jul 2019 11:47:09 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A81648E0027; Wed, 31 Jul 2019 11:47:09 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by kanga.kvack.org (Postfix) with ESMTP id 53FAB8E0003 for ; Wed, 31 Jul 2019 11:47:09 -0400 (EDT) Received: by mail-ed1-f71.google.com with SMTP id o13so42689443edt.4 for ; Wed, 31 Jul 2019 08:47:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=r83NP4DGUKh+mGCDCmNnM30wzJ7ALCL9e17lMTyJP30=; b=TZZhdMc008FxAGVW/uuesVfgthBk5ADXy+5LWtGWfEXj5EI+yjf7gaZ2B7L0VRm6CN OA+6zA80Zwtwh4DurQKNOa/0JIqudHgeqdajVnOSiIYmqtmX1jczQox21mZcWpl1aoRC 28J3hV5rqhZT1TU7p0pvqoisA3ziMiGD0lM4IqMKuOLqW357DAsejdsyOHEFpLwC8Hbr +q4oXA+0dwinATUA4WHa8G6iwEpbmiX5NrlPqUE0pImb6g+UKKQ7OiktARvHPulhgeG2 M5/7/kjnGsAXGpsVG++F6MWx+sBHhdWYX7lXkKfBlyjU/2Ea2fibRoc4j4Eo3JxqxjhX mUXQ== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAX/ACQ6mTqgR+zNPFxcbufg7idxg5kgKZAfc6EKzBsWHlW9wgEu YKV5u3egsKq7dSY0xf6C9B8sDn5eTb3VdpBkq49sk9xIQKS4jyl7SBHtVy0OUISKwvCTxVYPO7b pmdqBqes+cKrZqXyl3xpBqrJBLZYB2YOF8SgcJhVtx8FCunoNBoOnHrFJaG1n6JeUzA== X-Received: by 2002:a50:d1c6:: with SMTP id i6mr106237907edg.110.1564588028884; Wed, 31 Jul 2019 08:47:08 -0700 (PDT) X-Google-Smtp-Source: APXvYqxJBaFpn1CmIGEwaqZ/5rtJ3cJihquCUtwdz1dvEKl985V0ZMMHMw/91CBeCfw4kEbuSUJ/ X-Received: by 2002:a50:d1c6:: with SMTP id i6mr106237841edg.110.1564588027964; Wed, 31 Jul 2019 08:47:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588027; cv=none; d=google.com; s=arc-20160816; b=G47NDS6loEkHZFkACWK2+peNUrkY7mI4cAv7JM5shO2Q0u9N5inYcpwGtj9aYOjXxE 7j+kE76w8RaUUZFpdXj/KUKIj/fniQPXQb5LCNDTDaUKw8fzJiSMzq2XpqSUi/NfDkyX OiNaLqUkdO88wZfnIrsCP93BZxeNkrsNUOvmjqjj5O5IxqHrlZ0OPG8+Lo7syVa3yajK Do1AAw6IR7HuGZF2SyD/3yMRgD5XOJINpirSXtoAMhArP/EsfavSh+aTpbfs+kMvOON9 xq9ULyXfvHL73ms9whne/DtbZ8MZEaLbVYvJNVAfndPQkNaoGUMNkjmLhxRVgBD/7MrE wLtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=r83NP4DGUKh+mGCDCmNnM30wzJ7ALCL9e17lMTyJP30=; b=ZEtzDRw/JSKZ4EYqn5XqPOETinzLPKpX9J3ez02c2uDhN2Px6wlB298lFhk0mTMLmo xGTYGNuScDRSRHirJ0k5RvDJBolmokiunpU1REN8GiIiGmXIfvKB0OGETzzzHekwTshb AmZueiIBEbkZFwmFqv7ae55/f0w+JxVmOiurJmnivyYcmR8c0Tfnrf7kte6Af6jYNdmK 5CPrlMjS2Rx/VJmoQhJcbKMN3Cxc2vGeVRCNDO2GE6FKCbOwavZfhNEtXK0Pu8saNvaX 5Uv6qH+E6EH3WpXBYIxhhXfyZWRdviEVqE/UWPoYpGCA2ZGR0hk2A/u3yncIrZavLTEd jQ7Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id c2si18661120ejm.100.2019.07.31.08.47.07 for ; Wed, 31 Jul 2019 08:47:07 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 20E0D1596; Wed, 31 Jul 2019 08:47:07 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8C3573F694; Wed, 31 Jul 2019 08:47:04 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 19/22] mm: Add generic ptdump Date: Wed, 31 Jul 2019 16:46:00 +0100 Message-Id: <20190731154603.41797-20-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP Add a generic version of page table dumping that architectures can opt-in to Signed-off-by: Steven Price --- include/linux/ptdump.h | 19 ++++++ mm/Kconfig.debug | 21 ++++++ mm/Makefile | 1 + mm/ptdump.c | 151 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 192 insertions(+) create mode 100644 include/linux/ptdump.h create mode 100644 mm/ptdump.c diff --git a/include/linux/ptdump.h b/include/linux/ptdump.h new file mode 100644 index 000000000000..eb8e78154be3 --- /dev/null +++ b/include/linux/ptdump.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef _LINUX_PTDUMP_H +#define _LINUX_PTDUMP_H + +struct ptdump_range { + unsigned long start; + unsigned long end; +}; + +struct ptdump_state { + void (*note_page)(struct ptdump_state *st, unsigned long addr, + int level, unsigned long val); + const struct ptdump_range *range; +}; + +void ptdump_walk_pgd(struct ptdump_state *st, struct mm_struct *mm); + +#endif /* _LINUX_PTDUMP_H */ diff --git a/mm/Kconfig.debug b/mm/Kconfig.debug index 82b6a20898bd..7ad939b7140f 100644 --- a/mm/Kconfig.debug +++ b/mm/Kconfig.debug @@ -115,3 +115,24 @@ config DEBUG_RODATA_TEST depends on STRICT_KERNEL_RWX ---help--- This option enables a testcase for the setting rodata read-only. + +config GENERIC_PTDUMP + bool + +config PTDUMP_CORE + bool + +config PTDUMP_DEBUGFS + bool "Export kernel pagetable layout to userspace via debugfs" + depends on DEBUG_KERNEL + depends on DEBUG_FS + depends on GENERIC_PTDUMP + select PTDUMP_CORE + help + Say Y here if you want to show the kernel pagetable layout in a + debugfs file. This information is only useful for kernel developers + who are working in architecture specific areas of the kernel. + It is probably not a good idea to enable this feature in a production + kernel. + + If in doubt, say N. diff --git a/mm/Makefile b/mm/Makefile index 338e528ad436..750a4c12d5da 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -104,3 +104,4 @@ obj-$(CONFIG_HARDENED_USERCOPY) += usercopy.o obj-$(CONFIG_PERCPU_STATS) += percpu-stats.o obj-$(CONFIG_HMM_MIRROR) += hmm.o obj-$(CONFIG_MEMFD_CREATE) += memfd.o +obj-$(CONFIG_PTDUMP_CORE) += ptdump.o diff --git a/mm/ptdump.c b/mm/ptdump.c new file mode 100644 index 000000000000..186af468d1a1 --- /dev/null +++ b/mm/ptdump.c @@ -0,0 +1,151 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include +#include +#include + +static int ptdump_pgd_entry(pgd_t *pgd, unsigned long addr, + unsigned long next, struct mm_walk *walk) +{ + struct ptdump_state *st = walk->private; + pgd_t val = READ_ONCE(*pgd); + + if (pgd_leaf(val)) + st->note_page(st, addr, 1, pgd_val(val)); + + return 0; +} + +static int ptdump_p4d_entry(p4d_t *p4d, unsigned long addr, + unsigned long next, struct mm_walk *walk) +{ + struct ptdump_state *st = walk->private; + p4d_t val = READ_ONCE(*p4d); + + if (p4d_leaf(val)) + st->note_page(st, addr, 2, p4d_val(val)); + + return 0; +} + +static int ptdump_pud_entry(pud_t *pud, unsigned long addr, + unsigned long next, struct mm_walk *walk) +{ + struct ptdump_state *st = walk->private; + pud_t val = READ_ONCE(*pud); + + if (pud_leaf(val)) + st->note_page(st, addr, 3, pud_val(val)); + + return 0; +} + +static int ptdump_pmd_entry(pmd_t *pmd, unsigned long addr, + unsigned long next, struct mm_walk *walk) +{ + struct ptdump_state *st = walk->private; + pmd_t val = READ_ONCE(*pmd); + + if (pmd_leaf(val)) + st->note_page(st, addr, 4, pmd_val(val)); + + return 0; +} + +static int ptdump_pte_entry(pte_t *pte, unsigned long addr, + unsigned long next, struct mm_walk *walk) +{ + struct ptdump_state *st = walk->private; + + st->note_page(st, addr, 5, pte_val(READ_ONCE(*pte))); + + return 0; +} + +#ifdef CONFIG_KASAN +/* + * This is an optimization for KASAN=y case. Since all kasan page tables + * eventually point to the kasan_early_shadow_page we could call note_page() + * right away without walking through lower level page tables. This saves + * us dozens of seconds (minutes for 5-level config) while checking for + * W+X mapping or reading kernel_page_tables debugfs file. + */ +static inline int note_kasan_page_table(struct mm_walk *walk, + unsigned long addr) +{ + struct ptdump_state *st = walk->private; + + st->note_page(st, addr, 5, pte_val(kasan_early_shadow_pte[0])); + return 1; +} + +static int ptdump_test_p4d(unsigned long addr, unsigned long next, + p4d_t *p4d, struct mm_walk *walk) +{ +#if CONFIG_PGTABLE_LEVELS > 4 + if (p4d == lm_alias(kasan_early_shadow_p4d)) + return note_kasan_page_table(walk, addr); +#endif + return 0; +} + +static int ptdump_test_pud(unsigned long addr, unsigned long next, + pud_t *pud, struct mm_walk *walk) +{ +#if CONFIG_PGTABLE_LEVELS > 3 + if (pud == lm_alias(kasan_early_shadow_pud)) + return note_kasan_page_table(walk, addr); +#endif + return 0; +} + +static int ptdump_test_pmd(unsigned long addr, unsigned long next, + pmd_t *pmd, struct mm_walk *walk) +{ +#if CONFIG_PGTABLE_LEVELS > 2 + if (pmd == lm_alias(kasan_early_shadow_pmd)) + return note_kasan_page_table(walk, addr); +#endif + return 0; +} +#endif /* CONFIG_KASAN */ + +static int ptdump_hole(unsigned long addr, unsigned long next, + int depth, struct mm_walk *walk) +{ + struct ptdump_state *st = walk->private; + + st->note_page(st, addr, depth + 1, 0); + + return 0; +} + +void ptdump_walk_pgd(struct ptdump_state *st, struct mm_struct *mm) +{ + struct mm_walk walk = { + .mm = mm, + .pgd_entry = ptdump_pgd_entry, + .p4d_entry = ptdump_p4d_entry, + .pud_entry = ptdump_pud_entry, + .pmd_entry = ptdump_pmd_entry, + .pte_entry = ptdump_pte_entry, +#ifdef CONFIG_KASAN + .test_p4d = ptdump_test_p4d, + .test_pud = ptdump_test_pud, + .test_pmd = ptdump_test_pmd, +#endif + .pte_hole = ptdump_hole, + .private = st + }; + const struct ptdump_range *range = st->range; + + down_read(&mm->mmap_sem); + while (range->start != range->end) { + walk_page_range(range->start, range->end, &walk); + range++; + } + up_read(&mm->mmap_sem); + + /* Flush out the last page */ + st->note_page(st, 0, 0, 0); +} From patchwork Wed Jul 31 15:46:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068475 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3665213A0 for ; Wed, 31 Jul 2019 15:47:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 223332228E for ; Wed, 31 Jul 2019 15:47:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 15C7C2623D; Wed, 31 Jul 2019 15:47:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D00332228E for ; Wed, 31 Jul 2019 15:47:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1F42E8E0029; Wed, 31 Jul 2019 11:47:13 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 1CDBC8E0003; Wed, 31 Jul 2019 11:47:13 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 06FEE8E0029; Wed, 31 Jul 2019 11:47:12 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id 9D4FD8E0003 for ; Wed, 31 Jul 2019 11:47:12 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id c31so42718894ede.5 for ; Wed, 31 Jul 2019 08:47:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=a+dMis3lNlOPxsX7i24nMwCCzO3kpJZxIOrVUwpRPfo=; b=YRzAysivGURIFTJW/dqaWKVc5gDKdZzlYFItOkIITq8zgbtj//P98VTHxgMhrqtNp2 izTXhV/ceBoWbjPJSW6W/TBqb1qIFo+OWptJSnFOGoZunI7azl2jZEvoB+Wn4ncGHxhv /WVNtRuaXIvhxvEN0rtkehOpTZveJrMiMQ9aBHhvBWqZRe1NRIWTUUvpTT4YNbE7yaJE XluSRPUieWlFUc0v5xnIGRm4gNRMgu3yTF68TqxOwir2EC/e1w23H0T9r650OVIDht/6 sO+WeSNF9eHZ2ud2dMG+Gk3NG9FXQKrsvs6HvfHOzXdte2O4CmlEltLZ5Z6sBxbGiwwE BRyQ== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAWJeonJ0xBKUCbZ+ANrKPpNCO9EhvvM8+Fj73trCSorqjQsBDkY CX350OdWEO+4ks4x3f+0QmVYpCHY5yoNJ3yrsnqr/lX8CGvXMCB+Tx8MWjbKnFO8yAJqOkQxESh a/HZJYAUn1axmRbDR7YJlICsTSPt/8WQ2hY4htxiduE7zb1W0OMnvAQvdiP6j/oFK3Q== X-Received: by 2002:a50:a56d:: with SMTP id z42mr6368754edb.241.1564588032179; Wed, 31 Jul 2019 08:47:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqySzOchh+809bqFdyi3vZ8o6uCLVHYHOrU0O9CpmisfOnLTcvKFFJA0IjBDNMep9nw2mxk+ X-Received: by 2002:a50:a56d:: with SMTP id z42mr6368640edb.241.1564588030872; Wed, 31 Jul 2019 08:47:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588030; cv=none; d=google.com; s=arc-20160816; b=Vj/xTOnU9LOVtqw66lF8zWhQamXGD1T+eBhgIYXvJrDRbLzOD5jdn0joj3sKCrMMg0 UcylcHhjnm/KnDlGr/gPVVjtKoBQ/NGSFHrwO24xz2X2Tm8XTlPMTSsbTnan57QzIv4r ssWJ29yYFIvQYQholsM6DUzhqDqU8ZrMaxY4Geya5ojPr4AL5+gl8G4RJ2TrdZnvyRm/ IatM7SJjkr5o9f+Vvu7+scZjAUgh6QiFNaa2ym+HrTH1Nag0D7xjbawsGuCjW4nOrvXy 5Nq8rfCLv1c155V+0IXeXH3LESsdlDmYeuyj475L9xT9k6XM/QC9fIKH18ZJ4Hz69+1q 8PCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=a+dMis3lNlOPxsX7i24nMwCCzO3kpJZxIOrVUwpRPfo=; b=RUZzSnUn9U4MYmzVCH6YaOqFBrFyHKIBdVsmwZswLY3WiorLQGoBaU3z5DaCTH/XeX bBsv9ieGwi+QlFFT65lg4R2X8HtNXqtGfkr7t4Fc4zLHLgbh0yU/iI86xvdhJnmG2Jqr 5+nlTlGNreVyXR0MuW4kuYNfa0BbOtp2bbGdqq3KS5RUqe02Sy3vA8CaofRZ10GpRa79 994xQpuzxCGLvE1VVZj2hvvVVArCAswDV2vgkfmnnBuT1t1dG1m+RJ7qhWhodwEZh9vp KMzI7Jrx84ARIFOGKtgDvEBipimlBji6BLdMpLb9rs3d52MXBmdUVGLg0SnyzTAOVuOY icHA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id r54si21468907eda.172.2019.07.31.08.47.10 for ; Wed, 31 Jul 2019 08:47:10 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E21F41570; Wed, 31 Jul 2019 08:47:09 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 574BA3F694; Wed, 31 Jul 2019 08:47:07 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 20/22] x86: mm: Convert dump_pagetables to use walk_page_range Date: Wed, 31 Jul 2019 16:46:01 +0100 Message-Id: <20190731154603.41797-21-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP Make use of the new functionality in walk_page_range to remove the arch page walking code and use the generic code to walk the page tables. The effective permissions are passed down the chain using new fields in struct pg_state. The KASAN optimisation is implemented by including test_p?d callbacks which can decide to skip an entire tree of entries Signed-off-by: Steven Price --- arch/x86/Kconfig | 1 + arch/x86/Kconfig.debug | 20 +-- arch/x86/mm/Makefile | 4 +- arch/x86/mm/dump_pagetables.c | 285 +++++++--------------------------- 4 files changed, 64 insertions(+), 246 deletions(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 222855cc0158..76beeec13c27 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -119,6 +119,7 @@ config X86 select GENERIC_IRQ_RESERVATION_MODE select GENERIC_IRQ_SHOW select GENERIC_PENDING_IRQ if SMP + select GENERIC_PTDUMP select GENERIC_SMP_IDLE_THREAD select GENERIC_STRNCPY_FROM_USER select GENERIC_STRNLEN_USER diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug index 71c92db47c41..ca4ee374e685 100644 --- a/arch/x86/Kconfig.debug +++ b/arch/x86/Kconfig.debug @@ -62,26 +62,10 @@ config EARLY_PRINTK_USB_XDBC config MCSAFE_TEST def_bool n -config X86_PTDUMP_CORE - def_bool n - -config X86_PTDUMP - tristate "Export kernel pagetable layout to userspace via debugfs" - depends on DEBUG_KERNEL - select DEBUG_FS - select X86_PTDUMP_CORE - ---help--- - Say Y here if you want to show the kernel pagetable layout in a - debugfs file. This information is only useful for kernel developers - who are working in architecture specific areas of the kernel. - It is probably not a good idea to enable this feature in a production - kernel. - If in doubt, say "N" - config EFI_PGT_DUMP bool "Dump the EFI pagetable" depends on EFI - select X86_PTDUMP_CORE + select PTDUMP_CORE ---help--- Enable this if you want to dump the EFI page table before enabling virtual mode. This can be used to debug miscellaneous @@ -90,7 +74,7 @@ config EFI_PGT_DUMP config DEBUG_WX bool "Warn on W+X mappings at boot" - select X86_PTDUMP_CORE + select PTDUMP_CORE ---help--- Generate a warning if any W+X mappings are found at boot. diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile index 84373dc9b341..66cf0ea5c2be 100644 --- a/arch/x86/mm/Makefile +++ b/arch/x86/mm/Makefile @@ -28,8 +28,8 @@ obj-$(CONFIG_X86_PAT) += pat_rbtree.o obj-$(CONFIG_X86_32) += pgtable_32.o iomap_32.o obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o -obj-$(CONFIG_X86_PTDUMP_CORE) += dump_pagetables.o -obj-$(CONFIG_X86_PTDUMP) += debug_pagetables.o +obj-$(CONFIG_PTDUMP_CORE) += dump_pagetables.o +obj-$(CONFIG_PTDUMP_DEBUGFS) += debug_pagetables.o obj-$(CONFIG_HIGHMEM) += highmem_32.o diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index 3632be89ec99..998c7f46763c 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -26,11 +27,12 @@ * when a "break" in the continuity is found. */ struct pg_state { + struct ptdump_state ptdump; int level; - pgprot_t current_prot; + pgprotval_t current_prot; pgprotval_t effective_prot; + pgprotval_t prot_levels[5]; unsigned long start_address; - unsigned long current_address; const struct addr_marker *marker; unsigned long lines; bool to_dmesg; @@ -171,9 +173,8 @@ static struct addr_marker address_markers[] = { /* * Print a readable form of a pgprot_t to the seq_file */ -static void printk_prot(struct seq_file *m, pgprot_t prot, int level, bool dmsg) +static void printk_prot(struct seq_file *m, pgprotval_t pr, int level, bool dmsg) { - pgprotval_t pr = pgprot_val(prot); static const char * const level_name[] = { "cr3", "pgd", "p4d", "pud", "pmd", "pte" }; @@ -220,24 +221,11 @@ static void printk_prot(struct seq_file *m, pgprot_t prot, int level, bool dmsg) pt_dump_cont_printf(m, dmsg, "%s\n", level_name[level]); } -/* - * On 64 bits, sign-extend the 48 bit address to 64 bit - */ -static unsigned long normalize_addr(unsigned long u) -{ - int shift; - if (!IS_ENABLED(CONFIG_X86_64)) - return u; - - shift = 64 - (__VIRTUAL_MASK_SHIFT + 1); - return (signed long)(u << shift) >> shift; -} - -static void note_wx(struct pg_state *st) +static void note_wx(struct pg_state *st, unsigned long addr) { unsigned long npages; - npages = (st->current_address - st->start_address) / PAGE_SIZE; + npages = (addr - st->start_address) / PAGE_SIZE; #ifdef CONFIG_PCI_BIOS /* @@ -245,7 +233,7 @@ static void note_wx(struct pg_state *st) * Inform about it, but avoid the warning. */ if (pcibios_enabled && st->start_address >= PAGE_OFFSET + BIOS_BEGIN && - st->current_address <= PAGE_OFFSET + BIOS_END) { + addr <= PAGE_OFFSET + BIOS_END) { pr_warn_once("x86/mm: PCI BIOS W+X mapping %lu pages\n", npages); return; } @@ -257,25 +245,44 @@ static void note_wx(struct pg_state *st) (void *)st->start_address); } +static inline pgprotval_t effective_prot(pgprotval_t prot1, pgprotval_t prot2) +{ + return (prot1 & prot2 & (_PAGE_USER | _PAGE_RW)) | + ((prot1 | prot2) & _PAGE_NX); +} + /* * This function gets called on a break in a continuous series * of PTE entries; the next one is different so we need to * print what we collected so far. */ -static void note_page(struct pg_state *st, pgprot_t new_prot, - pgprotval_t new_eff, int level) +static void note_page(struct ptdump_state *pt_st, unsigned long addr, int level, + unsigned long val) { - pgprotval_t prot, cur, eff; + struct pg_state *st = container_of(pt_st, struct pg_state, ptdump); + pgprotval_t new_prot, new_eff; + pgprotval_t cur, eff; static const char units[] = "BKMGTPE"; struct seq_file *m = st->seq; + new_prot = val & PTE_FLAGS_MASK; + + if (level > 1) { + new_eff = effective_prot(st->prot_levels[level - 2], + new_prot); + } else { + new_eff = new_prot; + } + + if (level > 0) + st->prot_levels[level-1] = new_eff; + /* * If we have a "break" in the series, we need to flush the state that * we have now. "break" is either changing perms, levels or * address space marker. */ - prot = pgprot_val(new_prot); - cur = pgprot_val(st->current_prot); + cur = st->current_prot; eff = st->effective_prot; if (!st->level) { @@ -287,14 +294,14 @@ static void note_page(struct pg_state *st, pgprot_t new_prot, st->lines = 0; pt_dump_seq_printf(m, st->to_dmesg, "---[ %s ]---\n", st->marker->name); - } else if (prot != cur || new_eff != eff || level != st->level || - st->current_address >= st->marker[1].start_address) { + } else if (new_prot != cur || new_eff != eff || level != st->level || + addr >= st->marker[1].start_address) { const char *unit = units; unsigned long delta; int width = sizeof(unsigned long) * 2; if (st->check_wx && (eff & _PAGE_RW) && !(eff & _PAGE_NX)) - note_wx(st); + note_wx(st, addr); /* * Now print the actual finished series @@ -304,9 +311,9 @@ static void note_page(struct pg_state *st, pgprot_t new_prot, pt_dump_seq_printf(m, st->to_dmesg, "0x%0*lx-0x%0*lx ", width, st->start_address, - width, st->current_address); + width, addr); - delta = st->current_address - st->start_address; + delta = addr - st->start_address; while (!(delta & 1023) && unit[1]) { delta >>= 10; unit++; @@ -323,7 +330,7 @@ static void note_page(struct pg_state *st, pgprot_t new_prot, * such as the start of vmalloc space etc. * This helps in the interpretation. */ - if (st->current_address >= st->marker[1].start_address) { + if (addr >= st->marker[1].start_address) { if (st->marker->max_lines && st->lines > st->marker->max_lines) { unsigned long nskip = @@ -339,217 +346,43 @@ static void note_page(struct pg_state *st, pgprot_t new_prot, st->marker->name); } - st->start_address = st->current_address; + st->start_address = addr; st->current_prot = new_prot; st->effective_prot = new_eff; st->level = level; } } -static inline pgprotval_t effective_prot(pgprotval_t prot1, pgprotval_t prot2) -{ - return (prot1 & prot2 & (_PAGE_USER | _PAGE_RW)) | - ((prot1 | prot2) & _PAGE_NX); -} - -static void walk_pte_level(struct pg_state *st, pmd_t addr, pgprotval_t eff_in, - unsigned long P) -{ - int i; - pte_t *pte; - pgprotval_t prot, eff; - - for (i = 0; i < PTRS_PER_PTE; i++) { - st->current_address = normalize_addr(P + i * PTE_LEVEL_MULT); - pte = pte_offset_map(&addr, st->current_address); - prot = pte_flags(*pte); - eff = effective_prot(eff_in, prot); - note_page(st, __pgprot(prot), eff, 5); - pte_unmap(pte); - } -} -#ifdef CONFIG_KASAN - -/* - * This is an optimization for KASAN=y case. Since all kasan page tables - * eventually point to the kasan_early_shadow_page we could call note_page() - * right away without walking through lower level page tables. This saves - * us dozens of seconds (minutes for 5-level config) while checking for - * W+X mapping or reading kernel_page_tables debugfs file. - */ -static inline bool kasan_page_table(struct pg_state *st, void *pt) -{ - if (__pa(pt) == __pa(kasan_early_shadow_pmd) || - (pgtable_l5_enabled() && - __pa(pt) == __pa(kasan_early_shadow_p4d)) || - __pa(pt) == __pa(kasan_early_shadow_pud)) { - pgprotval_t prot = pte_flags(kasan_early_shadow_pte[0]); - note_page(st, __pgprot(prot), 0, 5); - return true; - } - return false; -} -#else -static inline bool kasan_page_table(struct pg_state *st, void *pt) -{ - return false; -} -#endif - -#if PTRS_PER_PMD > 1 - -static void walk_pmd_level(struct pg_state *st, pud_t addr, - pgprotval_t eff_in, unsigned long P) -{ - int i; - pmd_t *start, *pmd_start; - pgprotval_t prot, eff; - - pmd_start = start = (pmd_t *)pud_page_vaddr(addr); - for (i = 0; i < PTRS_PER_PMD; i++) { - st->current_address = normalize_addr(P + i * PMD_LEVEL_MULT); - if (!pmd_none(*start)) { - prot = pmd_flags(*start); - eff = effective_prot(eff_in, prot); - if (pmd_large(*start) || !pmd_present(*start)) { - note_page(st, __pgprot(prot), eff, 4); - } else if (!kasan_page_table(st, pmd_start)) { - walk_pte_level(st, *start, eff, - P + i * PMD_LEVEL_MULT); - } - } else - note_page(st, __pgprot(0), 0, 4); - start++; - } -} - -#else -#define walk_pmd_level(s,a,e,p) walk_pte_level(s,__pmd(pud_val(a)),e,p) -#define pud_large(a) pmd_large(__pmd(pud_val(a))) -#define pud_none(a) pmd_none(__pmd(pud_val(a))) -#endif - -#if PTRS_PER_PUD > 1 - -static void walk_pud_level(struct pg_state *st, p4d_t addr, pgprotval_t eff_in, - unsigned long P) -{ - int i; - pud_t *start, *pud_start; - pgprotval_t prot, eff; - - pud_start = start = (pud_t *)p4d_page_vaddr(addr); - - for (i = 0; i < PTRS_PER_PUD; i++) { - st->current_address = normalize_addr(P + i * PUD_LEVEL_MULT); - if (!pud_none(*start)) { - prot = pud_flags(*start); - eff = effective_prot(eff_in, prot); - if (pud_large(*start) || !pud_present(*start)) { - note_page(st, __pgprot(prot), eff, 3); - } else if (!kasan_page_table(st, pud_start)) { - walk_pmd_level(st, *start, eff, - P + i * PUD_LEVEL_MULT); - } - } else - note_page(st, __pgprot(0), 0, 3); - - start++; - } -} - -#else -#define walk_pud_level(s,a,e,p) walk_pmd_level(s,__pud(p4d_val(a)),e,p) -#define p4d_large(a) pud_large(__pud(p4d_val(a))) -#define p4d_none(a) pud_none(__pud(p4d_val(a))) -#endif - -static void walk_p4d_level(struct pg_state *st, pgd_t addr, pgprotval_t eff_in, - unsigned long P) -{ - int i; - p4d_t *start, *p4d_start; - pgprotval_t prot, eff; - - if (PTRS_PER_P4D == 1) - return walk_pud_level(st, __p4d(pgd_val(addr)), eff_in, P); - - p4d_start = start = (p4d_t *)pgd_page_vaddr(addr); - - for (i = 0; i < PTRS_PER_P4D; i++) { - st->current_address = normalize_addr(P + i * P4D_LEVEL_MULT); - if (!p4d_none(*start)) { - prot = p4d_flags(*start); - eff = effective_prot(eff_in, prot); - if (p4d_large(*start) || !p4d_present(*start)) { - note_page(st, __pgprot(prot), eff, 2); - } else if (!kasan_page_table(st, p4d_start)) { - walk_pud_level(st, *start, eff, - P + i * P4D_LEVEL_MULT); - } - } else - note_page(st, __pgprot(0), 0, 2); - - start++; - } -} +static const struct ptdump_range ptdump_ranges[] = { +#ifdef CONFIG_X86_64 -#define pgd_large(a) (pgtable_l5_enabled() ? pgd_large(a) : p4d_large(__p4d(pgd_val(a)))) -#define pgd_none(a) (pgtable_l5_enabled() ? pgd_none(a) : p4d_none(__p4d(pgd_val(a)))) +#define normalize_addr_shift (64 - (__VIRTUAL_MASK_SHIFT + 1)) +#define normalize_addr(u) ((signed long)(u << normalize_addr_shift) \ + >> normalize_addr_shift) -static inline bool is_hypervisor_range(int idx) -{ -#ifdef CONFIG_X86_64 - /* - * A hole in the beginning of kernel address space reserved - * for a hypervisor. - */ - return (idx >= pgd_index(GUARD_HOLE_BASE_ADDR)) && - (idx < pgd_index(GUARD_HOLE_END_ADDR)); + {0, PTRS_PER_PGD * PGD_LEVEL_MULT / 2}, + {normalize_addr(PTRS_PER_PGD * PGD_LEVEL_MULT / 2), ~0UL}, #else - return false; + {0, ~0UL}, #endif -} + {0, 0} +}; static void ptdump_walk_pgd_level_core(struct seq_file *m, struct mm_struct *mm, bool checkwx, bool dmesg) { - pgd_t *start = mm->pgd; - pgprotval_t prot, eff; - int i; - struct pg_state st = {}; - - st.to_dmesg = dmesg; - st.check_wx = checkwx; - st.seq = m; - if (checkwx) - st.wx_pages = 0; - - for (i = 0; i < PTRS_PER_PGD; i++) { - st.current_address = normalize_addr(i * PGD_LEVEL_MULT); - if (!pgd_none(*start) && !is_hypervisor_range(i)) { - prot = pgd_flags(*start); -#ifdef CONFIG_X86_PAE - eff = _PAGE_USER | _PAGE_RW; -#else - eff = prot; -#endif - if (pgd_large(*start) || !pgd_present(*start)) { - note_page(&st, __pgprot(prot), eff, 1); - } else { - walk_p4d_level(&st, *start, eff, - i * PGD_LEVEL_MULT); - } - } else - note_page(&st, __pgprot(0), 0, 1); + struct pg_state st = { + .ptdump = { + .note_page = note_page, + .range = ptdump_ranges + }, + .to_dmesg = dmesg, + .check_wx = checkwx, + .seq = m + }; - cond_resched(); - start++; - } + ptdump_walk_pgd(&st.ptdump, mm); - /* Flush out the last page */ - st.current_address = normalize_addr(PTRS_PER_PGD*PGD_LEVEL_MULT); - note_page(&st, __pgprot(0), 0, 0); if (!checkwx) return; if (st.wx_pages) From patchwork Wed Jul 31 15:46:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068479 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1F6131399 for ; Wed, 31 Jul 2019 15:47:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 086322624C for ; Wed, 31 Jul 2019 15:47:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F0A062624D; Wed, 31 Jul 2019 15:47:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CF7B9228C9 for ; Wed, 31 Jul 2019 15:47:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BE07F8E002E; Wed, 31 Jul 2019 11:47:15 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id B92528E0003; Wed, 31 Jul 2019 11:47:15 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 91FBD8E002E; Wed, 31 Jul 2019 11:47:15 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by kanga.kvack.org (Postfix) with ESMTP id 3C2BC8E0003 for ; Wed, 31 Jul 2019 11:47:15 -0400 (EDT) Received: by mail-ed1-f72.google.com with SMTP id e9so31543077edv.18 for ; Wed, 31 Jul 2019 08:47:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Tw4jEDZ4CrtR6AkFxGso+mamrW+YV+8R26O5CKGhn+M=; b=ekqThMY+ZrrvmRbT2X4LUKxm6YyjiZncbyK6N6JogiQOG0xKcDnJo4OHWiENYRtlOF qhLQSXCHI/KqDGNlCC90I+skihNPQAxf3VOBozgEslBVLpzNngetc0ikrvEztb3tFH8x SwxdK7eVM4L+sXVWcVvNEKJOdF4gbsJG38mnV7RCTKKZXtVtK32u8LjfXVMW7fU9OccG XCZa0AAGDaNre4xPZrfu2I43dm/w24spy4hGgeWquXuXF/0SmtBr3sjDCgT6Hj7EiRp0 eRon6/U5YYSBqTlD73Qsn+s4o3lg0fwpYKOsmes+wcOiHaMgSO9RB9Y4agO2i0cIr36L RC1Q== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAXnpn2z+skyhcUnxsNICW2uXSlb5M8rop6Xbv/VqCFy/sr83lz/ p56eRnUfja5Tt2rWz0ztXOkhny3nwecXzXx26HwlKA3ORtZcKdvT7e2dpWq5Detfv/UOadexzBV VgTxdigvEzHuMpxrcDGbn1khpBLznmIbgdZsTRjSlNPqXmH5f+oEVzMt3HIgCVi0ZRg== X-Received: by 2002:a17:906:2ecc:: with SMTP id s12mr43277028eji.110.1564588034769; Wed, 31 Jul 2019 08:47:14 -0700 (PDT) X-Google-Smtp-Source: APXvYqxe6M9/OuB+tBhdzE/Gf6VDhaD1OVSA0jK+E/r2FRKNYFc1/i3jZK+gmnoXIj/Pn7xy0uaw X-Received: by 2002:a17:906:2ecc:: with SMTP id s12mr43276950eji.110.1564588033545; Wed, 31 Jul 2019 08:47:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588033; cv=none; d=google.com; s=arc-20160816; b=HBURMZo34Y1txMiz1HV2UHLdOo/c6k0K64sB9ixTAq9ohniaMf1Rvfj5WXCn9bmwc9 ZBl0VE3ne7EZcUMGNhDmL1u+lgC4X/3kryHaC0Fd33FAsrc0C4BbgQW1bKNtR5Q0CYBh msHg7u4vMHQDRUVzGsxq2+XJGmok1yFN+HF89OQfhAheZog+2qa1M2wXE/qLay5H84cr 4Lhv3wunz2zKPJKiHvW9cLIdWlO7TvWA6KFjdsJFp7nN6y9Bck4LbmdhLKdCSV2vg95C OGlVWOgEl7R8OSo7SzOEyAA0eR8ko+6ZPXF2jaYxLlrVl12XOzj1raugWysfFueeUK+7 5bAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=Tw4jEDZ4CrtR6AkFxGso+mamrW+YV+8R26O5CKGhn+M=; b=XW27last1bXq1o8aJ/9bIxtc+t6T9nzjk9RsxyZL5wmBExzyotRrduZb+5a/me4hpg 0Jb8sL4F04uEAhCcYEftIXX0m1FohxgGgcVfmKUeAW+dbeq3DUA0qFFlvSxLSVQ+h3F9 h1LYLmtI0fP+6vyuSBzW0bnJTqybV9mIYUApkUFQsPq+EL23lvleVNZ+77fLcw1JQhlL 6USslcNTJVXXlB58XjG2z97mwIiDjAd6Et+lza58BYWhh4qW3XGiyqoSnjESMKTls/Dy 0lzSuf2lYWjEuOnHM+/RbmW94pFst+TU2Dx0QswFxti+8RB1VSJwVzjMC4M4ljyfwAMi h08g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id k5si18575251ejp.230.2019.07.31.08.47.13 for ; Wed, 31 Jul 2019 08:47:13 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id ADABC344; Wed, 31 Jul 2019 08:47:12 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 244843F694; Wed, 31 Jul 2019 08:47:10 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 21/22] arm64: mm: Convert mm/dump.c to use walk_page_range() Date: Wed, 31 Jul 2019 16:46:02 +0100 Message-Id: <20190731154603.41797-22-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP Now walk_page_range() can walk kernel page tables, we can switch the arm64 ptdump code over to using it, simplifying the code. Signed-off-by: Steven Price --- arch/arm64/Kconfig | 1 + arch/arm64/Kconfig.debug | 19 +---- arch/arm64/include/asm/ptdump.h | 8 +- arch/arm64/mm/Makefile | 4 +- arch/arm64/mm/dump.c | 117 ++++++++++------------------- arch/arm64/mm/mmu.c | 4 +- arch/arm64/mm/ptdump_debugfs.c | 2 +- drivers/firmware/efi/arm-runtime.c | 2 +- 8 files changed, 50 insertions(+), 107 deletions(-) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 3adcec05b1f6..5a32c87f37c6 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -105,6 +105,7 @@ config ARM64 select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW_LEVEL select GENERIC_PCI_IOMAP + select GENERIC_PTDUMP select GENERIC_SCHED_CLOCK select GENERIC_SMP_IDLE_THREAD select GENERIC_STRNCPY_FROM_USER diff --git a/arch/arm64/Kconfig.debug b/arch/arm64/Kconfig.debug index cf09010d825f..1c906d932d6b 100644 --- a/arch/arm64/Kconfig.debug +++ b/arch/arm64/Kconfig.debug @@ -1,22 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only -config ARM64_PTDUMP_CORE - def_bool n - -config ARM64_PTDUMP_DEBUGFS - bool "Export kernel pagetable layout to userspace via debugfs" - depends on DEBUG_KERNEL - select ARM64_PTDUMP_CORE - select DEBUG_FS - help - Say Y here if you want to show the kernel pagetable layout in a - debugfs file. This information is only useful for kernel developers - who are working in architecture specific areas of the kernel. - It is probably not a good idea to enable this feature in a production - kernel. - - If in doubt, say N. - config PID_IN_CONTEXTIDR bool "Write the current PID to the CONTEXTIDR register" help @@ -42,7 +25,7 @@ config ARM64_RANDOMIZE_TEXT_OFFSET config DEBUG_WX bool "Warn on W+X mappings at boot" - select ARM64_PTDUMP_CORE + select PTDUMP_CORE ---help--- Generate a warning if any W+X mappings are found at boot. diff --git a/arch/arm64/include/asm/ptdump.h b/arch/arm64/include/asm/ptdump.h index 0b8e7269ec82..38187f74e089 100644 --- a/arch/arm64/include/asm/ptdump.h +++ b/arch/arm64/include/asm/ptdump.h @@ -5,7 +5,7 @@ #ifndef __ASM_PTDUMP_H #define __ASM_PTDUMP_H -#ifdef CONFIG_ARM64_PTDUMP_CORE +#ifdef CONFIG_PTDUMP_CORE #include #include @@ -21,15 +21,15 @@ struct ptdump_info { unsigned long base_addr; }; -void ptdump_walk_pgd(struct seq_file *s, struct ptdump_info *info); -#ifdef CONFIG_ARM64_PTDUMP_DEBUGFS +void ptdump_walk(struct seq_file *s, struct ptdump_info *info); +#ifdef CONFIG_PTDUMP_DEBUGFS void ptdump_debugfs_register(struct ptdump_info *info, const char *name); #else static inline void ptdump_debugfs_register(struct ptdump_info *info, const char *name) { } #endif void ptdump_check_wx(void); -#endif /* CONFIG_ARM64_PTDUMP_CORE */ +#endif /* CONFIG_PTDUMP_CORE */ #ifdef CONFIG_DEBUG_WX #define debug_checkwx() ptdump_check_wx() diff --git a/arch/arm64/mm/Makefile b/arch/arm64/mm/Makefile index 849c1df3d214..d91030f0ffee 100644 --- a/arch/arm64/mm/Makefile +++ b/arch/arm64/mm/Makefile @@ -4,8 +4,8 @@ obj-y := dma-mapping.o extable.o fault.o init.o \ ioremap.o mmap.o pgd.o mmu.o \ context.o proc.o pageattr.o obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o -obj-$(CONFIG_ARM64_PTDUMP_CORE) += dump.o -obj-$(CONFIG_ARM64_PTDUMP_DEBUGFS) += ptdump_debugfs.o +obj-$(CONFIG_PTDUMP_CORE) += dump.o +obj-$(CONFIG_PTDUMP_DEBUGFS) += ptdump_debugfs.o obj-$(CONFIG_NUMA) += numa.o obj-$(CONFIG_DEBUG_VIRTUAL) += physaddr.o KASAN_SANITIZE_physaddr.o += n diff --git a/arch/arm64/mm/dump.c b/arch/arm64/mm/dump.c index 82b3a7fdb4a6..5cc71ad567b4 100644 --- a/arch/arm64/mm/dump.c +++ b/arch/arm64/mm/dump.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -65,10 +66,11 @@ static const struct addr_marker address_markers[] = { * dumps out a description of the range. */ struct pg_state { + struct ptdump_state ptdump; struct seq_file *seq; const struct addr_marker *marker; unsigned long start_address; - unsigned level; + int level; u64 current_prot; bool check_wx; unsigned long wx_pages; @@ -168,6 +170,10 @@ static struct pg_level pg_level[] = { .name = "PGD", .bits = pte_bits, .num = ARRAY_SIZE(pte_bits), + }, { /* p4d */ + .name = "P4D", + .bits = pte_bits, + .num = ARRAY_SIZE(pte_bits), }, { /* pud */ .name = (CONFIG_PGTABLE_LEVELS > 3) ? "PUD" : "PGD", .bits = pte_bits, @@ -230,11 +236,15 @@ static void note_prot_wx(struct pg_state *st, unsigned long addr) st->wx_pages += (addr - st->start_address) / PAGE_SIZE; } -static void note_page(struct pg_state *st, unsigned long addr, unsigned level, - u64 val) +static void note_page(struct ptdump_state *pt_st, unsigned long addr, int level, + unsigned long val) { + struct pg_state *st = container_of(pt_st, struct pg_state, ptdump); static const char units[] = "KMGTPE"; - u64 prot = val & pg_level[level].mask; + u64 prot = 0; + + if (level >= 0) + prot = val & pg_level[level].mask; if (!st->level) { st->level = level; @@ -282,85 +292,27 @@ static void note_page(struct pg_state *st, unsigned long addr, unsigned level, } -static void walk_pte(struct pg_state *st, pmd_t *pmdp, unsigned long start, - unsigned long end) -{ - unsigned long addr = start; - pte_t *ptep = pte_offset_kernel(pmdp, start); - - do { - note_page(st, addr, 4, READ_ONCE(pte_val(*ptep))); - } while (ptep++, addr += PAGE_SIZE, addr != end); -} - -static void walk_pmd(struct pg_state *st, pud_t *pudp, unsigned long start, - unsigned long end) -{ - unsigned long next, addr = start; - pmd_t *pmdp = pmd_offset(pudp, start); - - do { - pmd_t pmd = READ_ONCE(*pmdp); - next = pmd_addr_end(addr, end); - - if (pmd_none(pmd) || pmd_sect(pmd)) { - note_page(st, addr, 3, pmd_val(pmd)); - } else { - BUG_ON(pmd_bad(pmd)); - walk_pte(st, pmdp, addr, next); - } - } while (pmdp++, addr = next, addr != end); -} - -static void walk_pud(struct pg_state *st, pgd_t *pgdp, unsigned long start, - unsigned long end) +void ptdump_walk(struct seq_file *s, struct ptdump_info *info) { - unsigned long next, addr = start; - pud_t *pudp = pud_offset(pgdp, start); - - do { - pud_t pud = READ_ONCE(*pudp); - next = pud_addr_end(addr, end); - - if (pud_none(pud) || pud_sect(pud)) { - note_page(st, addr, 2, pud_val(pud)); - } else { - BUG_ON(pud_bad(pud)); - walk_pmd(st, pudp, addr, next); - } - } while (pudp++, addr = next, addr != end); -} + unsigned long end = ~0UL; + struct pg_state st; -static void walk_pgd(struct pg_state *st, struct mm_struct *mm, - unsigned long start) -{ - unsigned long end = (start < TASK_SIZE_64) ? TASK_SIZE_64 : 0; - unsigned long next, addr = start; - pgd_t *pgdp = pgd_offset(mm, start); - - do { - pgd_t pgd = READ_ONCE(*pgdp); - next = pgd_addr_end(addr, end); - - if (pgd_none(pgd)) { - note_page(st, addr, 1, pgd_val(pgd)); - } else { - BUG_ON(pgd_bad(pgd)); - walk_pud(st, pgdp, addr, next); - } - } while (pgdp++, addr = next, addr != end); -} + if (info->base_addr < TASK_SIZE_64) + end = TASK_SIZE_64; -void ptdump_walk_pgd(struct seq_file *m, struct ptdump_info *info) -{ - struct pg_state st = { - .seq = m, + st = (struct pg_state){ + .seq = s, .marker = info->markers, + .ptdump = { + .note_page = note_page, + .range = (struct ptdump_range[]){ + {info->base_addr, end}, + {0, 0} + } + } }; - walk_pgd(&st, info->mm, info->base_addr); - - note_page(&st, 0, 0, 0); + ptdump_walk_pgd(&st.ptdump, info->mm); } static void ptdump_initialize(void) @@ -388,10 +340,17 @@ void ptdump_check_wx(void) { -1, NULL}, }, .check_wx = true, + .ptdump = { + .note_page = note_page, + .range = (struct ptdump_range[]) { + {VA_START, ~0UL}, + {0, 0} + } + } }; - walk_pgd(&st, &init_mm, VA_START); - note_page(&st, 0, 0, 0); + ptdump_walk_pgd(&st.ptdump, &init_mm); + if (st.wx_pages || st.uxn_pages) pr_warn("Checked W+X mappings: FAILED, %lu W+X pages found, %lu non-UXN pages found\n", st.wx_pages, st.uxn_pages); diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 750a69dde39b..ff612579ca75 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -954,13 +954,13 @@ int __init arch_ioremap_pud_supported(void) * SW table walks can't handle removal of intermediate entries. */ return IS_ENABLED(CONFIG_ARM64_4K_PAGES) && - !IS_ENABLED(CONFIG_ARM64_PTDUMP_DEBUGFS); + !IS_ENABLED(CONFIG_PTDUMP_DEBUGFS); } int __init arch_ioremap_pmd_supported(void) { /* See arch_ioremap_pud_supported() */ - return !IS_ENABLED(CONFIG_ARM64_PTDUMP_DEBUGFS); + return !IS_ENABLED(CONFIG_PTDUMP_DEBUGFS); } int pud_set_huge(pud_t *pudp, phys_addr_t phys, pgprot_t prot) diff --git a/arch/arm64/mm/ptdump_debugfs.c b/arch/arm64/mm/ptdump_debugfs.c index 064163f25592..1f2eae3e988b 100644 --- a/arch/arm64/mm/ptdump_debugfs.c +++ b/arch/arm64/mm/ptdump_debugfs.c @@ -7,7 +7,7 @@ static int ptdump_show(struct seq_file *m, void *v) { struct ptdump_info *info = m->private; - ptdump_walk_pgd(m, info); + ptdump_walk(m, info); return 0; } DEFINE_SHOW_ATTRIBUTE(ptdump); diff --git a/drivers/firmware/efi/arm-runtime.c b/drivers/firmware/efi/arm-runtime.c index e2ac5fa5531b..1283685f9c20 100644 --- a/drivers/firmware/efi/arm-runtime.c +++ b/drivers/firmware/efi/arm-runtime.c @@ -27,7 +27,7 @@ extern u64 efi_system_table; -#ifdef CONFIG_ARM64_PTDUMP_DEBUGFS +#if defined(CONFIG_PTDUMP_DEBUGFS) && defined(CONFIG_ARM64) #include static struct ptdump_info efi_ptdump_info = { From patchwork Wed Jul 31 15:46:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11068483 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B413514DB for ; Wed, 31 Jul 2019 15:47:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A162B2228E for ; Wed, 31 Jul 2019 15:47:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9583822362; Wed, 31 Jul 2019 15:47:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 35E132624B for ; Wed, 31 Jul 2019 15:47:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CA30B8E0009; Wed, 31 Jul 2019 11:47:17 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id C2E438E0003; Wed, 31 Jul 2019 11:47:17 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AF4C48E0009; Wed, 31 Jul 2019 11:47:17 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) by kanga.kvack.org (Postfix) with ESMTP id 5BF338E0003 for ; Wed, 31 Jul 2019 11:47:17 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id b12so42619625ede.23 for ; Wed, 31 Jul 2019 08:47:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=cCG731u2YfkSB5eYdLxPnKjT9032CC6TDk+EWjWhbmE=; b=ASuXaP4X5rVRWYLQXUUkAKT0SQmz+mKJwxO1S0O7p1OQvgff5UXoqUD4ZCCZKf4NC1 tnCOGUWM4U3ZjJT7d0LE9EF+9QqInit60ghM6c5spR3d3Dww3EcuDhTeIxskYVIMqEjo SyoRLj2RdE9OmBcFDKqLw8/tsUmS97aUu3N0PqbmdHNmnSRmRv7SyCSfDtTjtoPFUVNh EJCCiJGPPNCmyz0pAI3UDB9onbatxqCF43xFwQxhcc1wJ2dZEh18MRgOAXSGWtUbqZYg 2DivTibJVTMypEeV8howy42pOscmfmDlK3KqAQxSnlCMEhee4Qe/P/H2buyqwq22GFog lVTQ== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAULJuBZLU+dpLllIOIZeL6a/zY7in1HuPxJ/aw9pCrlzebwKDfD +9NYzdWrpEQLhigdp9xzNnADLxuv6EXyqEY5cCwYRI+k72n6d7A1H8LZV0UDXz6+aEDzRBXE+oP 5OIUY8PpPHwgi6i6MKnWLjCMo33rC3OF2SR4zAx8sv0gg+ZVecoOU5g7R+YomPaVxhA== X-Received: by 2002:aa7:c2c8:: with SMTP id m8mr107418316edp.63.1564588036953; Wed, 31 Jul 2019 08:47:16 -0700 (PDT) X-Google-Smtp-Source: APXvYqwe6culgBwIUKch4dfLmRWpMAHIbkTyH9J/uf2XP9rnsfBXCn96MPG7cizLA6y/7neVhh6U X-Received: by 2002:aa7:c2c8:: with SMTP id m8mr107418258edp.63.1564588036242; Wed, 31 Jul 2019 08:47:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564588036; cv=none; d=google.com; s=arc-20160816; b=HhfCVnHf2UmmR2OX9FfVY6lJL0gvFa9x9EBtCLma43S3coHuC8AwMd7vqE/xiqMjW5 oDRqtKEO7nIvP0RfmvLoGS2NlZysXefcMlDU6EZY2wbE0pbsFkf+EcoJ4Rfod9DN4FUE p4xlhAWm4cS765TIQzC8hK/MbiR61FvATxeGBMeZKhjYNEI3aM4yhblx9pbcCZHWEE+7 OW91MYDWlRm7IUnLVGUVX/SeqvYpD1oatJwj/i/Q+PBI4IorNNw9Nw5ck0rCJ+QW+fQe BiK/tGBvQ+asKgIYOQqbzXGPfOrqtWZyNIBp+JNZ/oficOAVh8k0sFcmD3bQ8tw2RLqO +ZOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=cCG731u2YfkSB5eYdLxPnKjT9032CC6TDk+EWjWhbmE=; b=FV/18YqlENALJ1EPm+oM2l3MHyy2Kvn4mXwn6fHEcV6k6tyVVxuKG4xmgmfgZ+3j9Z z5d4MT/+/Pea8csxmri8XIQslRw3vBlQYckasccxkBOr04iOZFYPSem0A6uKNGzp1fI5 Gp019pZDT1aiOetErGtu11WAialNemfr9a7HM18MmsMAWC3jO6zrJ7vYVkMvic918N+2 BVt68ENtrRPcqvqYq4WenWi7VZ9nJv0PwtbRSDhphN5cFJ8h/zvtJPewAgxXKJ8PMVaI wsqj63Lc5eEE3pPbprwSSy2WkwQR5x0HBLULVsRKtEbghedA0eGh8LPnhjZAMi4HGdZH 1vrw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.110.172]) by mx.google.com with ESMTP id j7si20908509eds.315.2019.07.31.08.47.16 for ; Wed, 31 Jul 2019 08:47:16 -0700 (PDT) Received-SPF: pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) client-ip=217.140.110.172; Authentication-Results: mx.google.com; spf=pass (google.com: domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 789A81576; Wed, 31 Jul 2019 08:47:15 -0700 (PDT) Received: from e112269-lin.arm.com (e112269-lin.cambridge.arm.com [10.1.196.133]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E394B3F694; Wed, 31 Jul 2019 08:47:12 -0700 (PDT) From: Steven Price To: linux-mm@kvack.org Cc: Steven Price , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Dave Hansen , Ingo Molnar , James Morse , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Peter Zijlstra , Thomas Gleixner , Will Deacon , x86@kernel.org, "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , "Liang, Kan" , Andrew Morton Subject: [PATCH v10 22/22] arm64: mm: Display non-present entries in ptdump Date: Wed, 31 Jul 2019 16:46:03 +0100 Message-Id: <20190731154603.41797-23-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190731154603.41797-1-steven.price@arm.com> References: <20190731154603.41797-1-steven.price@arm.com> MIME-Version: 1.0 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: X-Virus-Scanned: ClamAV using ClamSMTP Previously the /sys/kernel/debug/kernel_page_tables file would only show lines for entries present in the page tables. However it is useful to also show non-present entries as this makes the size and level of the holes more visible. This aligns the behaviour with x86 which also shows holes. Signed-off-by: Steven Price --- arch/arm64/mm/dump.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/arch/arm64/mm/dump.c b/arch/arm64/mm/dump.c index 5cc71ad567b4..765e8fc5640a 100644 --- a/arch/arm64/mm/dump.c +++ b/arch/arm64/mm/dump.c @@ -259,21 +259,22 @@ static void note_page(struct ptdump_state *pt_st, unsigned long addr, int level, if (st->current_prot) { note_prot_uxn(st, addr); note_prot_wx(st, addr); - pt_dump_seq_printf(st->seq, "0x%016lx-0x%016lx ", - st->start_address, addr); + } - delta = (addr - st->start_address) >> 10; - while (!(delta & 1023) && unit[1]) { - delta >>= 10; - unit++; - } - pt_dump_seq_printf(st->seq, "%9lu%c %s", delta, *unit, - pg_level[st->level].name); - if (pg_level[st->level].bits) - dump_prot(st, pg_level[st->level].bits, - pg_level[st->level].num); - pt_dump_seq_puts(st->seq, "\n"); + pt_dump_seq_printf(st->seq, "0x%016lx-0x%016lx ", + st->start_address, addr); + + delta = (addr - st->start_address) >> 10; + while (!(delta & 1023) && unit[1]) { + delta >>= 10; + unit++; } + pt_dump_seq_printf(st->seq, "%9lu%c %s", delta, *unit, + pg_level[st->level].name); + if (st->current_prot && pg_level[st->level].bits) + dump_prot(st, pg_level[st->level].bits, + pg_level[st->level].num); + pt_dump_seq_puts(st->seq, "\n"); if (addr >= st->marker[1].start_address) { st->marker++;