From patchwork Mon Jul 22 15:41: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: 11052759 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 202CE14F6 for ; Mon, 22 Jul 2019 15:42:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0DC4327F86 for ; Mon, 22 Jul 2019 15:42:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 01659283BB; Mon, 22 Jul 2019 15:42: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 7D42D27F86 for ; Mon, 22 Jul 2019 15:42:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CEF3D6B000A; Mon, 22 Jul 2019 11:42:28 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id CA2288E0003; Mon, 22 Jul 2019 11:42: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 BB7298E0001; Mon, 22 Jul 2019 11:42:28 -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 6CE666B000A for ; Mon, 22 Jul 2019 11:42:28 -0400 (EDT) Received: by mail-ed1-f72.google.com with SMTP id f19so26545326edv.16 for ; Mon, 22 Jul 2019 08:42: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=tw4JZILHpRw8yw2ivWns3JMulA885A2eTY+XMl6s8Qw=; b=p1Bd/Psxp7yr0EqYF855+lUYWP1KKw5xc0hhZnKCFe0iSUKFB8KbWwJF0lJ6kS6xOG F3gT7xiZs2g5aTF7ErIzr8AxlXxjgZFNEPpyOEiCFMywofKwpqA8bXnjtbSxPCeRcl+4 fKbZPcIpl00EcOjmF99FQ/CPz7GFwm39mXFsJ/bg6tqwOxCns80JIgYamP9Za/7fY/gq I4bs/2TgxjuMLT+MoVM9vLkjNMhgTSz5e5/QS4tizAQF7m6/DdvAKK60ajuxKlNgl/o7 dlwgZEWq7Fql+jkBSdXr3fRkf+gBml/hjn5UgM+0hIlQ8WGqRDHOKKUm2HcvKK1ONnNw z+RQ== 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: APjAAAWsQYjrGU/X2GbfaJTmx27abkV80V2hcGdh6sZTIfHFdHq7zlZr wyIPGSVfdh7BS8yrqGCigh/C8u0fUx5ey5Lq5b084S0f207G/K8JDXvbt4AETwoJsWiQzo5t+Lq Xot4l9TdQVeLivws6RiwQG8z0sbU2gZ/qDqbwbR7FP0cwcSPLjSFVvW2klorDKwjTug== X-Received: by 2002:a50:e619:: with SMTP id y25mr61053893edm.247.1563810148041; Mon, 22 Jul 2019 08:42:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqzeaVhxn0lS6d30mhvxSJ1/T6C84rH+XhTt+WeaNGGC596vBIxzCPSQEYjDodWGUhBC00OK X-Received: by 2002:a50:e619:: with SMTP id y25mr61053849edm.247.1563810147379; Mon, 22 Jul 2019 08:42:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810147; cv=none; d=google.com; s=arc-20160816; b=RvEsnAumwbwNE1rLO/db7AaX88WvYWvmNSTrUIxKGIsmZCFLDApbEND+5MtFT4q7+n elS6PrCKDIoHa0pNPt/poOaQgHJ/PwXvb//CaEGlg2CIwSFzwlxN8PIWwfbPE4mnq5Ux xUmqOS+hwyaEO41OwKH5ZzP9S+6iJYok9PKGzh0REnts2axO/VO+k9Pge+Ynl67E0a8Y rCo7ZxuueDEg+S8oIJ1sxmv9i8jZdvGmhjyhtWj3hIc/YNblcOSslsDDX8suftoh9lj3 YyL3zTesA/HCx/Olph8KzDkE+3Kq6+KBX3AYwz70wme78P0/Vz7khTcuwE5/PlwZNK+8 6ZKA== 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=m61HElqydZdtDaIghOJ1qzNCArznnaQC31pDmmhw88ChtXM2CFlyQ2+PLaR9N//JU/ JbWY3FqSynpyJ6s1p3zcY5MO9n1NT/nYTM2hlfTVCMmiM+RA+OZiL4kiU8wd+rOkStKz 1TsEIFQa8ilbCi9KgYqP9n7hsXi4LbhIF/XGpsv2lI2NOBDvVbAyaKCNBXMySqlxtWmG +S+x+glc9YCmgKE+slIWlVQB2A2fRxn3LRTsh8+TM62dL6F+/iX1ChNnMfErteAa6qcv EHUE7aiPEJuXnjNt7Sm6Vrwojcp76dWI6ualLpS5PDQ6JMu+R01vA6eWlJjJulj6+iQU UDoQ== 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 m44si5104896edc.110.2019.07.22.08.42.27 for ; Mon, 22 Jul 2019 08:42: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 86D4E1509; Mon, 22 Jul 2019 08:42: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 BA1883F694; Mon, 22 Jul 2019 08:42: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 , Vineet Gupta , linux-snps-arc@lists.infradead.org Subject: [PATCH v9 01/21] arc: mm: Add p?d_leaf() definitions Date: Mon, 22 Jul 2019 16:41:50 +0100 Message-Id: <20190722154210.42799-2-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 Mon Jul 22 15:41: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: 11052761 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 9DFBC1398 for ; Mon, 22 Jul 2019 15:42:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8D7F527F86 for ; Mon, 22 Jul 2019 15:42:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8125528433; Mon, 22 Jul 2019 15:42: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 F139627F86 for ; Mon, 22 Jul 2019 15:42:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D8C368E0003; Mon, 22 Jul 2019 11:42:32 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id D3D758E0001; Mon, 22 Jul 2019 11:42: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 C2D158E0003; Mon, 22 Jul 2019 11:42:32 -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 715608E0001 for ; Mon, 22 Jul 2019 11:42:32 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id c31so26564550ede.5 for ; Mon, 22 Jul 2019 08:42:32 -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=TOlh0hG0tBxU3zVorXHJts22EvQVNYFBl64hjueooFr6rY8XBz7s5GnZMsSxR6wYhv 0BXn/d9ZSKIWshVQY7q+hSPCTIQhFfOdWU7PveTJs7nlHDpMxvqGy/FyzjmgjUQJ7iSs BvjXNSdesASPWn/I8CHewDJck1dQSuJOWDvWniqSunJH0zylJVCUc5pMhLuefNoyq0Eg gJ76EnrKPvl+Lueo5pfPWn9PUZXnUa97DWPR8XPQTk9ozUZGiA21eW9fs7sIu0RjeFjQ kkMrPmSlEBOWugIbnkS/LGu3Z1Huq5K/eYx13iYnm1Xvp7ATZQIi69oXmQn86RB7Og63 S1cQ== 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: APjAAAVKGNYBriW23dNcz+kr9g2iwKV2ctu91d0uf7sqgrwY8REu87BR gAz7gUh143g3h24qpnFwN4cbzfTiJGvfwbKmQi1zGU9yJ+602lI5Xm13anWISmvwHtqjICQhEIH lM4ZBTuwgnDll07d5Q8VLjzrP/wl8d0Ow9ceFPTd3oKnMzZiDZlBAY3w3kT6BMvhiPg== X-Received: by 2002:a17:906:8409:: with SMTP id n9mr52844686ejx.128.1563810151937; Mon, 22 Jul 2019 08:42:31 -0700 (PDT) X-Google-Smtp-Source: APXvYqyLCY+EucFZEk9/V7y4rQ1tMKDNy0wMXHR5vhwZ81pHvZ3Se3XePfF0OXLQdQ15iQCtJZCD X-Received: by 2002:a17:906:8409:: with SMTP id n9mr52844638ejx.128.1563810151194; Mon, 22 Jul 2019 08:42:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810151; cv=none; d=google.com; s=arc-20160816; b=GLCtykaiE0ZKkTpeMA7umHbuDKu3HdeON+UaTJs+crEsyNKOAnkQBrBWHqbnIdfj9k 1VRLTl6YoBd0iZWK1krbj5Zxgo3HupuwoAjhQT65v6IkCNzUIaHUq+h3I6WAivKvYnSo rTsB0/s9Q8IV3Go3ovUWF8Fo3NuY0V5SscZmwoh54jGU1rBye9NHBV8JGMgP4dudbCTN h6lrvf7kaqY31PaY/d2MF+EHG/F6OrMNye/FRC5dd65f53AkIh47kQR0aE3ozhWekcmL GUO+w3L7q8SgGEweWEvFf11JL7uCVB1+QOVT425PHcJWDUyBpIlVOEd2W05Uf3d9F60Z a2ow== 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=NmOM5PO//VrJM/ay+aEsBleudx7OQ1IOBdq/Kzx5S7mBLjPMOJOzPBHOu2sBoiHr8b 3D/27pyJ8AGFfRshOPEWv6f4W7yw1NOlv4DLLJ5d3J87TUH9NrUqTIkasaybs43uO7w7 nMsBra69YWPj3+wcRyShmwjDYyWBAm0Sn7SWlOKC4otFCRdxYXUbBX+lBUs/8jK+ROPK EPyRsVSY5jhzJre6BrmyfEjhiJpz8tZgZoxyGk0hsyXUrZ6ykofupRyE6On3eP9efalU WdxaDQZlcbocO0xcI+3DcBR2Xmz5reTcgqhFKPI/RijPdseGHCkbPjH2VIcxuSk2bgY+ 3lUA== 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 39si5131235edq.151.2019.07.22.08.42.30 for ; Mon, 22 Jul 2019 08:42: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 6DB1B1596; Mon, 22 Jul 2019 08:42: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 BCA9A3F694; Mon, 22 Jul 2019 08:42: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 , Russell King Subject: [PATCH v9 02/21] arm: mm: Add p?d_leaf() definitions Date: Mon, 22 Jul 2019 16:41:51 +0100 Message-Id: <20190722154210.42799-3-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 Mon Jul 22 15:41: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: 11052763 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 2902C1398 for ; Mon, 22 Jul 2019 15:42:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 177E227F86 for ; Mon, 22 Jul 2019 15:42:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0B69028433; Mon, 22 Jul 2019 15:42: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 9016F27F86 for ; Mon, 22 Jul 2019 15:42:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9958E8E0005; Mon, 22 Jul 2019 11:42:34 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 9465F8E0001; Mon, 22 Jul 2019 11:42:34 -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 7E87A8E0005; Mon, 22 Jul 2019 11:42:34 -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 2EB788E0001 for ; Mon, 22 Jul 2019 11:42:34 -0400 (EDT) Received: by mail-ed1-f71.google.com with SMTP id k22so26566797ede.0 for ; Mon, 22 Jul 2019 08:42: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=dw5qvPvLE7W70oX+QwfsL5BaF0k/anytr4XJVfIwlRs=; b=Dx5bpA5a/L5ouyj4BBuGevGG3qjVvHkjS7WiNqEQok08T4ToS/ST7UNwW5LZ8OBaEg Vu8iMQ8sCwhvfwoTF4pXWZHcH/su7kdQN23Fi0XlKpsY72qX1q8UXbK9txBF1SKOElv9 En37fijxB5gQGhj1dd59AgCAMNL4A82cyLZ4THEh2PSEPB96Zl2vJkXRSrujoGi+FYAe GGk2bmxPqFIZ3LiXypy4KkPZl3ADiJdkG4SURCTRsKugXCnTQE+yP9lZMbL33dLnvLdb wKVm9OMRzbsTaGT6sRlcwuHY2HdSAFsVTyDdow+MKz2TPFjH3gCvIBq3VHI38IJZafnl I25w== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAW8j2g6Du84Y+NJT4kgrAJrB1DxJ8vgMlyU18ao5F2RQl6yZCG6 Di5XUoNnMiLnhPiw4s3FMtLNDUwZ66qkeQI/pfb/uhhj6zwvUS+jryuli7g78qIaFgujU8XvaEZ B0Cojz66OZuBKwm90dQ+RdaGYM9A09ug4BGF+YMlBE0NVG7zHmYXRiLNqvQ3s5YbdtA== X-Received: by 2002:a50:b122:: with SMTP id k31mr61765815edd.204.1563810153773; Mon, 22 Jul 2019 08:42:33 -0700 (PDT) X-Google-Smtp-Source: APXvYqzDEJNdX4RKJS8kfarPekfxYkF1MvI3AUcqsoE/8JcjtpY4nYBKMqnkw6LxUYWgiqGoDH2l X-Received: by 2002:a50:b122:: with SMTP id k31mr61765758edd.204.1563810153046; Mon, 22 Jul 2019 08:42:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810153; cv=none; d=google.com; s=arc-20160816; b=zH5wd8x+zwJaLUc3R6NorAtz0bU70eN5P9Iv78b2Qkd6R5Y1DopFnts3roLxyBOrWO 4+0iKk1q0mnQdlfYQDR6PLfbH8GsklR4Q0psbtCmGYzfj4C39VpYvV5eoOO6n08wqdmD yoNwJPFkItsWFayFpF6/APCtCtuOWxKdmRTgADNs1/NnTwxsirq5gmGWPrq0L0vlQYZE 1kqcoOz76X924eC3oGJgI+QdzEEmkFIeVZ5anPSNEqsWy5ZCiSYrhY2jjS4V3XxJ4FJp GeUM96UDgfW/BMVDhZ91nDI3516y6egqA/UPXQqKhZU6cwWNPJLulvJ8HSAinyyGTy3c eITQ== 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=dw5qvPvLE7W70oX+QwfsL5BaF0k/anytr4XJVfIwlRs=; b=aWgyt6Bohk/WQJnZGdv/dwPQxaGFDuOU5uvSRc+TnbiUUXPLKeLmj7m+sE+etJPTel GHs47uzHZhl/EJbUCtdTPFncFfUrXr87kw4tE03vJofJvHU06nrMJhEnTB2a6wuEJmOE KYT9syqp8yAuEGPOpu8JMuheY0Oo+DXLWbe0fOZdMgADxG1RtIYYSQeRjJ9cOwBBb8L1 nZQSmfh3DRaYU5fu+w4jQVURE+VpP29xuB8Dn2URwQs0RM4thXKQVvIs41ngBVld5OSy hy8FK5hPyNjA9TPYd8I0nn9pi9Ug0eug6vLFKzUgQdIfp1oUyXjiONQBosQARPHGZwon kU7w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 9si4929231ejv.195.2019.07.22.08.42.32 for ; Mon, 22 Jul 2019 08:42:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 3C5BD15A2; Mon, 22 Jul 2019 08:42: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 A3AD73F694; Mon, 22 Jul 2019 08:42: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 Subject: [PATCH v9 03/21] arm64: mm: Add p?d_leaf() definitions Date: Mon, 22 Jul 2019 16:41:52 +0100 Message-Id: <20190722154210.42799-4-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 that 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 Mon Jul 22 15:41: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: 11052767 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 23623159A for ; Mon, 22 Jul 2019 15:42:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 119CF27F86 for ; Mon, 22 Jul 2019 15:42:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 05375283BB; Mon, 22 Jul 2019 15:42: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 83C7C28434 for ; Mon, 22 Jul 2019 15:42:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DB45D8E0006; Mon, 22 Jul 2019 11:42:37 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id D95638E0001; Mon, 22 Jul 2019 11:42:37 -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 C30C98E0006; Mon, 22 Jul 2019 11:42:37 -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 6A14B8E0001 for ; Mon, 22 Jul 2019 11:42:37 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id a5so26537014edx.12 for ; Mon, 22 Jul 2019 08:42:37 -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=GFoSGCQZUb3PnmR959rCzy1mnzvRnBqgnRMQdV1X/EU=; b=YKejT/8/o7PySvK0ehH4o9xmMZXcARHFT79OChh6gALSlf6mIXuaGYk4cMpoLEvp1+ CZmKgjV7Qgk/j1+qdPCIOtd+6Z0ut0lB8QCdbHr1z9KycLBKji4w0lKjXOt5WmUWYcSV QEfMH1fZFeNq3WUKQcGomcGWHONDbZpHu94uSMHoP2gGUzpgeB3rUqZLVNeT5kGbG1ce fV44upy79hbcHvmlsJSqmZSIcbZdrDiZDGz+wdthDw1fv3k0m7FLbjAZfQsyxby9utdB 4BYs8Phuu3uM4ZC8sB+g5U9EQqgHjnxNLO9rst1EXFkOokgkdCNftpRTWtO7Unf4+/bo tvlA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAU/FxRj+4QZBsnf1HGzK9djvmoo+OWG/+iV4lzXpDMEEwzlIEVh agMPTS0qjAUgaf4n3Dwa/Hr8lbpl8c809Wjtjz7isVGQdVoV1EJGoWRUHFLvtCuvRXF+KqmkX8a RaGteZCu5KUik/Aik82f/9lWIZhzHQ/AFbjNH5n8kpj2qja5oH0GkzgExRidBoEbFBA== X-Received: by 2002:a17:906:6582:: with SMTP id x2mr32058275ejn.2.1563810157010; Mon, 22 Jul 2019 08:42:37 -0700 (PDT) X-Google-Smtp-Source: APXvYqwEH202mAR9PhflBc9IZ9+cKSF4fRqV48h6GRTMG4IGniHzqjaRggAITJs+QI35MtRcgC7i X-Received: by 2002:a17:906:6582:: with SMTP id x2mr32058224ejn.2.1563810156231; Mon, 22 Jul 2019 08:42:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810156; cv=none; d=google.com; s=arc-20160816; b=qgqYUPmqwIVOkhkt/zNrlPdaoOwRkMpPmfZ2gvrvhgsxmxkwGt3+afDJp4Wl7A0lB7 PVKI7LupFy1hRgErgvoDKRnq2VATYxSsOeFW3MPlhqcV22gCqatDih8acK4kR4bohNDj 8v/Km3FHc4QKC3KEVb3BberSP4nIHhJInCHE3BjKge2K8PI33yJm1UZVl8cWlxGVTGDt KFklX+NVOVmg5LdXllPkrrPIhrYYdYYj1hdU6Cp5Wj+qv5qTsZ0cc/IyBraSzztJXWqA HDq8ILUzXI63amKur3iV9bqYnbD/mNtDFx7TDObPacs37/Ep26b6XyCF0TMzTdCfrocW K+hg== 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=GFoSGCQZUb3PnmR959rCzy1mnzvRnBqgnRMQdV1X/EU=; b=oU+Sbwd5+TEfxTpGvJVwwuJDuMui8H+nysCu4ZqpYSt+2KVJT2Yi4tzdZvUU3ByGyl xURILmocaDvUbBofwUuH/9IX/zwtlQTcrqxgvSpmLIdRRkoU+csf1y2hA7E2/xAT2Aje a0Id76RtBvR87TMkk6Rbeb4Xf+fpQ9wX1bohUYtP4gHmhAZVjUW/GDGOYrKust/Lsfy+ unYtWOLzavTVIZ8CQyLuEDuLrKOhTJwIDwZyVzmnv4OltbJjB9Dr7VW4K+Zt/mvH8329 a3o7Nk7DtyhQcI1Xq09quGFo54trg2+u9H8Nw6dVZ9T1DNxdVUBgSe8ZVKjAZnOCWKmi 0r9A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 v6si4342402ejx.120.2019.07.22.08.42.35 for ; Mon, 22 Jul 2019 08:42:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 740AF15A1; Mon, 22 Jul 2019 08:42:35 -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 71F6A3F694; Mon, 22 Jul 2019 08:42:32 -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 v9 04/21] mips: mm: Add p?d_leaf() definitions Date: Mon, 22 Jul 2019 16:41:53 +0100 Message-Id: <20190722154210.42799-5-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 mips, we only support large pages on 64 bit. For 64 bit 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 --- arch/mips/include/asm/pgtable-64.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/mips/include/asm/pgtable-64.h b/arch/mips/include/asm/pgtable-64.h index 93a9dce31f25..2bdbf8652b5f 100644 --- a/arch/mips/include/asm/pgtable-64.h +++ b/arch/mips/include/asm/pgtable-64.h @@ -273,6 +273,10 @@ static inline int pmd_present(pmd_t pmd) return pmd_val(pmd) != (unsigned long) invalid_pte_table; } +#ifdef _PAGE_HUGE +#define pmd_leaf(pmd) ((pmd_val(pmd) & _PAGE_HUGE) != 0) +#endif + static inline void pmd_clear(pmd_t *pmdp) { pmd_val(*pmdp) = ((unsigned long) invalid_pte_table); @@ -297,6 +301,10 @@ static inline int pud_present(pud_t pud) return pud_val(pud) != (unsigned long) invalid_pmd_table; } +#ifdef _PAGE_HUGE +#define pud_leaf(pud) ((pud_val(pud) & _PAGE_HUGE) != 0) +#endif + static inline void pud_clear(pud_t *pudp) { pud_val(*pudp) = ((unsigned long) invalid_pmd_table); From patchwork Mon Jul 22 15:41: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: 11052771 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 9531914F6 for ; Mon, 22 Jul 2019 15:42:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 826AF27F86 for ; Mon, 22 Jul 2019 15:42:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 76597283BB; Mon, 22 Jul 2019 15:42:43 +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 DEAB727F86 for ; Mon, 22 Jul 2019 15:42:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 501888E0007; Mon, 22 Jul 2019 11:42:41 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 4B2758E0001; Mon, 22 Jul 2019 11:42: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 37A448E0007; Mon, 22 Jul 2019 11:42:41 -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 DC6FC8E0001 for ; Mon, 22 Jul 2019 11:42:40 -0400 (EDT) Received: by mail-ed1-f72.google.com with SMTP id b12so26540419eds.14 for ; Mon, 22 Jul 2019 08:42:40 -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=ZkgsvBvYRNBsMPIco+t8hetIbE5E6trTsxc2kiftJ8bnr7Mv5XL6Cznk3szeau5S23 PE/f7Qh1jyFCdegdlu9TKBZ7/1h+y4BTSVqWEHa2RsCuvGydemxcRHgHCx7WPsDZ+bxt usCF2fYIuWYbxkwKco0mBDU2y0HDOn0gPghjbfJ3rJWVs8krXZ+3k6rkd6fNZhbl2rPu uWYaVXRzUTy4ejNAirV6asYlej2At/05D4xOUCrlJWzwF7vDh8PyRoWyrWeZsNWxxgu4 lzX2tVmwqOdLUqq6WYUp0VNVSDmZHsJhBIOW5B90s6gnCbo4gdx/ymuZTK0FM5GkMv3G ngtA== 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: APjAAAU8hCCiT6+nAxE7sp9ooKgehVEGlH+OxyyOnw0bGbCUbxPoak0h Zj9yXOsoiXoc2VnCIeNmfJs3VVTwT0t03jXXcXgZTh3fF+kzNCPNnNF3SMsmUtw66v8MEq0+g7T YAHjISi7so4VIw4N3GWLmzH8FWgJnJeb23NBD5i3AJrE7/bkujqKyc6z1ylg0uJ/0Ag== X-Received: by 2002:a17:906:948c:: with SMTP id t12mr54037386ejx.222.1563810160473; Mon, 22 Jul 2019 08:42:40 -0700 (PDT) X-Google-Smtp-Source: APXvYqyF4UwIvBSnlHD5XQaOArkDjJY+SG52UDTGiIvRCeMUvYuNT8HE71hs3M+xEJ78CriGVNwR X-Received: by 2002:a17:906:948c:: with SMTP id t12mr54037334ejx.222.1563810159705; Mon, 22 Jul 2019 08:42:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810159; cv=none; d=google.com; s=arc-20160816; b=aBgLc4vekoiYioUFcLfdW/6/9BunlzvMa8NeGe5Xsqk1j2qmHWCMPNnl04ByXuFEJE yOPVYlw/iHrrbD0aJ8KvAxQgYoaifxW+upxmCMkXyiUK5KI41FnA/82kfku0ShCvrHZY oAo9WJfnNZrzHNhQT7ZmMfkrvnRD8dqYI4jCkDc0FS5Mbx/qEbkujRefL26dGHV0/EmD rsahx783cu61fCejEbTaOM8uVZ4P1IK3KPCH+hEGD2czrl+rgxbJ7N7OS3XTb/LEKaIj yj6vpOFAOKrjfUdAZJN3klkrKegS6OpJPnzGXK0Nqq/+yOJ4lbcwWyd93BqKR49UX1az RXcQ== 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=HYZ32iO2GmawyH7oANlILnjKjBvzeN1x7l6xTAxvH5aWXnrA647J0WeN9okCJbdhFp yyrRkChSv0ZDd6uHPn7r4vnua2LYOQafZNKQ/nkTlzefxIGPD0cOv0oloy2Rk39/H/wf MbaCfhxj0ntgef0ylvFzwrXOCLJjMHBnmpYmuv6rQpy6JMr/Az9DpLvpcsKO9oohOV4o N/aTXuj94uVVFMV4eOUrMHqp1TNAJ1t/etTcHG6UbruBJndOYlXgyuxgoudDzPIY63aJ d/4Jtt0Pideajru8wnERSqcsI7ogiKHdzmzfZ4OpES6+N+Avzzss/QcXYxCbk/h0xam2 0m1w== 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 h47si5362179eda.243.2019.07.22.08.42.39 for ; Mon, 22 Jul 2019 08:42: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 C72961688; Mon, 22 Jul 2019 08:42:38 -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 AA7FD3F694; Mon, 22 Jul 2019 08:42:35 -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 v9 05/21] powerpc: mm: Add p?d_leaf() definitions Date: Mon, 22 Jul 2019 16:41:54 +0100 Message-Id: <20190722154210.42799-6-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 Mon Jul 22 15:41: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: 11052773 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 D55CA14F6 for ; Mon, 22 Jul 2019 15:42:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C368227F86 for ; Mon, 22 Jul 2019 15:42:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B436B283BB; Mon, 22 Jul 2019 15:42:46 +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 40E5F27F86 for ; Mon, 22 Jul 2019 15:42:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 418258E0008; Mon, 22 Jul 2019 11:42:44 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 3CC558E0001; Mon, 22 Jul 2019 11:42: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 2B58F8E0008; Mon, 22 Jul 2019 11:42: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 D4E408E0001 for ; Mon, 22 Jul 2019 11:42:43 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id k22so26567037ede.0 for ; Mon, 22 Jul 2019 08:42: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=gEVtoQCi6h+GyKxSDd1Xkj6e1d5Rk0HO8h+TUtam2wg=; b=mYe0RZGvYLJlLj9/mGM+xJ41qRXrhYhu+V94PBbKs+KjHj8CNX79DwtDGLPlD1CQYO Sv5nl3OAMKgxw6LbLmtV3QVZLgX/0oguujtqcALLF8yu/KRlEtASXz9W+TUmQ6S08UoK GlPBMyv/G/eFRUIr0RnGf/XRgE7Iyrhx0QxFW18nMHbpY9I13RBrbtPsaivmyR2pTBDl RNpFOPKAMfwO+4O52qeSLG9GalHzJUpavkhjNs+scd2yW9V6VHeH9aiGyeN0cEJhZAIe 7KHTnwNswTepmXJ4KnpnYEtpMBRZHkcG6airdVYmJWukECZ/uMFyX7hyIfy71DNY3yLK Dy6Q== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAXZfXbWuc+3+wptLW97/+qfroQf3U4/7SKmms381Dm1VRivc+5G ZtQ08x88syAlMvHtHu811T8eLKXbojOtpnuWxpcsO8Pd4p0E8rd8+Dl1ivlxhF+MGJyibIc44l6 xjdl2ICgHnRVToEHWy5ejNyibRxhCvuBeI5sS0vf64By2vTLbR/H3ifleTn93G+a33w== X-Received: by 2002:aa7:c49a:: with SMTP id m26mr62758589edq.0.1563810163449; Mon, 22 Jul 2019 08:42:43 -0700 (PDT) X-Google-Smtp-Source: APXvYqzrrSZKMqw4zjjsWlG2qzbY0tqWJvJvF9T3Kx9EngqYKqpUQ/yuHhPd1ttMuhiEgQWCI7sg X-Received: by 2002:aa7:c49a:: with SMTP id m26mr62758539edq.0.1563810162676; Mon, 22 Jul 2019 08:42:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810162; cv=none; d=google.com; s=arc-20160816; b=VEo0841oDhXzNASnPtfHPNOuqHja0tGEEnihfOfgJxztL18J+MsX65rTXtz0+BuF2m Wr61LZCc8YltK+F8twjG4MbO9TsfjVUx4CiVG7wSQ6m2ABBNmZchAo2I6pH6jGdkdWC/ NNcAOdVZLxtbsQHrIT5Ab88tKepS7VublEee2CIw6yd/Rm4GXHxHbGyYrTF4aOqtSx4f HMaAcTKfk6vFu5Itjom5coAPPmDu7cnWZFRexRDIxo/iEcuwBWGCMwXJhwknO222a1Et CfZb1TIJJ1wcMMAVc5x5EI0Sif+xjV/wfcS5++GSAeTtH1O5mIyRMweaEIXgqe2di2eT yBnA== 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=VV1Tzwae63stROsEk+XYR+8UwCGApGPldznJQpA6VJu2QhOMlT/kxmvCs7ZyH6hHFF 5CByRkmyFRUlNSSO3s0aLY8aVA9Kv8LCMpaH3MBk01XzuBQSExf4aVgMBAetL3nG7MFK q9++CNbLP675muQV9Ytfv/b0m1R34Yp5NngZiBZOKu9ZDp95LGC8fax5gzaKtfDUoAb8 E/C9yORTCp2DDa3J5Z+OhGtNQUaKVQRguBPCeF3nXZOMK7RdPsU1nqhGRh0oCdam84Bp ernHb1smETLb0JRqDMJWjCOI8ZmgWET1ORFni0IDVvYURSe4hBehWAiLNCzkBtutDtWF 2sVA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 oe22si4839341ejb.79.2019.07.22.08.42.42 for ; Mon, 22 Jul 2019 08:42:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 E3ACF28; Mon, 22 Jul 2019 08:42: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 094753F694; Mon, 22 Jul 2019 08:42:38 -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 v9 06/21] riscv: mm: Add p?d_leaf() definitions Date: Mon, 22 Jul 2019 16:41:55 +0100 Message-Id: <20190722154210.42799-7-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 Mon Jul 22 15:41: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: 11052775 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 D83111398 for ; Mon, 22 Jul 2019 15:42:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C7F9A27FB3 for ; Mon, 22 Jul 2019 15:42:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BC1BC28433; Mon, 22 Jul 2019 15:42:49 +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 4D54027FB3 for ; Mon, 22 Jul 2019 15:42:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 816138E0009; Mon, 22 Jul 2019 11:42:47 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 79BF78E0001; Mon, 22 Jul 2019 11:42: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 54F8E8E0009; Mon, 22 Jul 2019 11:42:47 -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 008C68E0001 for ; Mon, 22 Jul 2019 11:42:47 -0400 (EDT) Received: by mail-ed1-f72.google.com with SMTP id d27so26548266eda.9 for ; Mon, 22 Jul 2019 08:42:46 -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=j8DVKsa3geScdVXHlFrTdufGUqyaSXLPJxaAhWlrnjk=; b=S10Uxb8VC1J0LdAeQ6j+baosfPGJV2zdUKMGhuHfUHUoWJIX5pZSaCW7Dp6Pw64I7H 3Yy+t5AfUsYtDHj0eOeDh9wPguEjSh6QNo+mrNb70NC6DsBPNnGWrpOtPR2Fpfow9FEi xnelcw8vwkk/IhjHr8x7/LpPgXazrIgJ6ZPtnt3SssrUvwrduR8KGG8oqj0ylosCmxNc P6bFvyqUxiSY4PdflJlarcbfPjpmy1k08znDbhXYL2mPZ7nE377PsqjGDvU9tGQdoGER 5oOhSRUdyy2lgG2HYtad4LZWKjgDDAyhOCn5/B4Ge4YqTeL5x4oJXKP8SLKU052YoXWy rD6w== 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: APjAAAUVOj5qF4l1JvqOMBkKNOd4wWejgPQdwBlxTyA729cbZ2uTZRmJ ta1oT6GCwm+1crkQuKQi/A7t4JoJrGsIDjN4lhyV4qXqq89nhncfRr3g0U1t37qa9IA9CGvb+HR hm9tI/DhXEvDop0WZ8b0kVKvLVIGiJcjCfRzAkPIYK6bt8hgmi3oRni5KOlSWB2uFWg== X-Received: by 2002:a17:906:81cb:: with SMTP id e11mr52971967ejx.37.1563810166588; Mon, 22 Jul 2019 08:42:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqz/e6oP4oCcQRE5Bu1CdnME8uQQF2rYFrQ85DRSFHKyHKRIbGoBTKA5+Jpg1vmakNmOJ5hR X-Received: by 2002:a17:906:81cb:: with SMTP id e11mr52971935ejx.37.1563810165837; Mon, 22 Jul 2019 08:42:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810165; cv=none; d=google.com; s=arc-20160816; b=gSiHCoHjx4DFd5GB2OcFZVTR5HtT6D12ew31GyqHxE8KZB42sP1uFYT1J3UphDImZL pMtPrjciS7Jq+PJL3GKEU3WpHityaSRH+1ol/u1sazUltf4jPU9S1G4lzXOGf5P/oMVN lCmLGuVNrcTCTptcR1BKMFC7SntgGGJmojBCCys3EEB6oGo5Pj/6FHEftMXp5WQStDFI DTOGAVJwlLDGfI36HMTGxf2NU2h+xgICM3bRg8P81Eb+F5wqbEFyabOerPx7az76c4hS ts4UN2hJeKuicN9/Ie17H/puHLDGKejeCTtSKvUPccXWIUzVk4KwK9ig0qMsVa62oPW+ Zfiw== 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=j8DVKsa3geScdVXHlFrTdufGUqyaSXLPJxaAhWlrnjk=; b=TPKRKqJsZ1sq3ReCz/FB53sWA5YQAFcWMHubucx8ZRU87HpSl73teIQpUdLKh/oVWi Sx0SE7NnvKLtpYlgRJeXeHmRJdOgw49NwiTTR/t4uoZvVnVdyqomo1lb8TkBsYu6gd7D +yzH2GG/cEm3YukzSNkmUMwi9YpKE31wGSYX5/ClMOUWmyW1cgEL21KXWVpDUxnRXR4M TNnfP1OIq3lW8SnodKNQinvSa6yZAvrxA9E4xoNZTt7TnR+0uByB14sipx/vnS7Hcp+w f8g03nHKRx29tCpW5pLyzKtphbxTZyFOy9eK83ij7XsQbb08t8klEVrvHp6mrDp7X5x1 qi4g== 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 q29si4909429eda.83.2019.07.22.08.42.45 for ; Mon, 22 Jul 2019 08:42: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 0BDA01509; Mon, 22 Jul 2019 08:42:45 -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 257E33F694; Mon, 22 Jul 2019 08:42: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 , Martin Schwidefsky , Heiko Carstens , linux-s390@vger.kernel.org Subject: [PATCH v9 07/21] s390: mm: Add p?d_leaf() definitions Date: Mon, 22 Jul 2019 16:41:56 +0100 Message-Id: <20190722154210.42799-8-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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: Martin Schwidefsky CC: Heiko Carstens 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 Mon Jul 22 15:41: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: 11052777 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 73FBF14F6 for ; Mon, 22 Jul 2019 15:42:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6367827F86 for ; Mon, 22 Jul 2019 15:42:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 573CD28433; Mon, 22 Jul 2019 15:42: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 C9AFD27F86 for ; Mon, 22 Jul 2019 15:42:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F3AEA8E000A; Mon, 22 Jul 2019 11:42:50 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id E77DF8E0001; Mon, 22 Jul 2019 11:42:50 -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 CF1708E000A; Mon, 22 Jul 2019 11:42:50 -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 6D9588E0001 for ; Mon, 22 Jul 2019 11:42:50 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id a5so26537342edx.12 for ; Mon, 22 Jul 2019 08:42:50 -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=BJbmZYW5fUf/b7B+2zsBXrBAhvBUeQhGQo93lyXL8wKVNyceycNsLOwkUZt8ALrG9i 4vAEp9ro8sJqfXagE1inYgPiQZocBi8jNNSQcemgC8yA8doeFp+1I9zhEE9iXRcgMtEd 7CuTtCV7JFlXtJ3nOewyxW2/VVQAVvU9wgJRHbCZdzE1tjvo7AWxtWTFlzRdJ8Sy2vzY aHK6GWVup9RhT1J9hrrYbFAwxFU9S26E3OIyIPzynOzxaAy9qbRRXAbekvW2gY8wJNuV r61BgpkiSdgqfUkPBL7xey05hOf+GbW3KG439kEXbrkG0TR7k8DOHla7d7VLTHu9mDRo JVIA== 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: APjAAAV7/wQ3Uz9U0p8AkLvJBPilW4Z8zSPD9jJ7Csoybf40d7cZ+cTp xvSfMrIySEXYxdTcDsxVkgKhmFJ+YIOVaBP7FAA2MOCH4Axg+xU002p+iqpAfr+l2Ok98pjbACB TRWbxs1fcQ18wSjB6R+pBQPHhM9D45bzc7YbCGhmo60yx2h8JDZnhF4jf9nX4s3MnMw== X-Received: by 2002:a17:906:401a:: with SMTP id v26mr54731451ejj.62.1563810170040; Mon, 22 Jul 2019 08:42:50 -0700 (PDT) X-Google-Smtp-Source: APXvYqw5HcUT4FtM41Jr5HxxMZOXqbB98Ft7w7NdPfzyIxrhHl2mMDnFv24WsUf5aFU1ngwlMSac X-Received: by 2002:a17:906:401a:: with SMTP id v26mr54731380ejj.62.1563810168869; Mon, 22 Jul 2019 08:42:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810168; cv=none; d=google.com; s=arc-20160816; b=rqkmTG5XO2rGVxP9UjOWyi8Ij1e9J+RLjpEvscr8gytC+rSZhf+D6kdz+oNI/sqwis t8xPB4qQyjtvbwj9NUQImxeBBRroTxSUwZFUK4O9+E+HoyqENrmaSAyTf7eb83Q3/tL/ eb3XuiGhkz0/uhmybdaoKlz/eXrJZc33W97ckoAeYX1Vz2Y2L7GRNypUPmXcJniK5BiK 6Tr1yATueGghz0+JUsRJvd//6/qPYoKeeJfc0olP2jhvjjeR8bKpbwED0CdF9482RWPA aiTQz4IRZvYiYnw60O76PsYk9+csDBCV9D+bPM+JVWa0ZKW4KJ+EtwaFWvNeHCMFZZ0k 94xw== 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=NhlQvnzKrCBnT0izA9jCai8wvoCHvzdjjFpk1DcLlZm+8Bbsp1kc+Mb5a72wWsnYQ4 E5ROj8Rx77uwe+gF384uh/qMhGF93JZjnkOKsyBy1Yst/0ivaf6cBr9oOU3a+PEHWuZj UDxpDDRhNZAvYHLTpDacFe24gm/u/N7VgQBDPfrfQUGlVhCa8eIN/7NhvIzGfUPtrBJa KU+uCgu4C2LiiHwgmNKq0GiBzrWZb7B9g8lnMGq4DMQARZsaREXYyuMe7wtYf95FTU/u lorj8k/iXxoewupCmnAc0pQldfX6qvRP2o5zFctHIdFXkpdYDsL8ebeHw2qT+flga3up Y0/w== 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 r2si5156014eda.213.2019.07.22.08.42.48 for ; Mon, 22 Jul 2019 08:42: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 0D49F1596; Mon, 22 Jul 2019 08:42:48 -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 41F493F694; Mon, 22 Jul 2019 08:42:45 -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 v9 08/21] sparc: mm: Add p?d_leaf() definitions Date: Mon, 22 Jul 2019 16:41:57 +0100 Message-Id: <20190722154210.42799-9-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 Mon Jul 22 15:41: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: 11052779 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 9FF0D14F6 for ; Mon, 22 Jul 2019 15:42:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8E22727F86 for ; Mon, 22 Jul 2019 15:42:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 826C1283BB; Mon, 22 Jul 2019 15:42: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 EBE5527F86 for ; Mon, 22 Jul 2019 15:42:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 91FDA8E000B; Mon, 22 Jul 2019 11:42:53 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 884968E0001; Mon, 22 Jul 2019 11:42: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 611128E000B; Mon, 22 Jul 2019 11:42:53 -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 07CF58E0001 for ; Mon, 22 Jul 2019 11:42:53 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id b12so26540698eds.14 for ; Mon, 22 Jul 2019 08:42: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=nxKy+dHCcQ52WwJbQmiHduBQhK1uZKwGIaDaQ5m0n9k=; b=LpmVvY3DlHz1ShUe5CV1NHYD6s5XWC14PjQ71FWNbIn1VXkhW9NAytqI28UMk6VaZT sVfEiLAM+TFRymuX7hIYi7Hzc4RwWGBmz34KuOd2FmWfgfp9/iTQKMT7Gfu/gHX+b/rx EHZjf+lMqwPvNZewl3tHU82WdhTapDDyTyFYSJ1MnCxaEuz/DkVZpD3e3FZKVdir573b tHar7OMNZayJJVrLVSjpMhP2UZlQOFGKjzXBLfqVsBB/vUd1wvyEpibeyqSMnKC2qA9I ppRbEBkdKr0JZRFZ112+67OBA0JCEoedCu/RZSmfru32RRwJx+ZfC7j47xOKoU0tV8/b dYEg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAW9rah/7XnFoWC3MVM6zYe2zo05tF1B0n92YXP1fOp6bLygpvWy 5gl60CGTQC34UAYeVI0p6kzjAVk8BBCTtJJBTDthmymDN1CW21fYsVUr2ti8Lcp8awJWQuh611j Fjl/2mn0IPvbilH8nS5/5fHXgi7/pNNpYNt/N36xEFmB8FL7hTJQZ8Bpq1uIJrdisNg== X-Received: by 2002:a17:906:2599:: with SMTP id m25mr52881137ejb.177.1563810172549; Mon, 22 Jul 2019 08:42:52 -0700 (PDT) X-Google-Smtp-Source: APXvYqwVQoV2py3oXnj0vksbitZBnkbHMltjaRBZv/hT09wKmsLrWOTfYkNW3nLUOv+uSgV+uzbE X-Received: by 2002:a17:906:2599:: with SMTP id m25mr52881076ejb.177.1563810171605; Mon, 22 Jul 2019 08:42:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810171; cv=none; d=google.com; s=arc-20160816; b=dIxVST4BvzmLSTOhlL91bWgrn2OJXI2b0ByjR5GNlJkZYtNoPWfLUxjZlS4N8T02pA j9cvF94Qy246tb2KzLW87aQ0JmTpBFKWs4OleNWB5ln5ZVvGfhqA0h1HiRxSmvX68qyY AExVPuX5PUqrisYo4cGrz+wxO+yROU0kk1aqqe088UaQZmH0A5d+P+/MUYrzfhcClzqT r6+E8mvzQitS9CUQdRourzybPtR5f4nPJU4RcRjMVyOCwcIQrM2frmOvmWPBs404HHV9 TIvMXTpYOpnZksXBK2/ocD1iMsN2ggO2yNb6AmGRWz60jTPh5HuF7B0a3txJ24Do30sN jokA== 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=KuO9OqxQ8be+A1DQfXaRRTlOhZ1XVpPRDwjYnhIzKpyNDxPV6BH2C3H9ow2Vr+8oeQ mkIshWMcWEwgj139eoCYODalHHnnfIR1IiUqHU81c0x25HPWXy5imXKbJ3cTXASDqRNE RGcobU97I9JQOEJ0bK3Ge1JdhAaejAnYXEqXfxfbRdPQaCFUs9ygQRA44b7cmzY1QhHT 5EmLAg2ARoD0gROzIkUiGMroOZKpLSz2K0wGiqhAQoYyapMtHA/Qdxy7EfosNkWDejAS xVCu52wLJ3uYoPPJ45dIN3NKrakNFW6akSi6otjbRK35RkD7D6LHZqTEPBZMsSK8ndmo BoQw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 oc23si4326684ejb.369.2019.07.22.08.42.51 for ; Mon, 22 Jul 2019 08:42:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 CE1BE15A2; Mon, 22 Jul 2019 08:42: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 430953F694; Mon, 22 Jul 2019 08:42:48 -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 v9 09/21] x86: mm: Add p?d_leaf() definitions Date: Mon, 22 Jul 2019 16:41:58 +0100 Message-Id: <20190722154210.42799-10-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 Mon Jul 22 15:41: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: 11052781 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 93C311398 for ; Mon, 22 Jul 2019 15:43:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 83DCD27F86 for ; Mon, 22 Jul 2019 15:43:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 76884283BB; Mon, 22 Jul 2019 15:43:01 +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 0088B27F86 for ; Mon, 22 Jul 2019 15:43:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 21ADA8E000C; Mon, 22 Jul 2019 11:42:56 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 1A6258E0001; Mon, 22 Jul 2019 11:42:56 -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 EECCD8E000C; Mon, 22 Jul 2019 11:42:55 -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 921328E0001 for ; Mon, 22 Jul 2019 11:42:55 -0400 (EDT) Received: by mail-ed1-f72.google.com with SMTP id f19so26545958edv.16 for ; Mon, 22 Jul 2019 08:42: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=o6ZQFuOhWTxaUQNBYLtlSVNvlI+gAHzIZURutjw1lXA=; b=QECUXUVoo9laINN2Ime/IsEhO8jOMouua34dQoMs1A63PhpDjESxw/5Aja5Jfhska7 Kv5ytBla1Gyzox4KKa06V9jfng8T0iztqLK+79+srhjEIYuhp7Ax/e9vvXRvJn7DE4Tk SzES5kJYNWkcaYbW2e9ZQGGflzitakyWWKNbGrtx/Q8GQAnGYWUwaYMgDZwe9aH8v2ZD nMmq399y3l2HfINHFWIqhcKMuZFWF0TsA3RvTYSwtZOvjjagBLV4w+0nBaZ9AX9EHQJ9 6Y6mZ4SCIr7YjdnKS2nW29zjoqKJmg60xQaTMWk4BtgiV8Ded1Tx2ty/+vu8Zj8Ju9XE tj8g== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAWhA9YLfEIdx64hBvmIoWW9NZA7HSNqYEAMp7sbmyfQDipZV1DI d0RJF8snbi7ihP5W/7TmEDljk3usom7WUqfc30V6NJ+0iKvV0lt+8PsNpuTzWgV4R+30oKPie6W IK7AbbKT4S8YNbQW3NfML+BjxMZHOX8AsioX0AuhzoTVqZQxrDnfZPvbcAbP37LcHJg== X-Received: by 2002:a17:906:6c97:: with SMTP id s23mr54392727ejr.136.1563810175176; Mon, 22 Jul 2019 08:42:55 -0700 (PDT) X-Google-Smtp-Source: APXvYqxNgM0xt7u0YwrnLkEwyMtpBBgBSxJj0s9HxQLuucoVLxUMY00fT0D5FPrpWVk1sK6nFWL1 X-Received: by 2002:a17:906:6c97:: with SMTP id s23mr54392673ejr.136.1563810174371; Mon, 22 Jul 2019 08:42:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810174; cv=none; d=google.com; s=arc-20160816; b=g3sKpdKnLG8fU0yxhNhtpLkKQMBtvP3AAuXY0KpEzRdq/u3KvXwnBh+4yITas0sSc4 L0sqk/WlHQyfQS6NRnd2aOk3k6c+7tLtpySNEHEtBdioXgF1U4+yzhC/+5b0wSos7UdI iTdw7c8DVC7khZPuD8XjBgDV7NtvyhFGyEAqEW9VGRgdsbr4lHd+pKdeMGt0X+9xHYlW AZsQS+ZEkUxGHV8aQ1v2QU0lS5hdxxWMDlPUD7SIQSuExwGN7wdrDw2Nl1wwGiio9MLo Df74hCB9cPXAq1hKZXBC+en0wzz2JsT17BoDbdFuyjDDpEQfYmPCIqnJ8yRreerr7pp7 CCtg== 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=o6ZQFuOhWTxaUQNBYLtlSVNvlI+gAHzIZURutjw1lXA=; b=kLPzmqYeh0XJ3GTPSXDLjgMivKG0a9byZU8QD54Q4lzcyeQpP/tf+8MVmc0Qx5vRJi uu66tQFnOlNs1Ly4s6PpeQeMrhXFXRAwAre3IURoPhwx6rWvauGElw+hUroRy1Ml2MLo DKnVhwHgLZ8lUBb0vSIgqpSAAIocLt5BdMZ4uWeQe6iOb1SK2dUdZZyBkZKt8GqnQAqW kGl9EFxALjbkOV31+XK8c6JwoRFTA0I8Iem2yYGsGay3lQyUzpVHyEmGA4yJsMIwmmh9 YTBsXdzNhvu9MWoCgZ6b0mBgyEa5aXakSqoX8fyWSO+YZYi17YWkJpsx22Mfa95KpzOa TfQw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 k27si4060350eji.268.2019.07.22.08.42.54 for ; Mon, 22 Jul 2019 08:42:54 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 98F461509; Mon, 22 Jul 2019 08:42: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 0FAD03F694; Mon, 22 Jul 2019 08:42: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 v9 10/21] mm: Add generic p?d_leaf() macros Date: Mon, 22 Jul 2019 16:41:59 +0100 Message-Id: <20190722154210.42799-11-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 that that level. Signed-off-by: Steven Price Acked-by: Mark Rutland --- include/asm-generic/pgtable.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h index 75d9d68a6de7..46275896ca66 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h @@ -1188,4 +1188,23 @@ 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. + */ +#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 Mon Jul 22 15:42: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: 11052783 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 A740A1398 for ; Mon, 22 Jul 2019 15:43:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 962CA27F86 for ; Mon, 22 Jul 2019 15:43:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 89A9F283BB; Mon, 22 Jul 2019 15:43: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 EDE2C27F86 for ; Mon, 22 Jul 2019 15:43:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 06D678E000D; Mon, 22 Jul 2019 11:43:01 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id F3E2E8E0001; Mon, 22 Jul 2019 11:43:00 -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 06EF18E000D; Mon, 22 Jul 2019 11:42: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 A28AA8E0001 for ; Mon, 22 Jul 2019 11:42:58 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id l26so26564296eda.2 for ; Mon, 22 Jul 2019 08:42: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=dPEWpckwXrtBUX8yDOGJOQcBqCT/ECFEDWDvh1GayzY=; b=QJswxKaT9HtsdeK0URvDOP4mYppSYiknQrmFIPcNw31XULS9DxGv42jowLY2ygHrb6 EEUnwzABlfkATj7FA88NDI2qIoJhZGOigyqeg6W4jTLkAXOmH2UZlE3CpyCz0qwvMwKt jsVbZX4TwD+ynV7EVzo/LZWLw2pobJcf7qPh0asIQ/YXtvrzETCgNHC1P0Yaw/sa4ASz MVa5rGokShECQHOSRo3P6leBWcfya7wQfG0upljicM8GVE3aazJMqBtzU0qjQpzQBf9D 17oldqSQpg7jxgL7oUYKpOpk3cl21so+FwSWq67ml5ZFcMA6pfwKuZrRLUxR2lqUpoqu AQew== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAU/o/NkSrQ5ho8cl/uQsz8D3uRydjqbmZNZEt+zyYk/n+wJIREw 5s3ynSiGL1kyL3brWTTt64YdrrBOed4POS9+MA2rfHogKl0RokxC8Y3o59FqEap4BuLH83+zr5+ MmZVnPBXxZWQxm+CTKO/Mz7uJULQ2ZFsyebB7aGOxcdtlApjt0kfl9ArmRM0mUp4BDA== X-Received: by 2002:a50:b635:: with SMTP id b50mr60714847ede.293.1563810178224; Mon, 22 Jul 2019 08:42:58 -0700 (PDT) X-Google-Smtp-Source: APXvYqzyipgJNHsNgUv1fwwr42iQqJ/80NR+R2YocYkugl1aNs+wxNG+xunWLzkDaiuF9r5AX0ut X-Received: by 2002:a50:b635:: with SMTP id b50mr60714788ede.293.1563810177359; Mon, 22 Jul 2019 08:42:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810177; cv=none; d=google.com; s=arc-20160816; b=Wd1HThr/IdE5sd1H38EZrN3EkJ6s1me6SX+CLkZDSyV22V/m8tWnh8ZE+BOTQ/VrVo FyX0cqGC1yuNzXC/0WylEOnYgr8IsaofGS6mMeXLtxlPGQxCsXFs4DI6WhAGJLUO4wH4 rQ1N/qbxyIjXCsYRXX2KrwbRt2ztJmL2AaSqKKpa1ebTbEI1TWnOouaiY28EdsgKLXGd /CPSp21+90QBbuUdnAdZ9K/gnglJu8oKBHAJNRqCg/WfmM3l9iaAP5yEbc/BLlzJOt+U 6NbevJpr5+ZtbC2W0hUN3z9b1jSUzhKk/VM8BzffiPeetm+9+0UmVZ0nnNdVQzQ3sTQj C3sg== 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=dPEWpckwXrtBUX8yDOGJOQcBqCT/ECFEDWDvh1GayzY=; b=VX408uG+PXOG4QLfISvnGKKhikG9GnOsbMRmWOrGLOwxcCF1abSFC6am1ScAYqOS5O XuBAmHTfmggcUzvPJSwfOSKRHjlV2Sxck2VgXSpOSno2luFzuuW9NmT4NlsjHIjUlin8 kS6q2GrLa9+HgaEd+NeK84ECPZEvKrvseufYdhpkZleOm+PNAmRjTTjYqPvpt7Lmtnji UWuhu520pstNJX5B1ajID/Sh8sz65bWmq9bVQkKRQLzUx2Z9NqYUBth+Zp7EQzNV5Dpo kI26mfsMMjPKaHugzTpKU3WrUVvQARTsvW6mxsXnsMikytyJetRVuovUvXI2yGgFVBjN QR4A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 nm5si4553120ejb.223.2019.07.22.08.42.57 for ; Mon, 22 Jul 2019 08:42:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 65B0B1596; Mon, 22 Jul 2019 08:42:56 -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 CECB03F694; Mon, 22 Jul 2019 08:42: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 v9 11/21] mm: pagewalk: Add p4d_entry() and pgd_entry() Date: Mon, 22 Jul 2019 16:42:00 +0100 Message-Id: <20190722154210.42799-12-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 | 15 +++++++++------ mm/pagewalk.c | 27 ++++++++++++++++----------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 0334ca97c584..b22799129128 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 @@ -1455,6 +1454,10 @@ void unmap_vmas(struct mmu_gather *tlb, struct vm_area_struct *start_vma, * (see the comment on walk_page_range() for more details) */ 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 Mon Jul 22 15:42: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: 11052785 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 E922F14F6 for ; Mon, 22 Jul 2019 15:43:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D852527F86 for ; Mon, 22 Jul 2019 15:43:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CBEE3283BB; Mon, 22 Jul 2019 15:43: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 519A727F86 for ; Mon, 22 Jul 2019 15:43:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ACD288E0001; Mon, 22 Jul 2019 11:43:01 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id A57658E000E; Mon, 22 Jul 2019 11:43: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 8F8E68E0001; Mon, 22 Jul 2019 11:43:01 -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 279308E000E for ; Mon, 22 Jul 2019 11:43:01 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id l26so26564339eda.2 for ; Mon, 22 Jul 2019 08:43:01 -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=O5b0jt8IMVi1V6KHwfH+uK3vbh6hz5HIF3rYe15lVxnUNkMfauKezw8B3Rl+CB+GiE FW2I/3K3l7mvwh7SE0O6Fxfe0bLbQ71gs1h3HNd9J5AOdSEz2WvOqGdRSWgITAwjkeOi m54Z6mtPoTKNtxk6FB36IdrZDATYFnuPAFIz56wqAuy7GaCZfSaphl21mso2EuNe4wR1 uUQSM2st//UqptDbWZIrlDoe+eRJlk7Q7xbM9X4/I9ae69DtK04zG7c6FXFyYcNe/Jl9 DZqk9udGLdGg3hwswMFh/Nr38WQ2ejxNjFlEkDUbqWeFU1AIcSqlOAHjRU0A1BEAFKdG rg7Q== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAXCD4WzgTiWvHc7BQTrPBBihNEXXzTvS20HlCpbjjMM+xu9UvzL vnCvXDJVBu/CNRlPrpZbDov7b4fqLqYu57rDaj+3VB/um4w5mQoOg0auQQNI4abkg4SbCpz39/g JjJiE1iB5PNLuX3CcELQ8prv04yrTMsB2i4Y82vS8UfH5w9dnrRjR/IBVmNi36rcTPA== X-Received: by 2002:a17:906:1496:: with SMTP id x22mr54267276ejc.191.1563810180741; Mon, 22 Jul 2019 08:43:00 -0700 (PDT) X-Google-Smtp-Source: APXvYqxba3NUI+BcKZmATHCh03tAKpnNWeScK4YFUuyejk9bLd3Ey8PbqcgDol1ZaoS6NZDu3izs X-Received: by 2002:a17:906:1496:: with SMTP id x22mr54267231ejc.191.1563810179958; Mon, 22 Jul 2019 08:42:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810179; cv=none; d=google.com; s=arc-20160816; b=Dm24tJrGAvB+9Qo4xwzqngawxwaUFIwo2TmZB6GWEN5Boh4cvg9xkIhEWkg68v1+Ec noQus9Tuw/mEfkUqD4AT4tPrRbzQH1uuJDOzIKTd/BhUAHUMqxXl81THzJ3+fZxFwmTw sMhOBdi89hq7wfZV9JJ7WNAXvhrKDDkXCe4ziHSZbG5kCLhzWcXUVrrhjtPKGBpw+o5p 8t1rBjGxOu9DCL8lHaZ6FD9PAxe8WJnB0E3DEeBuf/Gy7EZveAtNcaU2cz6AU7eqMfXm tvton/x5ToWXEvgqO/SWFOBjzTGXB2a0ND1Ir4Difmo90FJQYHbgZV1uUi7fiV2ffWaF gUag== 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=DuItzAC2wslf4j+neoCjcpzo6r3lzac9OttpFqvytr92U8Z3931X3pHe2FYXhJMK2+ gP3pe06dfhV3MWPyUnG40t+mA5Y4f0psUlZFv7S/DyOn3uz8tOtAgflVf8jFI4FtH9lE TkqTd62edEn/gDg//crUzpybVHLhcdR3na38CIRs6kupF5FOutSM+A5VwPOAZckPoceY 3W+0dKH0rTBx7KNzlIZNiVNvYj5ezlXDLBCj4UhZRBQJfO4fdqX/lcNUGKMNdhssvZm0 Odviul747Ptw/mRADwXEccUWHBTwdSp2YTSavMVwursWH7eWYtIyLJ+OGukJlWg2Hc9u 45+g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 w16si4843449ejj.232.2019.07.22.08.42.59 for ; Mon, 22 Jul 2019 08:42:59 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 30DF515A2; Mon, 22 Jul 2019 08:42:59 -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 9B72F3F694; Mon, 22 Jul 2019 08:42: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 v9 12/21] mm: pagewalk: Allow walking without vma Date: Mon, 22 Jul 2019 16:42:01 +0100 Message-Id: <20190722154210.42799-13-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 Mon Jul 22 15:42: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: 11052787 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 8360E14F6 for ; Mon, 22 Jul 2019 15:43:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 720E427F86 for ; Mon, 22 Jul 2019 15:43:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6556228434; Mon, 22 Jul 2019 15:43:11 +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 D1E3D27F86 for ; Mon, 22 Jul 2019 15:43:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8D1698E000F; Mon, 22 Jul 2019 11:43:04 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 835DC8E000E; Mon, 22 Jul 2019 11:43: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 6383F8E000F; Mon, 22 Jul 2019 11:43: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 0C2088E000E for ; Mon, 22 Jul 2019 11:43:04 -0400 (EDT) Received: by mail-ed1-f71.google.com with SMTP id b12so26540976eds.14 for ; Mon, 22 Jul 2019 08:43:04 -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=krhSst1Rr/sUlZpo7CKXyP+sWCPROlf89rJ0GXnJMfE=; b=aZ43IRFbvSsTYSddxAP7ippyNZFkY3shilYKs97jOf5qkFJowh2nlReIk4MF43avuA gMuXo+EMIWdNoN0hQj/f1RWnHr9lyQJRv3rHA5XYi1j1A4wwpnBQf6/H2LzDON/2aNSq 5wF/Tm+nxgCUMAkucP+TKpOC4njn+iaL51OGmMeazMR8te9URv42ORJ5MoReReNlSotJ Xbu6tSIMrhXsS/JFRZYfRmxFjdotCN6JVqw7IbcRDXdNssol7z5l91NHxCTovzMNGOQO B10tUpMP0MHYAhkQh6oFwtEQKNAoEshLJOrgsMSGGDAWcB5SCam2cG/qGw6taS1tAK1A GZug== 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: APjAAAVesmaR90Y9TquSWCleHqsrAO+wNhYZBKfKYJUSZf0YdIMgJGb/ Aj28rOhI1WchzZvspczyzP5EvN0CJTh74RZYqzkoA3upetdG9E/hvw3pJaa4drJyX9Wr/60zRlo sLkipjKqfkVxXQ8xSy+u10aoZGfxBnTSiCUjBCiGq5K/fndGuNVKOjrUpp+QrttGFmQ== X-Received: by 2002:aa7:d0cc:: with SMTP id u12mr61516236edo.212.1563810183626; Mon, 22 Jul 2019 08:43:03 -0700 (PDT) X-Google-Smtp-Source: APXvYqygWNehDzd8X1OGJBbDJlmPTNX7KVskcgwpHKRHDPFUkTlZNyeztqjF/d40ElLxRRNAEEAI X-Received: by 2002:aa7:d0cc:: with SMTP id u12mr61516181edo.212.1563810182878; Mon, 22 Jul 2019 08:43:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810182; cv=none; d=google.com; s=arc-20160816; b=YVf8M+OkHpVW8TMfSk/I7DTVCwLT74cVs+VL+EQUhs0APQ7xiY0iPoyFHmaha7OhRU IVh3lVppzX1FaD+NnsVE4TtJxM0OT3PrwPpFQgnpRRt8wccDfDLknvuN8iFFzVe0qPpf Og4e1v+K898+Djs7jVG5idHDBuv20sNLRtoNMgmy+IYX+mU/DRPsGLVT6q/ZAZeut5l3 RlCE1dt2FyB39IImk+C5IrdV5hjal9o7btKrbmEPDP/5ISf/1UQ1U5nDnn+ZKgZ1W+VO QtvkThcwaiswHFt3qrOqYhvzrbZMMtkCw9GPEWl2bQ0Pqny1F4iIaxDmOBslYZDrQH4N eOiw== 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=krhSst1Rr/sUlZpo7CKXyP+sWCPROlf89rJ0GXnJMfE=; b=NvpPQqdrOPT5HOW/48eNVG+KuSeATNvY+pRls92wEmDiK/B8BDEYFNwdzR2EUu/gEk 7UWZzfkJnkRAIkwJb/reJJD3sQnWrV37FFj213sgfaCDLRyRxfn5b4viPyB1smlFRIuU E72fZ9Z9AyzJviKMvhd0Nt5KKyxBzHu87EECgWgMmB8eLHmBCgius7Tim0GGi04pvhP2 xbdtsYj/PLEp0OS7TR95A1FFm7pTQv10WIGPy+2KPcwA4VskIc/VJXJqmjy66eSwxPXL OtelAxYGz39bViOKUhNvLS2bbdGb+Uf1ZQW9eOMQCxE9QlvrOZ02mJItZwxuDstRt7C/ 3hjA== 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 w25si4820009edt.27.2019.07.22.08.43.02 for ; Mon, 22 Jul 2019 08:43: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 EFE9E1509; Mon, 22 Jul 2019 08:43: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 66A7A3F694; Mon, 22 Jul 2019 08:42:59 -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 v9 13/21] mm: pagewalk: Add test_p?d callbacks Date: Mon, 22 Jul 2019 16:42:02 +0100 Message-Id: <20190722154210.42799-14-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 b22799129128..325a1ca6f820 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 @@ -1471,6 +1476,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 Mon Jul 22 15:42: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: 11052791 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 2D2B414F6 for ; Mon, 22 Jul 2019 15:43:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1C98927F86 for ; Mon, 22 Jul 2019 15:43:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0F39F283BB; Mon, 22 Jul 2019 15:43:15 +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 A03B727F86 for ; Mon, 22 Jul 2019 15:43:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3C7558E0010; Mon, 22 Jul 2019 11:43:07 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 354238E000E; Mon, 22 Jul 2019 11:43:07 -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 1A52C8E0010; Mon, 22 Jul 2019 11:43:07 -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 BFF158E000E for ; Mon, 22 Jul 2019 11:43:06 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id y3so26523716edm.21 for ; Mon, 22 Jul 2019 08:43: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=x9omYML0fpa2kR4hvPDbBVUFNLXAt+KfSjpOjGilB2I=; b=iiQ/vfSX5bqrY5rlfOFvCZfUwlSowv3jfrRs2J8nRhr6e6m17weZeU3VtmstFh72Zf b1lS8IiOpEjHgTZy0TE7V0Z+6DX1a6o531UU5ia5S9zegt8Dfl7rhiXMSYC8rT5zvDIw 1pLaoCaeQPbJ4IwZbP31YkJdCYfIRs+8TJKdiu7Hv7ciKVSdO5p7qTs/WgRXlNqtF5qf XyOH+TLHJj+sonOZtx5d9v47S9hkakKHFem0TQvKbYAZLTR+PF08n4DdGkRibg+q/K3k sRk7hkFOEVSCBLL6SiH3MwwJ9cqu4Wzwx6fA0/QEiGcm9jE3/Nugdgr+75lmZMl40AvV AsnA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAXobPZ7o9DcfLBjnD7J0BsOQQAWnq8Ulcx5G42nvH1QVpHR0l0A ldF1W1nTVS3pXy0nOpRw6fo7Wr+wv3DRLAxsSkF456VPuarN2IUqzq+tWxAlwQ+d0e1uxeRnfq3 DIRrBQU+oxSXMsd2iUGWSi74mkLUyyjRuLC1nHfGZ9R7pvn8D7QRoTvmdUw7zKvYCWA== X-Received: by 2002:a05:6402:12d2:: with SMTP id k18mr55712591edx.197.1563810186379; Mon, 22 Jul 2019 08:43:06 -0700 (PDT) X-Google-Smtp-Source: APXvYqziY2d/Sp3BCPwcM+E0j69f19djjV7nkbnV6exIWXipYe2V4Q8bojMLTVhEUHx3VbPRB5/e X-Received: by 2002:a05:6402:12d2:: with SMTP id k18mr55712530edx.197.1563810185603; Mon, 22 Jul 2019 08:43:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810185; cv=none; d=google.com; s=arc-20160816; b=zLjw1uQSxRVDGpLyGh1RfK/8LbLiBhTlEt3E/X8BqJJecABDgOOuef0sTfzgcwwfzu jxra3MrsqWT/4+mVyQOjLaYa9C2BvNanWpdXbCRMGmZ6QuVldNa2JFYRgLZ6zwAeArO1 lAzd40w0Lyk6FjJfwEXhOouL1HPT5tQY+wQBHvbeFO12/vsFk0vK6QjARggFpuY1lLtL qgTorz24tAkxKWsXxtdaClcaU+gY4XFae55N4RdQ5ZiqslIy1wWwx4c37DrFJGlj+YgV gEhUesjxduAlNwmyNRP9cBvhuYeoucC5dYHajfeKvd+AN9TYoi0sTmK8Q6hA7enxR3nM vlHQ== 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=x9omYML0fpa2kR4hvPDbBVUFNLXAt+KfSjpOjGilB2I=; b=kQjEHhakMGmCWE8a2CIUx4V9Xhzd9nCLj7caMXt50N5FkyzPnhcPjJkNcY0G5ac0Fv 9yxW5FAHH5lYXTWXDT7YD6+NHiMxc+peZm58CFSHdX4sjX5PkH2SAEVWf2ENjKdIj9m5 BPHHOxu8JL+ppWFrQIGG+LEPjkMb3pDcOAwx030eeoY72cb+RTePmSLkLL6OSXofHdPG vaQLYAw8N2aUrzRlGHnLQEofdDS6CaUkYlBqKBRAtjKNq1FJfWCMOF9mG/jhLih9dvsW stwC5Ds2UOPYkIjMjaXDwlZiZVMutp6h/XzFb/qgSU0z/N8zbGOdAMVCmGEK8CY5cCQI SIWw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 bq14si5387003ejb.15.2019.07.22.08.43.05 for ; Mon, 22 Jul 2019 08:43:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 C90AE15BF; Mon, 22 Jul 2019 08:43: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 3192C3F694; Mon, 22 Jul 2019 08:43:02 -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 v9 14/21] x86: mm: Don't display pages which aren't present in debugfs Date: Mon, 22 Jul 2019 16:42:03 +0100 Message-Id: <20190722154210.42799-15-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 For the /sys/kernel/debug/page_tables/ files, rather than outputing a mostly empty line when a block of memory isn't present just skip the line. This keeps the output shorter and will help with a future change switching to using the generic page walk code as we no longer care about the 'level' that the page table holes are at. Signed-off-by: Steven Price --- arch/x86/mm/dump_pagetables.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index ab67822fd2f4..95728027dd3b 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -301,8 +301,8 @@ static void note_page(struct seq_file *m, struct pg_state *st, /* * Now print the actual finished series */ - if (!st->marker->max_lines || - st->lines < st->marker->max_lines) { + if ((cur & _PAGE_PRESENT) && (!st->marker->max_lines || + st->lines < st->marker->max_lines)) { pt_dump_seq_printf(m, st->to_dmesg, "0x%0*lx-0x%0*lx ", width, st->start_address, @@ -318,7 +318,8 @@ static void note_page(struct seq_file *m, struct pg_state *st, printk_prot(m, st->current_prot, st->level, st->to_dmesg); } - st->lines++; + if (cur & _PAGE_PRESENT) + st->lines++; /* * We print markers for special areas of address space, From patchwork Mon Jul 22 15:42:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11052793 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 A567014F6 for ; Mon, 22 Jul 2019 15:43:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8FD9A27F86 for ; Mon, 22 Jul 2019 15:43:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7FB72283BB; Mon, 22 Jul 2019 15:43:19 +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 ABF8827F86 for ; Mon, 22 Jul 2019 15:43:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AF4108E0011; Mon, 22 Jul 2019 11:43:10 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id A7EB18E000E; Mon, 22 Jul 2019 11:43:10 -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 91EB48E0011; Mon, 22 Jul 2019 11:43:10 -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 3B49E8E000E for ; Mon, 22 Jul 2019 11:43:10 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id c31so26565473ede.5 for ; Mon, 22 Jul 2019 08:43:10 -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=mRAg7akeDM8fgswLl95e7A2l0UenagyfIetKWlaGl6Q=; b=IALhfZozkqk4SoNT7tLsCb9il0vkhfCA6pBjgRXlX7TTU7aivC4hW0ndwPt70JVj5N 8n3sGMNwqU4hlK5S2O1/RZy5O+lbbw2NatOVKyQNjBoI69Bvy3MZcxRVGqZ3n+R7bSQg OC8wSJKnl40jYMsD5LHGaitcN7PAxcNTEe+aLdSBPEIgpjgrcfcbQ7/N8q8fcUxwtNx6 3lSHlav9e7Ol3diUwI36FMIVYiBrlEtAOBjM0kI34B6b7UcZGiMaU957buppVQyecqys rnbRD6yBG3XiDOLcUlk6IhXy9HYvNrYQvEEQTrDLe0+sEsrvQqgpcs2aPHXSs3gmu44A iyrg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for 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+RPz7dlXECy43HXaw8lGaRdFStgNnOOIAGFEeYTm95vM9/xli UdTQDvrek71Aw96yROgiwZOa1xGb2Mau1+1OXBmTRdDe6yiu6CWGqYpv68BdBYA/GbPVmu1gAzq j6YDEnN13OtjYP8iLozdF9F9H6wZ9wAnDSXRSmX06qdfGVFZa3JqOj205IIcAO9S7Gw== X-Received: by 2002:a17:906:3948:: with SMTP id g8mr54365694eje.240.1563810189791; Mon, 22 Jul 2019 08:43:09 -0700 (PDT) X-Google-Smtp-Source: APXvYqwU7GGavWZX9F+C0krNxB/KCmRjegezn9El5zf6M23hDT1gyATlabVUUCJtj+zMeJAI6tfH X-Received: by 2002:a17:906:3948:: with SMTP id g8mr54365621eje.240.1563810188650; Mon, 22 Jul 2019 08:43:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810188; cv=none; d=google.com; s=arc-20160816; b=VxLNz3cbOM3uyyiuIzuagQOMetLXKGP3/Bsd3PXnANWCDfnavkwAhlpt9TPAlT8rWf XIbynhpg31i18nD3+NyWm2EL9xJLtWJjMCN5r7Ab8ACiZ0NOce7zqWcR900PScjUxidt KuChpktSTAlhHDWxkftmm/4vRdlFxL1v/dk7Xsx5dQRN2cF1dhZIJ1tbqW4j/MpKpIxi 6S5FPCZbSs+7PMM8WmWUBaVT4rqCw/mcNB9BjQH9RRaKzJ4snEmwNddhgu/7MwQexrVO KFqTKK2sPJZMK4tswA6/23SfoTsXn4qOezGGfvHj2NG/AY/of7wTTWZMA1LnmrOzCtkP dDxw== 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=mRAg7akeDM8fgswLl95e7A2l0UenagyfIetKWlaGl6Q=; b=nayvcV7AfPrqwSEaPT6emolGF7SCSGxyCLzq2WscDUkFG2wSNc9JCtqmzt/m761F5A wq3UkUBKAa8qvZQ4OeWxdYworPJSrFDtX6rAHj3Skp+0QjgzGAhpERX5kcyHv+RVk2qp kP1FDQPaawMYU8fxOHo/nNEz+G3ZiMbgd7VAldb8fXIgC47b6r88fgd9v/+AFR6VVw03 xnuTn6dTLAgiKyK/NIgfRN/3J3brvDeCsaCTDBdcZl7JQCIThfFnsw0Fn9u8EzfmwNLh PNXK2BepdZLhe1IrorNhM2K7CrEqNClgg7okErbNfsg0qxAhQuENUh3izY9V78YowXj4 zz6Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 ox10si4793021ejb.310.2019.07.22.08.43.08 for ; Mon, 22 Jul 2019 08:43:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 B403715A2; Mon, 22 Jul 2019 08:43: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 0B07B3F694; Mon, 22 Jul 2019 08:43: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 v9 15/21] x86: mm: Point to struct seq_file from struct pg_state Date: Mon, 22 Jul 2019 16:42:04 +0100 Message-Id: <20190722154210.42799-16-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 95728027dd3b..fe21b57f629f 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 @@ -355,8 +357,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; @@ -367,7 +369,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); } } @@ -380,22 +382,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; } @@ -403,7 +403,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; @@ -417,27 +417,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; @@ -451,33 +451,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); @@ -487,13 +487,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++; } @@ -530,6 +530,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; @@ -543,13 +544,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++; @@ -557,7 +558,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 Mon Jul 22 15:42:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11052795 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 3A9171398 for ; Mon, 22 Jul 2019 15:43:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2812927FB3 for ; Mon, 22 Jul 2019 15:43:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1C6E328433; Mon, 22 Jul 2019 15:43:23 +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 8C76827FB3 for ; Mon, 22 Jul 2019 15:43:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9BC5F8E0012; Mon, 22 Jul 2019 11:43:13 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 94A968E000E; Mon, 22 Jul 2019 11:43: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 6FB148E0012; Mon, 22 Jul 2019 11:43:13 -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 228A98E000E for ; Mon, 22 Jul 2019 11:43:13 -0400 (EDT) Received: by mail-ed1-f71.google.com with SMTP id c31so26565527ede.5 for ; Mon, 22 Jul 2019 08:43:13 -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=e+D/bNblaWHksT3FIh7wtQ5Ym2FMIUB1cczZSKIH7dE=; b=VDVtMcB5Gf2aRKKGj9dzUhf6koNbSz5UMr36lKFoHeLsT2Ycco9+Zo/v4SaOJ0PFke lb0CsN/Vl4f4BCiWhk6HOycHGKPbn22n+fEglsgfmgIhmzGZ37dzFFytOco4E2lKySuo fixIHCEJyvJmS1CRelDAigILM3QJ/NKWnz0xYEPELtwJ/W+Mbb0xdL/kc1ee80PTMkZU oEm72leUIKYplBMqN3Nz/7OBrN6FAEV8mUgMxZlJJQbXhj+YgcjZX3AldzLi+2c+Y6/l p3TI4VpaCD6uKnDBqnrFLOvCg4AptU7Ox6eQwLKlAwGeKFMQdJ9AU1TD/RMdKmy12Rfa eluw== 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: APjAAAV5HvidHxCqFmXl+Vot2tAWVZjS+FiHxly/2PEYxM1qZV8AXYTM OB4jKxgkWf3/qYr5D8i+rHub4Cm9l6rWrN21VzD8v2ohNp643jVVDHMwy9TEx19D/AlAsxNYV8z gb99EzFeixJ8hSwEaOU79wDAVxyFwKqdaRCOjTE4ZMk+2shlgK3AG2g1Q0ynjXvetig== X-Received: by 2002:a17:906:ece7:: with SMTP id qt7mr54335241ejb.155.1563810192697; Mon, 22 Jul 2019 08:43:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqwCIJXhEBsFNIk+gquF4+m2W66HXTO+0MoJIfqvqj6OkOhPy1WAQUWnS1I44cDQDtsdlv+F X-Received: by 2002:a17:906:ece7:: with SMTP id qt7mr54335166ejb.155.1563810191386; Mon, 22 Jul 2019 08:43:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810191; cv=none; d=google.com; s=arc-20160816; b=HQ+naqkjpeuQjv1MzjSFEM2h6R+GFJSujTGguuzV5ygh1zL+B19k6AOwZ/cDN6S2i7 RTnQ5dryH48fcrCj/dVt02o7RjJsk7Np1gu4MSsmyuotMtIuEE8rYtbP+EIvTVtUGhwr xutdgGel0JLmn2bZZsAw84/KfqDrA6jn9j+iv4uL6TcFevY5UikiY26ao8E/wnfJh/ix e8wi5To6DKA9FIEuHK9FyvWvA+x7lrYGVW099IlsF+/KT3z/oYdD31b+K+rSk4GHMK0J e2LGDwL7xjIu7jmbl5eXEMaAFCPJo64s7cd/wEjEtfZzeKxug9NzzV5kxkep2AQhaXv0 Tlmg== 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=e+D/bNblaWHksT3FIh7wtQ5Ym2FMIUB1cczZSKIH7dE=; b=pNPBzQnPHX/WF1wHGDgaHehdzFyYcyPcHa9crrk3q/VbtW2ULwi3SOmtfXg1qU9mop AoqVdzXIzWJ7kKrWPKPGunAWA/VOjp9zUHKujKqXap1380H0OObTJvAQdPpjUIdUSCpc Ach7UaEA7tC//FMdLnWeubP6o3l23LQDYj8hbBW9IIRN86h7AaQDlnDXs6E3z2T6/lud RWkGyNl10GD7a6dhIDmbfw6R4yvqtd31Wx+qAaDhPEQYBaGLr71qKIZrG931Y4yC584B 3vVcCYvkAkULTN0V34+mKdRcHXnMYAsd8q9rdnhFxYSiPpyfW4MxqzILCpD63ewljH/A 5A8g== 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 s18si4990902edd.291.2019.07.22.08.43.11 for ; Mon, 22 Jul 2019 08:43:11 -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 7F0791509; Mon, 22 Jul 2019 08:43:10 -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 E99833F694; Mon, 22 Jul 2019 08:43: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 v9 16/21] x86: mm+efi: Convert ptdump_walk_pgd_level() to take a mm_struct Date: Mon, 22 Jul 2019 16:42:05 +0100 Message-Id: <20190722154210.42799-17-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 fe21b57f629f..6f0d1296dee1 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -568,9 +568,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..9175ceaa6e72 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..47a4c6c70648 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 Mon Jul 22 15:42:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11052797 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 30ED914F6 for ; Mon, 22 Jul 2019 15:43:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 20B9228433 for ; Mon, 22 Jul 2019 15:43:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 14CC228434; Mon, 22 Jul 2019 15:43: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 7C89E28438 for ; Mon, 22 Jul 2019 15:43:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E76B88E0013; Mon, 22 Jul 2019 11:43:15 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id E008C8E000E; Mon, 22 Jul 2019 11:43: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 CA1AB8E0013; Mon, 22 Jul 2019 11:43:15 -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 73E3C8E000E for ; Mon, 22 Jul 2019 11:43:15 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id c31so26565583ede.5 for ; Mon, 22 Jul 2019 08:43: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=tVn36/eohke460Tf96oidajGI5MBBqVcYlCzmwYSLTY=; b=d0VATPwpH5J+RCklllvz3UtulNZLw7ZZE4jk5v5Bc5wqCChaPMAT6wbDUVMKNg3eut d5kFzzP5tq0chwZjQCb4cQWbwMrt/rVXTmILz/zOE74PbBYtSzQL3k2Z5mDN66v9VUoG bahnWihMh1VBz+67hff3GHVAQNGp57t2ZEOJQv6MR+9qcqa/Y8Y6yhVZd+x69UWZwfVc 6lnTWswJ0OnapZykDPZkgDUvdX0nmBsDPWFDd2SC9NANs8u7mr1GTv6UnB4c4WfcnIOg zZGii3quH4YJlYag1Qh0KyjfFE1pJCwz4Yn6y7MNlPKrJG0Um0e3tKo5hxdAWjv8Kfm8 oETA== 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: APjAAAVzNb17TqFseajRixB9+7Thf6kFDu31JH0DpNsVklIlhfcBfsjM GgOJcl0HDzkiJSUeToerd79BqQPTr4nxTgUabYi4g0wMuaDmanzNDOgfv3n/TSUWcJL+4x/UXpg 3vAC5F8sUmh5YyFGWwMJahyMMtGJp2sUu1GFJf0YvqquxbV8acZ2gX4NIdTsanGtgaQ== X-Received: by 2002:aa7:d28a:: with SMTP id w10mr60981546edq.251.1563810195062; Mon, 22 Jul 2019 08:43:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqyt3zaxH0bjhox8zOZXVCM7Hnp2+lgi4RNkOitnOXzOddYRRS/aVjOOGMiLC8KWL0DAwA6R X-Received: by 2002:aa7:d28a:: with SMTP id w10mr60981483edq.251.1563810194262; Mon, 22 Jul 2019 08:43:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810194; cv=none; d=google.com; s=arc-20160816; b=hLXpvpqiDuUBHIsZuJ+CQb+piu4OOPZP6n08WjVpdwRhufm2AHavQYii+17/Gspgcb zl2/dlERD2cYG0MKQ3pUNdQHn+KuX3WZ/zOV1sPbK6BymaAY9eibr0wcGlQC4HdRCit+ KSPFg2Qzr8QMLQD6n2qa4EoQ9V7+pRRwTc4WzKtKZeWJPtg68sZc6hBpnCYCy12lwMbW Bdg8D9MoD4cQaTRoisEkTmxlazrmtmFQjjlieZT6xueQfkl+X6IQr92/n9A1gYRA0CMd WVwJJ3l9uYuBJgWwGnAC7dW2gZwNOf0P1PWeBiAdnaTnLANE8EUks5xnsqJr52nHF9KI mFjg== 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=tVn36/eohke460Tf96oidajGI5MBBqVcYlCzmwYSLTY=; b=YFhFNmWzGBX8j/knzivX/BVrLWORdwINRXdFpE5JE/Y0qpkpYH9d1I1kDmnERAbETP oemY2eNLA1eE9x+r8DbuwJyZWbTTGMCPsot6jWdRq97QG/86A2MpdEPpFYIbZPRZlOPt NF0wQ9oycYwAwt0cSsv3y18sjCQkXN5KI3ZoR9HWMnFXwDmiAIK3DWuyhOd7TEc0gj1/ neV2HH6EOSyPmGqGCgOkjsMEulO7XUZjQjac4ySgi4BdHhFjR74tNcgpwwlgWGf3gIat DuATBBGAxPza0sWUBSNwKdCLWskGrve6Ud7xq9TOI5MpFNau9ccW/q2JXfb+lvYllVrz 0rxw== 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 b50si6638081edb.127.2019.07.22.08.43.13 for ; Mon, 22 Jul 2019 08:43:14 -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 4B3A328; Mon, 22 Jul 2019 08:43:13 -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 B4F913F694; Mon, 22 Jul 2019 08:43: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 v9 17/21] x86: mm: Convert ptdump_walk_pgd_level_debugfs() to take an mm_struct Date: Mon, 22 Jul 2019 16:42:06 +0100 Message-Id: <20190722154210.42799-18-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 6f0d1296dee1..bcaf27b637e0 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -519,16 +519,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) @@ -573,8 +569,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); @@ -600,7 +598,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 Mon Jul 22 15:42:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11052801 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 329921398 for ; Mon, 22 Jul 2019 15:43:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2230C27FB3 for ; Mon, 22 Jul 2019 15:43:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 161B528434; Mon, 22 Jul 2019 15:43:32 +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 6EB7128433 for ; Mon, 22 Jul 2019 15:43:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF0BF8E0014; Mon, 22 Jul 2019 11:43:18 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id C7BF38E000E; Mon, 22 Jul 2019 11:43:18 -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 AF3788E0014; Mon, 22 Jul 2019 11:43:18 -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 5B39D8E000E for ; Mon, 22 Jul 2019 11:43:18 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id y3so26523974edm.21 for ; Mon, 22 Jul 2019 08:43:18 -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=emRikM1OxiMr4txqEPA99/ZelM98uQ+z2aULjxVQqXY=; b=JMaLAbK6TlLkYgSGj/PAxFWMWf/9dONzhCW28YFW2B0HT/mVH9F5uoKXplx6jWc7so uqLmPFsRc95cNr+MHl/iVZ2r199qAYt47vhy5HvSSXnqh2gk87OD9GAgGYZJkgtizIwz aM687xDGjd5iKIw+9Io69J/xB0HU42R4wBtRzV9ojgeHdoOwCR5GLW+hcXCirn4Zdu9m JTGzIZ8hxUzqMKmjQMsnx0ENHViOYFYM4o9MeWgZ6G/uZhZ/hf+3nAAmk081qla3zy8b aB7xLKg2Q8gG27Bam1VfqABcPpHJ1zs6UUilKj59NM0kICEhBmICegR2ydbB0as9UtG0 DbZQ== 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: APjAAAW1LM/ZsDKvdprwmLR5kKzEkh0RJY95a4/AKIFFZj/zdobz2l/l bCoxiqplckWd3cPoCfbrvDL0XDCdYQAYphiCFuj57vRw73xycKPq0kFbp+d7MM+WMw5+K8nbgQO NlStmv2pbN79puLQwvjUEkg/oI+uRUrtEcuGu8Jy2iCz0iTp0UIHAXYfMAbFqQ7OK1g== X-Received: by 2002:a17:906:af86:: with SMTP id mj6mr8434756ejb.157.1563810197949; Mon, 22 Jul 2019 08:43:17 -0700 (PDT) X-Google-Smtp-Source: APXvYqzimau2JzWuPh6+OLUS3OP3aL8QMhqSsDB44EtCaWMytfMIjLVYtPp40NNoiBb0g107RdG5 X-Received: by 2002:a17:906:af86:: with SMTP id mj6mr8434692ejb.157.1563810196960; Mon, 22 Jul 2019 08:43:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810196; cv=none; d=google.com; s=arc-20160816; b=DAZT5DP7qnxy7dmX43TxYqrWodEwPtEuAqtw1Ho4XhOnPkeV8AkKAcOCmtwen0zku/ Kz05TAnoxFCtAbt9Kv5HN7OJbOT0IpzcGVHcynBcIFeAVOcP/1L5DVqzwcMggrBVeY9E k/frMoE8+MyYDtnOLIieDwPIdJNRlrwbuniZ7c5eFMZ3Rs+0tlHBLHqhojhjCnxeYBwf NY7Aw4BKlh4yTpNYdV6oOV9y0o+sWKXiBUGbeIXyMEGnH2fV8tGBq5W5tFpcQ3OVk9LU c0TyEKL7IGDis6hjOL+ibUTNtUbJgEV8NHTrtDIWQL6WQ5muRBIT4P1rmhIVzqXu0ctr O79g== 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=emRikM1OxiMr4txqEPA99/ZelM98uQ+z2aULjxVQqXY=; b=ZCN2t4YrIt7byJ/2ZmSKN1mDmYBMhoUInEV1SxKKtdFYU++HkYy0dTo0oqdDazhfpX JCWddJ8KtOVkmMhWjN5Px393SGTNg/e7RlGByNe0uklu4Jcf8H5U19A2puCCrSeBK0ch ZmdUBXAQndX8mn4Mhork0w4xMjCFD2F9QfS0UXyrvwKeFttiITvTwoZvEpBVA931AFna 1qvbRsEaW9UetJTsv768eGiIONb+c/sF2DM5sEPX2n+UXg630kTiJQAgSVCYWdlmIpRN gL0pw1Mw4ngcOVT3oi55iKV86YjExl883cVTLrDv3HH/Agut9cJPDLic/eT/rzOPAcN+ 2EnQ== 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 c22si5636626edc.378.2019.07.22.08.43.16 for ; Mon, 22 Jul 2019 08:43: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 16C1515A2; Mon, 22 Jul 2019 08:43:16 -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 8186F3F694; Mon, 22 Jul 2019 08:43:13 -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 v9 18/21] x86: mm: Convert ptdump_walk_pgd_level_core() to take an mm_struct Date: Mon, 22 Jul 2019 16:42:07 +0100 Message-Id: <20190722154210.42799-19-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 bcaf27b637e0..546e28a7785c 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 */ @@ -516,10 +512,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 = {}; @@ -566,39 +562,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 Mon Jul 22 15:42:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11052803 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 47B481398 for ; Mon, 22 Jul 2019 15:43:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 36F6627FB3 for ; Mon, 22 Jul 2019 15:43:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2AD7628434; Mon, 22 Jul 2019 15:43:35 +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 635C727FB3 for ; Mon, 22 Jul 2019 15:43:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BB9FC8E0015; Mon, 22 Jul 2019 11:43:21 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id AF30C8E000E; Mon, 22 Jul 2019 11:43:21 -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 8F98D8E0015; Mon, 22 Jul 2019 11:43:21 -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 3A0E88E000E for ; Mon, 22 Jul 2019 11:43:21 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id b3so26515927edd.22 for ; Mon, 22 Jul 2019 08:43:21 -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=oY2sFz5yZBlH6BUqTF+AgQqmbr3LE7oatd7KC5QobtM=; b=DiYKm/EU30xJEyrfVKsPJloOs/NWLg6D5XXDJwstjVzmUz5UmFyGLPdvb2vnRf7vuC Zclo8AsjAvkzeZ7s+MKlPQC2NeEWhHe3tMa0TdgIMnlBzNtoBxxBmVaxh59ccoJ4c2mp rHOf3cG0mAI6iIp72E0SaHfcAHbmn5z5nwZd7vzOVHo12yyD6owV3eVOvHFh1Tm56r4q wdlTK8UE8s9Dc+fnWr09C3SjlB+Js0TcVsQUt2rvn66DFYupd5MIbC5raCnZ8NN4BNHp /PVZQK+pqjwWDI+Ge9gqXw71pdvr1kckE6vffY2/aiEhRAJB/2aYEQz3CfMqC5Z14YGT 2pyw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAUnpS+g5H/V2KLYjr24FNuyPvyDsDz8DM5t4sQvYiw0ZpN7Y5RM IqLdGFBru+AlAWyYg6FXv2bX5WMzSDs31XXzwi2dlsI/VfrHFy+8/mGHVf2w37UVm3/PNux+Ko4 CB42Ro+Ex5mj1xRUIwcuUBTlnQyK4igeLTrP/HANkbcaMIXcHOJylkjIb+i0J4DCqkQ== X-Received: by 2002:a17:906:a2d2:: with SMTP id by18mr53803723ejb.245.1563810200786; Mon, 22 Jul 2019 08:43:20 -0700 (PDT) X-Google-Smtp-Source: APXvYqx7NEbO8RllI2GLKzMvuXA2LDIdRWkc8spuroqOE97nwHT8doK4li5WrKuInP6lRYP0yLNu X-Received: by 2002:a17:906:a2d2:: with SMTP id by18mr53803667ejb.245.1563810199771; Mon, 22 Jul 2019 08:43:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810199; cv=none; d=google.com; s=arc-20160816; b=TaeKqWv41V0/EpHoXQGvlof765Fp9m8OWPZGJBesh2Ve51sa571KBwJ+ac+BDhNXWN zxUAKAwDl0oTbHS5PiKrDbfx06F4PxyCkzKmJf6MqxFsSVGGdVgSYlG6d8ba0NX7hfIM yUAGhU6+q1UFz52vvsBqM1gzLgb91K42ke8CiDhDQCNpyU1w28wXYaN1nqffIjOj4iH5 xWpqoKWJZWTzkuI02i5FZ+OaOH8PXMCwLVgJS1RNjaLPtqvTxbYUHv7LsgvAMYoddGsV aMqGDRKxAP3gR1QT0tvWeeaMmgbZnNouJv5pHssyNOj5ATRY1x6l0qamLA8FLEAbI8bq 1/JA== 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=oY2sFz5yZBlH6BUqTF+AgQqmbr3LE7oatd7KC5QobtM=; b=m53gdyaoxjXo3vMUhs1y/FSGWvIzdXOKH0StO1bTAKfYgUjDtUyeh6/aMIvtuswzKM gJ7vlrEOjBbUO6YIJscBzg89W5eyzvsrJwyZG9HyFQMVK0n3cnFXjNrQm+7tsciA6Yzl yQsn9w5uSJ3AISaOHjcAKgR4Lsn8crznBkWpUaT82Mk+xoO1fEFhO5zHf5gKlTHpOxyq BTxCD/b04Gy7QdPGsQ3BuyI3hs66dSXRKY1uWNnIgEKbBj6ex3SHxa6xEZYQt2BNCd8o UrefJt1rg0wJXNIENArtqw418cGTQlNaDMgZDIW8YCUvrG8EUQoT4hMBjEBAJE9Q+QnX mPjA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 h4si704888ejj.127.2019.07.22.08.43.19 for ; Mon, 22 Jul 2019 08:43:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 D653C1509; Mon, 22 Jul 2019 08:43:18 -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 4D1383F694; Mon, 22 Jul 2019 08:43:16 -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 v9 19/21] mm: Add generic ptdump Date: Mon, 22 Jul 2019 16:42:08 +0100 Message-Id: <20190722154210.42799-20-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 | 161 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 202 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..39befc9088b8 --- /dev/null +++ b/mm/ptdump.c @@ -0,0 +1,161 @@ +// 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 bool kasan_page_table(struct ptdump_state *st, void *pt, + unsigned long addr) +{ + if (__pa(pt) == __pa(kasan_early_shadow_pmd) || +#ifdef CONFIG_X86 + (pgtable_l5_enabled() && + __pa(pt) == __pa(kasan_early_shadow_p4d)) || +#endif + __pa(pt) == __pa(kasan_early_shadow_pud)) { + st->note_page(st, addr, 5, pte_val(kasan_early_shadow_pte[0])); + return true; + } + return false; +} +#else +static inline bool kasan_page_table(struct ptdump_state *st, void *pt, + unsigned long addr) +{ + return false; +} +#endif + +static int ptdump_test_p4d(unsigned long addr, unsigned long next, + p4d_t *p4d, struct mm_walk *walk) +{ + struct ptdump_state *st = walk->private; + + if (kasan_page_table(st, p4d, addr)) + return 1; + return 0; +} + +static int ptdump_test_pud(unsigned long addr, unsigned long next, + pud_t *pud, struct mm_walk *walk) +{ + struct ptdump_state *st = walk->private; + + if (kasan_page_table(st, pud, addr)) + return 1; + return 0; +} + +static int ptdump_test_pmd(unsigned long addr, unsigned long next, + pmd_t *pmd, struct mm_walk *walk) +{ + struct ptdump_state *st = walk->private; + + if (kasan_page_table(st, pmd, addr)) + return 1; + return 0; +} + +static int ptdump_hole(unsigned long addr, unsigned long next, + struct mm_walk *walk) +{ + struct ptdump_state *st = walk->private; + + st->note_page(st, addr, -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, + .test_p4d = ptdump_test_p4d, + .test_pud = ptdump_test_pud, + .test_pmd = ptdump_test_pmd, + .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 Mon Jul 22 15:42:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11052805 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 D020014F6 for ; Mon, 22 Jul 2019 15:43:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BE33A27FB3 for ; Mon, 22 Jul 2019 15:43:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B159028434; Mon, 22 Jul 2019 15:43:39 +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 7E01427FB3 for ; Mon, 22 Jul 2019 15:43:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1F4A48E0016; Mon, 22 Jul 2019 11:43:25 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 1570F8E000E; Mon, 22 Jul 2019 11:43: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 F130D8E0016; Mon, 22 Jul 2019 11:43:24 -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 9419A8E000E for ; Mon, 22 Jul 2019 11:43:24 -0400 (EDT) Received: by mail-ed1-f70.google.com with SMTP id n3so26529893edr.8 for ; Mon, 22 Jul 2019 08:43:24 -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=L3VDndfnmoSbfjCiPAoTi7udQJ++wLyjdwRKBH8rgBc=; b=MyZFsvK6ydg0LNNQ02J/SXIplaG0qq/QviCtWk4bL6hWO2N5Bx8GwG+kZGJmWbdy4a rGllWS4cGqt7YXgCs36H0xLpMvu3DIxGzimhy1zXi2EcAb/nT6GTkmlJI10BNtmZnW+R ghgMrXaH4nTobKlpLz0tqoaa+SFH71ZWOSgBZIL1RMP5z9R12nThjWSd+25AzUUgmkDH MdEjKZzgPBQKlJEJ6s0IjUOKg3i9EDwoNbdHKK2WsPgtlewgpxyIXvvc8RVG7aBbS4FF cQ3E8jmkAz3uEhQSazawAkFLJXb3sF9SuyC2Xj2ioTBslHy6onfF1+aebNr/n/OS3+9H ALYw== 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: APjAAAVX7SFh+93Xl3bUlpv1+kviW9E1qBylX+MubAc/eNfoJXp1spRc hkkzy1Q2NT2IuRUbmlQrglFIhlVLK3eNJlj0H2BYkQtofyx9QWyuj5Kyo6YzkigMkiOzuGC8Xhk OvRRq6wgieumnCroTErJGVd1uCtantRm9LZRRc3RxSlYz6DYHEJULWcmWCR3tqtg+kQ== X-Received: by 2002:a17:907:2101:: with SMTP id qn1mr54585384ejb.3.1563810204137; Mon, 22 Jul 2019 08:43:24 -0700 (PDT) X-Google-Smtp-Source: APXvYqxglAkNl3d0VfwWi+Lg0RWSeuYqzpqOVZotsAVdXxX2OVn5Rj8a7jbEasNKaGJE4ln3J+rt X-Received: by 2002:a17:907:2101:: with SMTP id qn1mr54585297ejb.3.1563810202694; Mon, 22 Jul 2019 08:43:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810202; cv=none; d=google.com; s=arc-20160816; b=PSurtCEs5V4GgJySeEcWC8dz9B4oCOXTj7uMIZrzbtpp1RB0Jo8upyz5EmDHg9vwn0 Pa7FF10GFIEAW+nahfkVo2Q+vpxxL6c+KLLVxePy5edNdaSIYxke+0m7fn7vZb6mEcRd vjuw308IGlKYB5mLKSwfg8q6TzmalwMQCSAas96/cgjXIhnIJdeoAi9n8nhYx7YBzjcE GOk6s2OUf8HFj5giUU4/B1kKzpb4K72r5V7cp8TjJMjxWm/QHgv5rdxMrZ0Hcu/mu4Oe yY6X81Z68Tujyt4DImXYw0n2SAPHxCWurvUQp60tdxh1f1CgSt329sZ77YGiJ6MK6hoC gCeQ== 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=L3VDndfnmoSbfjCiPAoTi7udQJ++wLyjdwRKBH8rgBc=; b=ZUUrNPMnmpU4NweknGRbD8iNvl9gE4mEHmMEcp4z706On+7gbTq8LohPPT3rOyDcbX UulTUsf4wjVOaC6hNF+mXFropwCzUP+D1lMJZCnrvo2QBToGRrKK3612v55+7pR35r09 fec0ALz8xwj5lQV+KJaUzJMq8t4AKmptXn4cgF/UwPReKXlJ5QRlU2w6mUnJmkKjdFpO AUpcNzSx+dGSkyKEtBko/KgXStGZc8JWvbrD13Lrz41nVm2qr87aGmi7TxYprz3OxKGU 7mYnRX9H+g5N2/EmLdjseQGCkG6NDFQh5OR5NawqnFM8s4KLfXE4GGBpCSM9GaMdtDu4 AoRA== 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 z40si5592566edc.260.2019.07.22.08.43.22 for ; Mon, 22 Jul 2019 08:43:22 -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 BD87728; Mon, 22 Jul 2019 08:43:21 -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 193A33F694; Mon, 22 Jul 2019 08:43:18 -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 v9 20/21] x86: mm: Convert dump_pagetables to use walk_page_range Date: Mon, 22 Jul 2019 16:42:09 +0100 Message-Id: <20190722154210.42799-21-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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 546e28a7785c..61b5feff12c7 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++; @@ -324,7 +331,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 = @@ -340,217 +347,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 Mon Jul 22 15:42:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 11052807 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 2B9FD14F6 for ; Mon, 22 Jul 2019 15:43:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 19E9127FB3 for ; Mon, 22 Jul 2019 15:43:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0D76C28434; Mon, 22 Jul 2019 15:43: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 223B727FB3 for ; Mon, 22 Jul 2019 15:43:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 639B78E0017; Mon, 22 Jul 2019 11:43:27 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 5C26E8E000E; Mon, 22 Jul 2019 11:43:27 -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 3EDD38E0017; Mon, 22 Jul 2019 11:43:27 -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 DDC218E000E for ; Mon, 22 Jul 2019 11:43:26 -0400 (EDT) Received: by mail-ed1-f69.google.com with SMTP id r21so26551659edc.6 for ; Mon, 22 Jul 2019 08:43:26 -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=hsQ5xACHz4gvfMypwn8U7h8z4myf9B6T//y0v9bfxX4=; b=NvhYJL0Hov6qlJoxWvKzcHQin+UYVZBCeRBMK03UfA/YtaktyAojSbXkJUMfBlQilr 2QVO41LwGrqvOjKBq0+jCarm+AbjpfxVP9VUAaFuyu3Sc/x9XI7T2qE3/9+GT4GLYp7e yKe79U/+45L6W6KDHe+YYj/PL6fdQMXfvTGAKUA7v810lSSohRsrbR39VOfmCQIvDSEm exWHQ3fqd8JKZoy1ddnyweznFuyMyGYxRgbJGSw9eFeCR1dlssWKVkUtp0DhhWXWU839 y7hMcxbazagf8+v3Ai9ppt3wuC5LYAFTrQMFh7+IKGNFiR6rOiknx08kmjtDQGgZBJp2 3N8g== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of steven.price@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=steven.price@arm.com X-Gm-Message-State: APjAAAXknP7r3QnTXmBa39Cpn4+rEPZM1ZvVHZhrswDq7OdlxMxJr2pU Jue02qs2NAwkD9wyvsiZAWfD1aqgjhwooqIgSRPnCVkgK8pnrqHOAEY3SiGRjR3x2SLTjv00Mpy NDSiMYUZnm3uriG+tOVExH+HP5NsRQMP7igP3ggNfc9mc2mr435qDK3vnTg0IYOI2FQ== X-Received: by 2002:aa7:c559:: with SMTP id s25mr60126508edr.117.1563810206462; Mon, 22 Jul 2019 08:43:26 -0700 (PDT) X-Google-Smtp-Source: APXvYqz9BCilG7vRsgZDu502qf0Dn4nnGyxaxMSbOcIZBwZCTFShVWkzD2JDCU4/OQl0l8Jh9Fdh X-Received: by 2002:aa7:c559:: with SMTP id s25mr60126436edr.117.1563810205415; Mon, 22 Jul 2019 08:43:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563810205; cv=none; d=google.com; s=arc-20160816; b=IM7NP83L4Mh9VndSsR2SqBX9NCUQnPAwSf0CrUFUcVb7xRxyoBHItfxLZwCiDyEeRm vdq/QMS9AEBe/VhQQAJ+hJSJi4IMmJ2ekBglWlUCJROzlBwNsrceEmfILIEJj6xTs8g+ 0fP6weGuzbQyM7+3PV9p9FxaDjc1Erz3ViW+AkjLbOiwmfZRugoOFxsB6hnmEvX4/1Iv KCQKRsLe0YsM87sW9hiS0GBEDu68TSSbEAPqyJfNjg8pq9wsG/HCArFn3BHY02BBknYL K3qNxC99jIAeuAB4Ty2WMYFZuy37sIEN2O3//Po0LtXaC8FL+/EfHfZUONiGA4C0lpxg 2+BQ== 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=hsQ5xACHz4gvfMypwn8U7h8z4myf9B6T//y0v9bfxX4=; b=1FwPJDerf2GGJ2VeIHCfqz5zABPNOj9+Cxs3Q7QSAKir+56Z0KGGsxn3BFVFlmzylC BfGJ6rNQp532uKoJ2l1C5s3fFi4X3S9jF1hWHGdWZUI9cii2WfbCUbRQqiUsTBxmhOD7 qdMisg1i3wac6JcHUaXS5dIjFMXmwATUbwe70BhBid7kVl32Ce2Ynvsj0IaQlAPG5tid PjKML5jxeklgcX/svtdbwLujINgKMtIpe7nE+0YpN0GU3HGnVxORPRLg/j37opKZwTu2 p1LuSSxFI2iu9UFroHYFLKcu2I5xfl/wgt+wv5DKp7AxGs08SxZ/tl1Fq0B8j3zZ5Dyl ycDg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for 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 i9si4650954ejf.152.2019.07.22.08.43.25 for ; Mon, 22 Jul 2019 08:43:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for 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: best guess record for 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 880E715A2; Mon, 22 Jul 2019 08:43:24 -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 F34383F694; Mon, 22 Jul 2019 08:43:21 -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 v9 21/21] arm64: mm: Convert mm/dump.c to use walk_page_range() Date: Mon, 22 Jul 2019 16:42:10 +0100 Message-Id: <20190722154210.42799-22-steven.price@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190722154210.42799-1-steven.price@arm.com> References: <20190722154210.42799-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/ptdump_debugfs.c | 2 +- drivers/firmware/efi/arm-runtime.c | 2 +- 7 files changed, 48 insertions(+), 105 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/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 = {