From patchwork Wed Oct 10 16:23:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Deacon X-Patchwork-Id: 10634815 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 B41D246E4 for ; Wed, 10 Oct 2018 16:23:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 968E42A5BF for ; Wed, 10 Oct 2018 16:23:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 944D72A675; Wed, 10 Oct 2018 16:23:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0B5FB2A665 for ; Wed, 10 Oct 2018 16:23:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E8E236B0007; Wed, 10 Oct 2018 12:23:15 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id BB1556B000A; Wed, 10 Oct 2018 12:23: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 966EC6B0003; Wed, 10 Oct 2018 12:23:15 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ot1-f70.google.com (mail-ot1-f70.google.com [209.85.210.70]) by kanga.kvack.org (Postfix) with ESMTP id 5B7946B0008 for ; Wed, 10 Oct 2018 12:23:15 -0400 (EDT) Received: by mail-ot1-f70.google.com with SMTP id d34so3806928otb.10 for ; Wed, 10 Oct 2018 09:23: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; bh=Ka6oXZu8DJRXSCZkb2TermywvttDv1cohIKM9nr4o2s=; b=izYLA0Ywl0OnBm0+UQJX8Q5uMig+NoRZQdkFPaiN8R/kkh59HyNqGTrnMUmHF35d4p BIG34MsViRhA7pmw7R3nmaJhqryTu06iVpbR/XeCut2ibXKPSE/N8AS+Vy1L82mKE2gd XArGBvrbGAal+IA0kZzjATPf410gw/jK5LPx0wvK8vnHr0KYFJSKylemcbJn7MWZsH4i QyOCChMuCjmnWiCx2E2MoV46iZGbUx12c12JV2lYpWUTQApC7JaOkbYq6o46FEudGSR3 RuvR6UrHk7npOWcA6/dqnYsugR4hPHipjvobEL0XKAI9kFgJeRFrrX9+sIlvOJIGmQcN XV5w== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com X-Gm-Message-State: ABuFfohcI8uUSjxC30LlH0QaZLvl9KuUN9Lc4z14+YMUl+b6okpRLBqZ GP9yOxQr5TiTxRLfmkaXjL44sdIuGnb9iYKi4OhQbBMygv23l6crQxP0O0cR3c/Raw42OR6Kvf9 Iu318oaZZV+/rV2D+g/NjyLcSuMNKte6Bw0+kTFDLRgMyjlelipcBgLM3YHuVCNmixQ== X-Received: by 2002:aca:2d90:: with SMTP id t138-v6mr1949384oit.217.1539188595147; Wed, 10 Oct 2018 09:23:15 -0700 (PDT) X-Google-Smtp-Source: ACcGV62GpOzpNzVoPSzhfJXT2tEcQDjW5CWqCmelgODJfQVTmc+gtFu845efhic0S/Cp63bZ/VAm X-Received: by 2002:aca:2d90:: with SMTP id t138-v6mr1949352oit.217.1539188594216; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539188594; cv=none; d=google.com; s=arc-20160816; b=ZyjPGs9CmcA4XYY6druO+Lyz16uwI74nj09/Tz6cHPUJJ3uSu5M5k++FRpzVxzcOFI R9ieFeb/IUO+JYwZI41izxBxlkzOkfX7lc5M2E5jYwsVTWRkUCPAP9sF7661o7jcTtHs HLKWP26CaJdRzt5HfLPK/7e19wqkodV+BoEFx9M5fTA9E03ra3gO6TMgirWTQi/vYRUa USqcGyCNfjMo4LRPvEF+h0SH28WkeWjz5D4/xyhDRSCLyhOTNzDQtkZzHwh4R1pmlpJb xwJFEgcaFDsEmiYDBDHW55P8Qf2WR8xmy2+CZnV4LO7Ot9XZrsYZ7flWWiETplcXqJ2x 85lQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from; bh=Ka6oXZu8DJRXSCZkb2TermywvttDv1cohIKM9nr4o2s=; b=xgaSpp6ZmcNVnwXDf/Ajb7feL8LM7idXkIp6pwgXpQA2J4Nm1rjp/GtIqjgZPg11mN YqRhHQ969rnBFXfCVDkyh6U/K6224shiBixPcjD9s7eTMChz0HfvpQPQrlc71QON38BU /lN1k/ftdEMe7SAoUYXoCf+7zkuJBsruRE9fzkIXOcy63T7F8yNYOPQWr4czoqL+IPrh BRU9HSogX3JIN79vdI2Ko+0p1Yw9/reIOKhbFu+eZqz1tgXF6M1+pqqT5/52dw4jiVKd 4zJ8GtT5CP/MK3AiUXXJ3O3RM0v2YATyBnXISRgNkM7YYe58Y//q55fWmGrmD6E85LbS 26Hw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.101.70]) by mx.google.com with ESMTP id r63-v6si9307103oig.238.2018.10.10.09.23.13 for ; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) Received-SPF: pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) client-ip=217.140.101.70; Authentication-Results: mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 59B261596; Wed, 10 Oct 2018 09:23:13 -0700 (PDT) Received: from edgewater-inn.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 2BBA93F740; Wed, 10 Oct 2018 09:23:13 -0700 (PDT) Received: by edgewater-inn.cambridge.arm.com (Postfix, from userid 1000) id D75B21AE07A7; Wed, 10 Oct 2018 17:23:12 +0100 (BST) From: Will Deacon To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: cpandya@codeaurora.org, toshi.kani@hpe.com, tglx@linutronix.de, mhocko@suse.com, akpm@linux-foundation.org, sean.j.christopherson@intel.com, Will Deacon Subject: [PATCH v3 1/5] ioremap: Rework pXd_free_pYd_page() API Date: Wed, 10 Oct 2018 17:23:00 +0100 Message-Id: <1539188584-15819-2-git-send-email-will.deacon@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1539188584-15819-1-git-send-email-will.deacon@arm.com> References: <1539188584-15819-1-git-send-email-will.deacon@arm.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP The recently merged API for ensuring break-before-make on page-table entries when installing huge mappings in the vmalloc/ioremap region is fairly counter-intuitive, resulting in the arch freeing functions (e.g. pmd_free_pte_page()) being called even on entries that aren't present. This resulted in a minor bug in the arm64 implementation, giving rise to spurious VM_WARN messages. This patch moves the pXd_present() checks out into the core code, refactoring the callsites at the same time so that we avoid the complex conjunctions when determining whether or not we can put down a huge mapping. Cc: Chintan Pandya Cc: Toshi Kani Cc: Thomas Gleixner Cc: Michal Hocko Cc: Andrew Morton Suggested-by: Linus Torvalds Reviewed-by: Toshi Kani Signed-off-by: Will Deacon --- lib/ioremap.c | 56 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/lib/ioremap.c b/lib/ioremap.c index 517f5853ffed..6c72764af19c 100644 --- a/lib/ioremap.c +++ b/lib/ioremap.c @@ -76,6 +76,25 @@ static int ioremap_pte_range(pmd_t *pmd, unsigned long addr, return 0; } +static int ioremap_try_huge_pmd(pmd_t *pmd, unsigned long addr, + unsigned long end, phys_addr_t phys_addr, + pgprot_t prot) +{ + if (!ioremap_pmd_enabled()) + return 0; + + if ((end - addr) != PMD_SIZE) + return 0; + + if (!IS_ALIGNED(phys_addr, PMD_SIZE)) + return 0; + + if (pmd_present(*pmd) && !pmd_free_pte_page(pmd, addr)) + return 0; + + return pmd_set_huge(pmd, phys_addr, prot); +} + static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr, unsigned long end, phys_addr_t phys_addr, pgprot_t prot) { @@ -89,13 +108,8 @@ static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr, do { next = pmd_addr_end(addr, end); - if (ioremap_pmd_enabled() && - ((next - addr) == PMD_SIZE) && - IS_ALIGNED(phys_addr + addr, PMD_SIZE) && - pmd_free_pte_page(pmd, addr)) { - if (pmd_set_huge(pmd, phys_addr + addr, prot)) - continue; - } + if (ioremap_try_huge_pmd(pmd, addr, next, phys_addr + addr, prot)) + continue; if (ioremap_pte_range(pmd, addr, next, phys_addr + addr, prot)) return -ENOMEM; @@ -103,6 +117,25 @@ static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr, return 0; } +static int ioremap_try_huge_pud(pud_t *pud, unsigned long addr, + unsigned long end, phys_addr_t phys_addr, + pgprot_t prot) +{ + if (!ioremap_pud_enabled()) + return 0; + + if ((end - addr) != PUD_SIZE) + return 0; + + if (!IS_ALIGNED(phys_addr, PUD_SIZE)) + return 0; + + if (pud_present(*pud) && !pud_free_pmd_page(pud, addr)) + return 0; + + return pud_set_huge(pud, phys_addr, prot); +} + static inline int ioremap_pud_range(p4d_t *p4d, unsigned long addr, unsigned long end, phys_addr_t phys_addr, pgprot_t prot) { @@ -116,13 +149,8 @@ static inline int ioremap_pud_range(p4d_t *p4d, unsigned long addr, do { next = pud_addr_end(addr, end); - if (ioremap_pud_enabled() && - ((next - addr) == PUD_SIZE) && - IS_ALIGNED(phys_addr + addr, PUD_SIZE) && - pud_free_pmd_page(pud, addr)) { - if (pud_set_huge(pud, phys_addr + addr, prot)) - continue; - } + if (ioremap_try_huge_pud(pud, addr, next, phys_addr + addr, prot)) + continue; if (ioremap_pmd_range(pud, addr, next, phys_addr + addr, prot)) return -ENOMEM; From patchwork Wed Oct 10 16:23:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Deacon X-Patchwork-Id: 10634811 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 6D76017E1 for ; Wed, 10 Oct 2018 16:23:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 276552A62F for ; Wed, 10 Oct 2018 16:23:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1B6272A660; Wed, 10 Oct 2018 16:23:22 +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 9B95F2A678 for ; Wed, 10 Oct 2018 16:23:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 611FA6B000D; Wed, 10 Oct 2018 12:23:15 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 548EF6B000A; Wed, 10 Oct 2018 12:23: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 3F9A16B0008; Wed, 10 Oct 2018 12:23:15 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-oi1-f197.google.com (mail-oi1-f197.google.com [209.85.167.197]) by kanga.kvack.org (Postfix) with ESMTP id 18B696B0003 for ; Wed, 10 Oct 2018 12:23:15 -0400 (EDT) Received: by mail-oi1-f197.google.com with SMTP id w198-v6so3909240oiw.19 for ; Wed, 10 Oct 2018 09:23: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; bh=N4Cv0QE3PH+lPyq9AU+EbNnOQ1f2Mu7HygBKhQjY+BQ=; b=s0bbo/dUSNQLF1KC+fxetaT+P2d/cZPRQGzb2SIwXqxA5DOePzCDzp1uXdbZD5wiIp 9HSvj7fRBEsXJTwC47VzuqjSNrksIUGhrLXR+0niluUM8sQBpIsXqi4n8pzOaDT+Qmqf TQSlv/j1WiSwqEoitR2+apRIWxz+XnxY7qrJhYa21pFDAlNAzxBC5ERCUsKyd6vVDVYs +G21hKG/SOiBa+cgst1JP7aE/U56LaZ5UMVyRk2oaTIumP/+Iy8tXwNdQQx+4kpYJ2/Q Mo7bMdqxID7cEaNuLTyhjx59K/p52ex36nwL/K3J6tORz8UUnavsm01+EuNUda0D0OTz F3Cw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com X-Gm-Message-State: ABuFfojA43Tn3XanMwcSZL2HL7yA1ie5wOyxImwwnt0nTAHEW7DoL4zT PwfjKdTuZn/OUY9GP1V8u6VitwrlegT2S65d1fchtwQB7MPY5U08wtNlUjwrZ71jvMrjypCFx+9 zuSoqZf9b6jGfJPvQv7hm+pH++FzKepDqac5GO2SR9RYkTql+R+X5/LVTpowoC5njkQ== X-Received: by 2002:a9d:409a:: with SMTP id n26mr1675736ote.6.1539188594862; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) X-Google-Smtp-Source: ACcGV606MF/UKaqrLDu6fb5MII9CrBiIrgltXWSoBWkMuO0AFn+eaPiQViOC0MP8caxuWAsiTQoy X-Received: by 2002:a9d:409a:: with SMTP id n26mr1675699ote.6.1539188594117; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539188594; cv=none; d=google.com; s=arc-20160816; b=eyZM0ydzPGffZLyPP2qqP1o1KLnUGkiWbUDxJnw9Lks7x6SGBgnrza4xGl73EUWp0Y qgSXRmp/HQlU6+3hBdV6Attfde2nesUzvfvYJValx3Eq+tbUSBkO8BYBsY0RypuLATMK wK/PO6lpFrpKF7vakXdVwu4b7eSe8ZBbyA6BSqstJ1B0IFo8/rgzOgEW7rpxWIbS1cE6 vwd780xfWqTU0PaiMAVi0yG1DHqeIWvbWkCkMd2V/fY+JUVKX/s5UOQmFZjW0XxlWJGt xDVuNosh7NaPZAI/G8Lb+bzKMxYcHxtF40VmBZUD162SE4U6ypamHxWJX/TsrqHEv/Gr 722w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from; bh=N4Cv0QE3PH+lPyq9AU+EbNnOQ1f2Mu7HygBKhQjY+BQ=; b=oi1XTzK673eV+JUXXJlS6cIn5oXJtQl/YbN81zeKd4NqeTyJRix0qrOYDyWuQiT/jZ tFadl7XCEqnVIGT6aY+Pkx53yqBfYqME7XFslYgfl1klCTzMhyz5Mvv+uVmIcLJTtA7A 6Lo9mKdrx0+7H9qV/z06fbSuDu1I9JuBHHpzi3d7T9NljDw8Qb5QgvSH70qrXxH6b3vY FhHWDsFBC0LtNwC/CXDZ2TfHl4H/z1N0ui+9wlnS3zEBJNXXigVIx5b1P7BsULukHyJo lQ84yj5Z/Z75QchS5d6dl+0MBlj1iACvHKP2jCLWZlrgE/wzGenQcrgKZM4qWvFcSbA3 Qeig== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.101.70]) by mx.google.com with ESMTP id t1si12748405otk.151.2018.10.10.09.23.13 for ; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) Received-SPF: pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) client-ip=217.140.101.70; Authentication-Results: mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6C08C15B2; Wed, 10 Oct 2018 09:23:13 -0700 (PDT) Received: from edgewater-inn.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 3E11F3F7C3; Wed, 10 Oct 2018 09:23:13 -0700 (PDT) Received: by edgewater-inn.cambridge.arm.com (Postfix, from userid 1000) id E4FA01AE0964; Wed, 10 Oct 2018 17:23:12 +0100 (BST) From: Will Deacon To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: cpandya@codeaurora.org, toshi.kani@hpe.com, tglx@linutronix.de, mhocko@suse.com, akpm@linux-foundation.org, sean.j.christopherson@intel.com, Will Deacon Subject: [PATCH v3 2/5] arm64: mmu: Drop pXd_present() checks from pXd_free_pYd_table() Date: Wed, 10 Oct 2018 17:23:01 +0100 Message-Id: <1539188584-15819-3-git-send-email-will.deacon@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1539188584-15819-1-git-send-email-will.deacon@arm.com> References: <1539188584-15819-1-git-send-email-will.deacon@arm.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP The core code already has a check for pXd_none(), so remove it from the architecture implementation. Cc: Chintan Pandya Cc: Toshi Kani Cc: Thomas Gleixner Cc: Michal Hocko Cc: Andrew Morton Signed-off-by: Will Deacon --- arch/arm64/mm/mmu.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 8080c9f489c3..0dcb3354d6dd 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -985,10 +985,8 @@ int pmd_free_pte_page(pmd_t *pmdp, unsigned long addr) pmd = READ_ONCE(*pmdp); - if (!pmd_present(pmd)) - return 1; if (!pmd_table(pmd)) { - VM_WARN_ON(!pmd_table(pmd)); + VM_WARN_ON(1); return 1; } @@ -1008,10 +1006,8 @@ int pud_free_pmd_page(pud_t *pudp, unsigned long addr) pud = READ_ONCE(*pudp); - if (!pud_present(pud)) - return 1; if (!pud_table(pud)) { - VM_WARN_ON(!pud_table(pud)); + VM_WARN_ON(1); return 1; } From patchwork Wed Oct 10 16:23:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Deacon X-Patchwork-Id: 10634817 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 04F70679F for ; Wed, 10 Oct 2018 16:23:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D5D672A63A for ; Wed, 10 Oct 2018 16:23:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CA1F72A3C2; Wed, 10 Oct 2018 16:23: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 901892A623 for ; Wed, 10 Oct 2018 16:23:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 980A36B0008; Wed, 10 Oct 2018 12:23:15 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 8F8F46B0006; Wed, 10 Oct 2018 12:23: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 60DCB6B0007; Wed, 10 Oct 2018 12:23:15 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ot1-f70.google.com (mail-ot1-f70.google.com [209.85.210.70]) by kanga.kvack.org (Postfix) with ESMTP id 3708C6B0006 for ; Wed, 10 Oct 2018 12:23:15 -0400 (EDT) Received: by mail-ot1-f70.google.com with SMTP id 30-v6so3975508ots.12 for ; Wed, 10 Oct 2018 09:23: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; bh=Knz78Us/CKYc8fbiR3DNa1DlNQlZ1CX9pImVCVrcNmY=; b=o/cb5hNk0PAB8b9PbRAiUwGjGi71LCJVXu2OjRg6E3UWXSRhvwSg39EC693U9jUjRS 80qQ/Z+U3ch/yauPSa26tkBdmG1p6CKgR8WC5RSaZ93LdF6lZ47OObxzek1DZmtvWaPi xCVCJG37EX/sGpm+T2LVHDGAGLZWWKsVGU4YHbvkrY4pLRU9dXJt1cylrmpKgQi4VIEh GctlTDo/hzcQ8Yg5OY1YSUatgPIe0CQq6yJ5/xjXKB6ZjDSUrRnjFgszKgm0pGJt1nje 6yooKYEf+5zNr2ZCnaF/eCW5hjONVKcAzrPm7iD4ioo5wRvPztXGGXyhv72VNpdDxRsH PjcA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com X-Gm-Message-State: ABuFfoic7TEg+DYWhL7BbozaTSpfV6KNM8/EUAgF7uOSXJqd7C3RreHw 89iEnasudf6PDYOUs20JfMpbukfFrRMP8L+gpGR6vkn7e47gAp3+nzgbMCDzpKYK4w9/9XsZtqA O/92ZtuHwcXR7qhly5xPwRKC3chDn3a8LX6mA2/mNYep3LQaH5rBPY16wrj1tDFZp9w== X-Received: by 2002:a9d:4b91:: with SMTP id k17mr14751852otf.205.1539188594993; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) X-Google-Smtp-Source: ACcGV61l9EmNZCd4IDBm0Sr7ZlLGE7pH4fbLGU2Sx2GYSMTW7KD88+SiqTRu0C+T/cy+iqEdJjm4 X-Received: by 2002:a9d:4b91:: with SMTP id k17mr14751821otf.205.1539188594121; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539188594; cv=none; d=google.com; s=arc-20160816; b=z39x6XFpGLisIEbydXbz7g5xqcjRPgIeqoYL4PqUkXEqrFikGL5cxfA4p7KAqSML9/ 5LwcL8tbgV7YnkAcoDUdb0eTHOFwIAYtDGW2Q9mj5+FFVYG4a/8LToTF2ep+TeOodoWV E5JZjteOFHdP73rQ3lPivU5eYGH198DVEKdqm7MtzWXaYHYosoLwe1L3k6M7MEXUzNKW rfa1+B/hS4INvDUFp/Bd34Hd2d64worIu/eHdz0Z6BeBGxSWYgQDKCPalXts2U6/bkby Gvx6spAa9MFIr7AsE5AhslGvE6JblqY0dOWtzUEsjBfMVtg7yhdjdDa+GGzxZGQP95IB mG2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from; bh=Knz78Us/CKYc8fbiR3DNa1DlNQlZ1CX9pImVCVrcNmY=; b=jl0YSX0p54e/itfZixNUl5u7Y3ZxXjDBy1XRoK0OZQWr3cUg+isycogwC58UZDWDd9 +9NOaeI7xwIKoK4mttgMptHvRaSrVbzjF0q6iyV/3O4ojyfYytIehRsr/L0kwGWDSOp7 hLjNQobV7TN9T+jzgdxQhqRUzBNp5Cako/v3K3U7B9oLdw7/qwJ2YFkfdirSJi54v6/l C0z+7XJBpJ4lhtDnfw5V4zttGKgESo+L4HHF5Th/n4xhYAkX2ahFDl094FJFkE3nPRHg 4ck0phYP4x9+HsQ4uD+/FniLpaF7GIFg8IDtWbGHU0xOWHo6xYRLcWTfl29lvFr5ymTC BkMQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.101.70]) by mx.google.com with ESMTP id 188-v6si6278863oid.28.2018.10.10.09.23.13 for ; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) Received-SPF: pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) client-ip=217.140.101.70; Authentication-Results: mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7BE6315BE; Wed, 10 Oct 2018 09:23:13 -0700 (PDT) Received: from edgewater-inn.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 4DDEC3F909; Wed, 10 Oct 2018 09:23:13 -0700 (PDT) Received: by edgewater-inn.cambridge.arm.com (Postfix, from userid 1000) id 034541AE189D; Wed, 10 Oct 2018 17:23:12 +0100 (BST) From: Will Deacon To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: cpandya@codeaurora.org, toshi.kani@hpe.com, tglx@linutronix.de, mhocko@suse.com, akpm@linux-foundation.org, sean.j.christopherson@intel.com, Will Deacon Subject: [PATCH v3 3/5] x86/pgtable: Drop pXd_none() checks from pXd_free_pYd_table() Date: Wed, 10 Oct 2018 17:23:02 +0100 Message-Id: <1539188584-15819-4-git-send-email-will.deacon@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1539188584-15819-1-git-send-email-will.deacon@arm.com> References: <1539188584-15819-1-git-send-email-will.deacon@arm.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP The core code already has a check for pXd_none(), so remove it from the architecture implementation. Cc: Chintan Pandya Cc: Toshi Kani Cc: Michal Hocko Cc: Andrew Morton Acked-by: Thomas Gleixner Reviewed-by: Toshi Kani Signed-off-by: Will Deacon --- arch/x86/mm/pgtable.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index ae394552fb94..b4919c44a194 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -796,9 +796,6 @@ int pud_free_pmd_page(pud_t *pud, unsigned long addr) pte_t *pte; int i; - if (pud_none(*pud)) - return 1; - pmd = (pmd_t *)pud_page_vaddr(*pud); pmd_sv = (pmd_t *)__get_free_page(GFP_KERNEL); if (!pmd_sv) @@ -840,9 +837,6 @@ int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) { pte_t *pte; - if (pmd_none(*pmd)) - return 1; - pte = (pte_t *)pmd_page_vaddr(*pmd); pmd_clear(pmd); From patchwork Wed Oct 10 16:23:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Deacon X-Patchwork-Id: 10634821 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 24FBE17E1 for ; Wed, 10 Oct 2018 16:23:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C85AB2A648 for ; Wed, 10 Oct 2018 16:23:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BBEBB2A675; Wed, 10 Oct 2018 16:23:28 +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 2F71E2A62F for ; Wed, 10 Oct 2018 16:23:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4AFB66B0006; Wed, 10 Oct 2018 12:23:16 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 4617A6B000A; Wed, 10 Oct 2018 12:23:16 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 32BE56B000C; Wed, 10 Oct 2018 12:23:16 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ot1-f69.google.com (mail-ot1-f69.google.com [209.85.210.69]) by kanga.kvack.org (Postfix) with ESMTP id D48DE6B0006 for ; Wed, 10 Oct 2018 12:23:15 -0400 (EDT) Received: by mail-ot1-f69.google.com with SMTP id l89-v6so4042288otc.6 for ; Wed, 10 Oct 2018 09:23: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; bh=gyaouhO6M09bNRRp3jEmM8H6PKnPVZFp5tgRSOGTTCE=; b=OxLg+9aV4U1VwNZ6Jo4XgWDiYikLVVNVEKzHRZ70RPs6A2tchhvFufbhmC1xvrtsZ2 OWV6VSYFlrB7m/uswT4Yit0B9KWaCTP8MjV4+6GvQiYrVmSi57XS3xEGCitQ94chQw4k NxxhnNDD69scQarunsLBWbAxMsJmoAVXJefZaK1EeBZh7gDueUM2GDYkfteWi9VXn/o5 DWMKUGn40AEpHiLh92Bx81u0Xxr2AaVHQgqKIghxjw2UkrA0QTNq9n9GObwyBvPmkKGq iLr36sLrXhGWMSpJc8VQwDUJcWSWEwI33dodPLDwGPMnD2OPzUxv2Qj/72ZPics56hBo nizw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com X-Gm-Message-State: ABuFfoiMQ8zqFzdfMsSBxL2F3S5+ClCcj9ZURfFzbWhkgS1biv7CMdJW 1I5DLdO4HuiZDrwnjH3RC4Ze86tMvygW3XDnD8zc6RnnUy2Z1jKK5axCMd4h3J6D0kcjnKBg3OV xfDBeFOnlhnDwTwBRHrhkpAmpXBZe+5dafbbEwaCO9s8h2h5O/ldZmGgI6+psRIPuqw== X-Received: by 2002:a9d:d61:: with SMTP id 88mr16565825oti.245.1539188595589; Wed, 10 Oct 2018 09:23:15 -0700 (PDT) X-Google-Smtp-Source: ACcGV62Z+dkf5og3+fZtUMdtSbBsPfsxaMNMw0r9mhsan9wgTWCr/ZaLaTy7u3uQz4O6nPgQsGyG X-Received: by 2002:a9d:d61:: with SMTP id 88mr16565774oti.245.1539188594210; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539188594; cv=none; d=google.com; s=arc-20160816; b=AoZi42bsCmO90SIKbOdrXjj/PbNh2jrU33GybV92flADIaTzFq+CBeyXeKFYOLp0sD ETWJC7MPpDW0IMOXW2MNJmduKnP0JJB2tXyi1BuXHqupOWufg6jUMGJ8o4smzCLNklh0 5By7yj0t/6vElP5ys0MnpvQ8sYUCu4b1G7H1O/aRZIWwNbEmZrIA1Rl8qFC/M55goD0S PyDO3ThNIjOztggZ7vysqIMBWBvXTTzZQoP2Wsk589+jMnQCrz+C555K5iPr4sVHaH83 XY1BK+WiEUppkCm8HYrXBgeCHe5x24+6md1aBrUbzfCRnghlNPtVQewTiWnpbZjdiQ8d kCYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from; bh=gyaouhO6M09bNRRp3jEmM8H6PKnPVZFp5tgRSOGTTCE=; b=QEwxxUeTp+Gg9mbhGYXZUCLxuHnEw2uHOasxPahr+B5WCejuXXGjS7v/H6/3i83nA+ mShbGgozm2T3q4STOl7hdZeFswFHldGdO2AYlERV8I/wj+DSEeEVowMyHbVpW++6ZalQ lCe9yazQuFKSD4BtgqHK9W46TCqrbwY8Bp0dckBRddUoQEScHI0H6Jnu6zwdnQ5U2VgQ 9ssCtMyVtl2OgsThAZ/0fNkW3Nl8J4vJWYKfDUH1tSavoa8X1uyuRA21tIxowbGzPw9N 53PEwC3h2nNLxG/PR3Kb0d5ep7CqCJBiSh4PipaxRXUwCAUrEir5Lpqp73IMGvb0m5OU /9ng== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.101.70]) by mx.google.com with ESMTP id u23si5859244otf.19.2018.10.10.09.23.13 for ; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) Received-SPF: pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) client-ip=217.140.101.70; Authentication-Results: mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8EEF31682; Wed, 10 Oct 2018 09:23:13 -0700 (PDT) Received: from edgewater-inn.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 60D913F5B3; Wed, 10 Oct 2018 09:23:13 -0700 (PDT) Received: by edgewater-inn.cambridge.arm.com (Postfix, from userid 1000) id 137311AE2D6C; Wed, 10 Oct 2018 17:23:13 +0100 (BST) From: Will Deacon To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: cpandya@codeaurora.org, toshi.kani@hpe.com, tglx@linutronix.de, mhocko@suse.com, akpm@linux-foundation.org, sean.j.christopherson@intel.com, Will Deacon Subject: [PATCH v3 4/5] lib/ioremap: Ensure phys_addr actually corresponds to a physical address Date: Wed, 10 Oct 2018 17:23:03 +0100 Message-Id: <1539188584-15819-5-git-send-email-will.deacon@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1539188584-15819-1-git-send-email-will.deacon@arm.com> References: <1539188584-15819-1-git-send-email-will.deacon@arm.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP The current ioremap() code uses a phys_addr variable at each level of page table, which is confusingly offset by subtracting the base virtual address being mapped so that adding the current virtual address back on when iterating through the page table entries gives back the corresponding physical address. This is fairly confusing and results in all users of phys_addr having to add the current virtual address back on. Instead, this patch just updates phys_addr when iterating over the page table entries, ensuring that it's always up-to-date and doesn't require explicit offsetting. Cc: Chintan Pandya Cc: Toshi Kani Cc: Thomas Gleixner Cc: Michal Hocko Cc: Andrew Morton Cc: Sean Christopherson Signed-off-by: Will Deacon --- lib/ioremap.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/lib/ioremap.c b/lib/ioremap.c index 6c72764af19c..10d7c5485c39 100644 --- a/lib/ioremap.c +++ b/lib/ioremap.c @@ -101,19 +101,18 @@ static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr, pmd_t *pmd; unsigned long next; - phys_addr -= addr; pmd = pmd_alloc(&init_mm, pud, addr); if (!pmd) return -ENOMEM; do { next = pmd_addr_end(addr, end); - if (ioremap_try_huge_pmd(pmd, addr, next, phys_addr + addr, prot)) + if (ioremap_try_huge_pmd(pmd, addr, next, phys_addr, prot)) continue; - if (ioremap_pte_range(pmd, addr, next, phys_addr + addr, prot)) + if (ioremap_pte_range(pmd, addr, next, phys_addr, prot)) return -ENOMEM; - } while (pmd++, addr = next, addr != end); + } while (pmd++, phys_addr += (next - addr), addr = next, addr != end); return 0; } @@ -142,19 +141,18 @@ static inline int ioremap_pud_range(p4d_t *p4d, unsigned long addr, pud_t *pud; unsigned long next; - phys_addr -= addr; pud = pud_alloc(&init_mm, p4d, addr); if (!pud) return -ENOMEM; do { next = pud_addr_end(addr, end); - if (ioremap_try_huge_pud(pud, addr, next, phys_addr + addr, prot)) + if (ioremap_try_huge_pud(pud, addr, next, phys_addr, prot)) continue; - if (ioremap_pmd_range(pud, addr, next, phys_addr + addr, prot)) + if (ioremap_pmd_range(pud, addr, next, phys_addr, prot)) return -ENOMEM; - } while (pud++, addr = next, addr != end); + } while (pud++, phys_addr += (next - addr), addr = next, addr != end); return 0; } @@ -164,7 +162,6 @@ static inline int ioremap_p4d_range(pgd_t *pgd, unsigned long addr, p4d_t *p4d; unsigned long next; - phys_addr -= addr; p4d = p4d_alloc(&init_mm, pgd, addr); if (!p4d) return -ENOMEM; @@ -173,14 +170,14 @@ static inline int ioremap_p4d_range(pgd_t *pgd, unsigned long addr, if (ioremap_p4d_enabled() && ((next - addr) == P4D_SIZE) && - IS_ALIGNED(phys_addr + addr, P4D_SIZE)) { - if (p4d_set_huge(p4d, phys_addr + addr, prot)) + IS_ALIGNED(phys_addr, P4D_SIZE)) { + if (p4d_set_huge(p4d, phys_addr, prot)) continue; } - if (ioremap_pud_range(p4d, addr, next, phys_addr + addr, prot)) + if (ioremap_pud_range(p4d, addr, next, phys_addr, prot)) return -ENOMEM; - } while (p4d++, addr = next, addr != end); + } while (p4d++, phys_addr += (next - addr), addr = next, addr != end); return 0; } @@ -196,14 +193,13 @@ int ioremap_page_range(unsigned long addr, BUG_ON(addr >= end); start = addr; - phys_addr -= addr; pgd = pgd_offset_k(addr); do { next = pgd_addr_end(addr, end); - err = ioremap_p4d_range(pgd, addr, next, phys_addr+addr, prot); + err = ioremap_p4d_range(pgd, addr, next, phys_addr, prot); if (err) break; - } while (pgd++, addr = next, addr != end); + } while (pgd++, phys_addr += (next - addr), addr = next, addr != end); flush_cache_vmap(start, end); From patchwork Wed Oct 10 16:23:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Deacon X-Patchwork-Id: 10634819 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 66BCA46E4 for ; Wed, 10 Oct 2018 16:23:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ED9EF2A669 for ; Wed, 10 Oct 2018 16:23:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EBB242A66C; Wed, 10 Oct 2018 16:23: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 5C7842A62F for ; Wed, 10 Oct 2018 16:23:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5E9506B000A; Wed, 10 Oct 2018 12:23:18 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 599FC6B000E; Wed, 10 Oct 2018 12:23: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 43D2D6B0010; Wed, 10 Oct 2018 12:23:18 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ot1-f69.google.com (mail-ot1-f69.google.com [209.85.210.69]) by kanga.kvack.org (Postfix) with ESMTP id 061C46B000A for ; Wed, 10 Oct 2018 12:23:18 -0400 (EDT) Received: by mail-ot1-f69.google.com with SMTP id b5-v6so4026527otk.21 for ; Wed, 10 Oct 2018 09:23: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; bh=AUz4K2RTcj/O0JOlaWId1Il0sNteqiutU7pUtx2yB/c=; b=q2W0UN7knXVJaFCH74ANgPtNb3FrGvJoUd8S4Mmq0+Ijof0hfUUtrUbdWehKwa5f2w SX4xYWHUkXWwbT8cA8gs6+kexcC0cHxopmwWix0jvK0tYzvXgbsmEjM3mGu09ngB+JNK TaVgYVqZyjHBaRTzwhCooQUHR1OL0e4JWMzP3mEETO0AGrnI3YGwqxX+mBi7EnyQj8+p ihIMp6TsnRs2WIhHgkkLaGngYgZnDIpAmYLVpThYGbB3iBUEdEYgoEwuNRXSJFmD7Dkj QEoQ9SA3tr0mrJApjC61p4y62PZDyPgWfl9Byj2BH9z5o3vlI3WeUV8Tan3pyTeX87QV aaFg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com X-Gm-Message-State: ABuFfojr7QlG3hXDIWXZ0VJYcB0+t4BhlO2Em6tAWK3OHezYRRsBRwxO I4nWQAbtzUW1WI9YciPG6lu0MdRIpz4MyGKCXJVH1h8isvs5Qye5K2e4XRgjjfl+APi982SnuZ/ VuRhpzd1bl/uUOUmb4jXYyEtSrGwgN1OMJDH+CJV0iAGYht0WvjOE9m7PJ2Gy2WJIcA== X-Received: by 2002:a9d:5147:: with SMTP id u7mr13946438oti.294.1539188597762; Wed, 10 Oct 2018 09:23:17 -0700 (PDT) X-Google-Smtp-Source: ACcGV63IhhVjEA2qg6RelzQJr6h2Va9YOiOWwFIYynWeCpU8V5WgppFS+dYFJhg5fGTv3Pz7UB7A X-Received: by 2002:a9d:5147:: with SMTP id u7mr13946320oti.294.1539188594657; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539188594; cv=none; d=google.com; s=arc-20160816; b=lcSKzPSJN+79Man2KVsqmsVa0sUOIymYcks1OLzvCgDoIDnYJbzmeLn5tJ/y4xAOmZ CPZDmAF6E2W/SvQgGd2PB6fbxwx9b/epmgdIJfajoJXSE5OghwBTh26tU7ohQWR3zJ5A 2uUvZo7Km9RrXNFKiEk6v/b1dEf3XX6QFouiXmP1xNWknxYfCElleT64bkxSurahD+oq sfka1BhfIyG7hG1Kim1Zngq0FbrgPp8kIggNbsyQqgQqzcPppJ56Tsqk7XA8mbQCaH7E FiPZc54DIkDmx+YlgvHDqhjaJkZ81gno4Qm3X9Gt3vppMZr5OKHt4SydRRQgJRRlnMy+ GwSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from; bh=AUz4K2RTcj/O0JOlaWId1Il0sNteqiutU7pUtx2yB/c=; b=RUThg/Qcc3tZgbUw/vSle1FP5zbloymCLyU1CSLhHf9P3s3v4np+qyGaEA4tilk4ak VBl+sGsTgC7c6x55jl/NuMpF+moShioFOkQ/7G8kIgMXh3L++HJAnG/E49RjZsL684Ov oMGg6ZS7+qerCSO6iuLA/vTkdQdzZsAi9ZUCv3iiASjFpCnPh9Eos3X0f1Huv5dsvePH UMf5JDswEgFkYX562lubfDEcYZsIsL3YYnFKZ+59ZTTeNHVd/uMpoTt7sTxJ+mnUcZWG +raa922xDQi0TGFWA3EvDuUeVjvCGi/hJ9Y21v+kyKjE6nXA0SUGvBeAFVwmT6LD1YW8 8biQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com Received: from foss.arm.com (foss.arm.com. [217.140.101.70]) by mx.google.com with ESMTP id p7-v6si11388617oib.38.2018.10.10.09.23.14 for ; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) Received-SPF: pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) client-ip=217.140.101.70; Authentication-Results: mx.google.com; spf=pass (google.com: domain of will.deacon@arm.com designates 217.140.101.70 as permitted sender) smtp.mailfrom=will.deacon@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3B2B51688; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) Received: from edgewater-inn.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 0D7553F5B3; Wed, 10 Oct 2018 09:23:14 -0700 (PDT) Received: by edgewater-inn.cambridge.arm.com (Postfix, from userid 1000) id 265EB1AE2D8E; Wed, 10 Oct 2018 17:23:13 +0100 (BST) From: Will Deacon To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: cpandya@codeaurora.org, toshi.kani@hpe.com, tglx@linutronix.de, mhocko@suse.com, akpm@linux-foundation.org, sean.j.christopherson@intel.com, Will Deacon Subject: [PATCH v3 5/5] lib/ioremap: Ensure break-before-make is used for huge p4d mappings Date: Wed, 10 Oct 2018 17:23:04 +0100 Message-Id: <1539188584-15819-6-git-send-email-will.deacon@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1539188584-15819-1-git-send-email-will.deacon@arm.com> References: <1539188584-15819-1-git-send-email-will.deacon@arm.com> 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 Whilst no architectures actually enable support for huge p4d mappings in the vmap area, the code that is implemented should be using break-before-make, as we do for pud and pmd huge entries. Cc: Chintan Pandya Cc: Toshi Kani Cc: Thomas Gleixner Cc: Michal Hocko Cc: Andrew Morton Reviewed-by: Toshi Kani Signed-off-by: Will Deacon --- arch/arm64/mm/mmu.c | 5 +++++ arch/x86/mm/pgtable.c | 8 ++++++++ include/asm-generic/pgtable.h | 5 +++++ lib/ioremap.c | 27 +++++++++++++++++++++------ 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 0dcb3354d6dd..58776b90dd2a 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -1024,3 +1024,8 @@ int pud_free_pmd_page(pud_t *pudp, unsigned long addr) pmd_free(NULL, table); return 1; } + +int p4d_free_pud_page(p4d_t *p4d, unsigned long addr) +{ + return 0; /* Don't attempt a block mapping */ +} diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index b4919c44a194..c6094997d060 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -779,6 +779,14 @@ int pmd_clear_huge(pmd_t *pmd) return 0; } +/* + * Until we support 512GB pages, skip them in the vmap area. + */ +int p4d_free_pud_page(p4d_t *p4d, unsigned long addr) +{ + return 0; +} + #ifdef CONFIG_X86_64 /** * pud_free_pmd_page - Clear pud entry and free pmd page. diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h index 88ebc6102c7c..4297a2519ebf 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h @@ -1019,6 +1019,7 @@ int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot); int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot); int pud_clear_huge(pud_t *pud); int pmd_clear_huge(pmd_t *pmd); +int p4d_free_pud_page(p4d_t *p4d, unsigned long addr); int pud_free_pmd_page(pud_t *pud, unsigned long addr); int pmd_free_pte_page(pmd_t *pmd, unsigned long addr); #else /* !CONFIG_HAVE_ARCH_HUGE_VMAP */ @@ -1046,6 +1047,10 @@ static inline int pmd_clear_huge(pmd_t *pmd) { return 0; } +static inline int p4d_free_pud_page(p4d_t *p4d, unsigned long addr) +{ + return 0; +} static inline int pud_free_pmd_page(pud_t *pud, unsigned long addr) { return 0; diff --git a/lib/ioremap.c b/lib/ioremap.c index 10d7c5485c39..063213685563 100644 --- a/lib/ioremap.c +++ b/lib/ioremap.c @@ -156,6 +156,25 @@ static inline int ioremap_pud_range(p4d_t *p4d, unsigned long addr, return 0; } +static int ioremap_try_huge_p4d(p4d_t *p4d, unsigned long addr, + unsigned long end, phys_addr_t phys_addr, + pgprot_t prot) +{ + if (!ioremap_p4d_enabled()) + return 0; + + if ((end - addr) != P4D_SIZE) + return 0; + + if (!IS_ALIGNED(phys_addr, P4D_SIZE)) + return 0; + + if (p4d_present(*p4d) && !p4d_free_pud_page(p4d, addr)) + return 0; + + return p4d_set_huge(p4d, phys_addr, prot); +} + static inline int ioremap_p4d_range(pgd_t *pgd, unsigned long addr, unsigned long end, phys_addr_t phys_addr, pgprot_t prot) { @@ -168,12 +187,8 @@ static inline int ioremap_p4d_range(pgd_t *pgd, unsigned long addr, do { next = p4d_addr_end(addr, end); - if (ioremap_p4d_enabled() && - ((next - addr) == P4D_SIZE) && - IS_ALIGNED(phys_addr, P4D_SIZE)) { - if (p4d_set_huge(p4d, phys_addr, prot)) - continue; - } + if (ioremap_try_huge_p4d(p4d, addr, next, phys_addr, prot)) + continue; if (ioremap_pud_range(p4d, addr, next, phys_addr, prot)) return -ENOMEM;