From patchwork Thu Dec 6 18:21:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Deacon X-Patchwork-Id: 10716561 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 0985C14E2 for ; Thu, 6 Dec 2018 18:21:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EF21F2F0D7 for ; Thu, 6 Dec 2018 18:21:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E35C12F0DE; Thu, 6 Dec 2018 18:21:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 64CDD2F0D7 for ; Thu, 6 Dec 2018 18:21:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CEBE06B7B54; Thu, 6 Dec 2018 13:21:17 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id C4FD96B7B51; Thu, 6 Dec 2018 13:21:17 -0500 (EST) 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 B11736B7B54; Thu, 6 Dec 2018 13:21:17 -0500 (EST) 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 6D48E6B7B50 for ; Thu, 6 Dec 2018 13:21:17 -0500 (EST) Received: by mail-ot1-f69.google.com with SMTP id o8so557004otp.16 for ; Thu, 06 Dec 2018 10:21:17 -0800 (PST) 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=PPBdA8Jz4ukwKCu9ZEDcFHYVZAZnxy/Ke1+KTZE0XV3pHNmBbaNdwI/7cFrsDSa9Ba EMuxsnnECAITBOMsxrjobb/ifA9pZyWgzmQnvich5UEa/5hRIOV5gHni/tMIaX9zZr4C NdeA84ZvVpkCUil3YtHOx1AyJq546qW3CtfvLZ1VRqm28YyNgQ7SCYqVqcm+H66f2Wpo EvtHbYbIFeEL2kSXeNeLIGdY3egROA8AU0e3JzoPlYB6kmqpFaQc8MHEgLJ55L8IPGKV KpwzycNCgtj7y1n1MQyhLva783tSFOXiGABJZnFS2UfiObcpIV8V+r0bkaXelEMw0SA/ ffDA== 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: AA+aEWYDdRsDxFbfRdqq6SLJVtuUWPhHiX23cruXmjFr1rC16OCS8fXR eTeCHbrr64RppWqEHrv76GBLq6ZOJrxUgkarfGUB4UeDO4oT10cocb+teklbOk/n5FCihveLp6W ox0yAXNP8f4o8tCshc+bg0ea9AGibxoVWxpyysykT7dxWBfBBTXT1dL5RF8UbtK9+Fg== X-Received: by 2002:a9d:7059:: with SMTP id x25mr19608160otj.35.1544120477126; Thu, 06 Dec 2018 10:21:17 -0800 (PST) X-Google-Smtp-Source: AFSGD/URVkaEGeu1HBqmO4taFtCSV9Nbm31sVgZB9MfjvtrpjQQsHztqwVnSOyCY1QJR/SI/Hedy X-Received: by 2002:a9d:7059:: with SMTP id x25mr19608134otj.35.1544120476344; Thu, 06 Dec 2018 10:21:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544120476; cv=none; d=google.com; s=arc-20160816; b=CpkUYL4Vth/Jsz0l7CN/e+IcgnkwTNlGLdptZWtw1E5KL/CnBsVSWrFhDoJVjV8Gqs EYTSGfxbTE040nBbfxwzG5fFDL2NttRRDL9rK/86edsF5aSJQsSvVAr0v7QqH+HOJph2 P7fnD0y61VLf7C8PpEEhB9JRNFplHx0Ivo+eh0V+3mexpzbA5dOUQomWfBMtV7MdNc++ N1zR+WnC7CEVnK/VjlO1VZtoL5CET1G5WIyg9A4BOAbKvoiHMci00pZIaXrPSdklafFP xcwjL5e311Z2WoAni+Z717lKF6vIU3m+eXhuR/JrKLTE+II1o52yd11IVPeUfLgIEETQ b+dg== 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=FgXW1lguJVXqCNCCQCH9AQ/x9CCmlK/hAlqWBOcag5IWpiHuNzIXhaDJRPx4vpGOal XadPwijpsosNtWLEHyOxQHc6Mm1xXo57R5yF4qH6zUjIDruith58JIX64AqlYklaEbu0 aDGwkTGcfacO5AuBi9IFxUNiC70hDvH9WzygsRSGXxUupSBl+4xOUqUwXi5OKBPxp6lx 9kaCMVqNLtnbyJNHJY4CVJ9nik0Ebmkji4lpsdP6tCRIlnomERaWaMOeuf3aAgbXPuHq dnjOk2e0JQ1ig7Zr9792VmyJ1Dn8JJEUTRWIkbt9tXF2pJTwbjciTaronVplJzZU6xGE a5Eg== 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 e2si430989otf.278.2018.12.06.10.21.16 for ; Thu, 06 Dec 2018 10:21:16 -0800 (PST) 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 8D060EBD; Thu, 6 Dec 2018 10:21:15 -0800 (PST) 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 5A4E33F71D; Thu, 6 Dec 2018 10:21:15 -0800 (PST) Received: by edgewater-inn.cambridge.arm.com (Postfix, from userid 1000) id 755961AE0BA8; Thu, 6 Dec 2018 18:21:36 +0000 (GMT) From: Will Deacon To: akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, cpandya@codeaurora.org, toshi.kani@hpe.com, tglx@linutronix.de, mhocko@suse.com, sean.j.christopherson@intel.com, Will Deacon Subject: [RESEND PATCH v4 1/5] ioremap: Rework pXd_free_pYd_page() API Date: Thu, 6 Dec 2018 18:21:31 +0000 Message-Id: <1544120495-17438-2-git-send-email-will.deacon@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1544120495-17438-1-git-send-email-will.deacon@arm.com> References: <1544120495-17438-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 Thu Dec 6 18:21:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Deacon X-Patchwork-Id: 10716565 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 A231B15A6 for ; Thu, 6 Dec 2018 18:21:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 94F3E2F0D7 for ; Thu, 6 Dec 2018 18:21:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 890F52F0DE; Thu, 6 Dec 2018 18:21: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 01FE12F0D7 for ; Thu, 6 Dec 2018 18:21:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5E7056B7B51; Thu, 6 Dec 2018 13:21:18 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 56C496B7B55; Thu, 6 Dec 2018 13:21:18 -0500 (EST) 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 4393C6B7B51; Thu, 6 Dec 2018 13:21:18 -0500 (EST) 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 F0C286B7B53 for ; Thu, 6 Dec 2018 13:21:17 -0500 (EST) Received: by mail-ot1-f69.google.com with SMTP id 32so553565ots.15 for ; Thu, 06 Dec 2018 10:21:17 -0800 (PST) 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=/V6Ii5Ay/gyCu4FDeRHUvTmr/uoACgypNN/miYDcTTU=; b=aEKnDcTj68NK+169f8ifrHIVAWFTyJzyb5fRYyezZ69HuIxReC+GRdSHysBsuX0ErL qXr3TOtxl3vDFleT/99dK4IJoI5j1GpCVvTl/sF8lpSBUkDon3uE099Vr7lx1/6RC0Wr aWjsbHTR3D7l3TeyYLBKFUvcu3XdShn87JdrmEJFaDURkFxSNJnj5BHZ454qNEYGMS9n SzX0NtUEorUmWVubcu9vL3iCsFUlu+wJwj4esMXGdB5sRkZVq3fhnXwoy3LT6YfDK/L4 27v+nUdykcc6O6Nr71TtZmiKsz1qVrtNYtYHjgA1wb55/m1dH+CYPBu8EQFlGmvkN1Bh kJkQ== 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: AA+aEWbxsoxpCUJDjuKD3uoAD+52cG4CjDIPfWddNKcucDfkPKaf0d/t huDGuufNJqqT1s+GhQPmNAS4JhZg9zl0TPayt0j4put04w7C37jxkirjMRBiyXysNQ8jdbUYcIz 4iX4EC4qbPNyAfOw3Y2SiQjcCs1vq552MMWZS7CmPjrW0XOCx8I5xfgwPpOQGqcuNaQ== X-Received: by 2002:aca:3403:: with SMTP id b3mr17382073oia.242.1544120477637; Thu, 06 Dec 2018 10:21:17 -0800 (PST) X-Google-Smtp-Source: AFSGD/WT+s0ZPeltpHXh/vqcVAbKW3g1jZvHDBWAmGE+9gMfIsTNXnHy05Pa9i1SmE/TgcikzpwS X-Received: by 2002:aca:3403:: with SMTP id b3mr17382041oia.242.1544120476604; Thu, 06 Dec 2018 10:21:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544120476; cv=none; d=google.com; s=arc-20160816; b=jS3/hQpxi0EploZstTDg/qIMPmv67uGUg75qTRf1j4KEtM/ejnKBhEnwAJdF43vALF d/meRIiCF5GYkCnMX42qJMSScj6PjihD48eN3vVKA0DdND5JO6Hox6GyoqSykPpsKusk gjbzb+bSu6KyM1KNNGyFE+MVAy1Q+NIhVfIDkY/8BQZvHY2NY8OXRdeqUd/FVYKF998+ iSnR+mUV+3JX8k+eTjnJiNz0tofvhSW6qm1H5wGbf+WvyTblh2+V6x4U4B8U/A87npzy pnjJrjYVFR1+DF7+P7EZGp12KSM7qs1kCpxmRDAh/hQK9quo12RR/vg8woK50b2Th+7b pFKQ== 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=/V6Ii5Ay/gyCu4FDeRHUvTmr/uoACgypNN/miYDcTTU=; b=R5kCdaZ05fX6EelOJUufBuAvesaJkmupH744FicS+cjsXGryzdRWOaVLrlvBu4dyUv D1cJhu3OZDh7N6FbU2Q0qMy/+U5c/3MN5yxwptPgwtOVVXaWNHuSTHgaLd32DCazWnKj x5lq2O61+945BNfr57ZYDVN+ZBTM9yqZ2QwSpaLptVelcRZI5H7FKTx5AzP9zSpvhFNj D/9r3Zhiqb3ugWQeWQcwzzbfw8/imIwubDo4PmtBjZ+MFmBdE/+EwxEiI+/MrgIXD5Ru 6rMAA8lWMqC4iak8vn3WkTToDy6yaoUpqHDcW62u+4LOwoQCxsg/2rmqCRJv6rPhNfVa wqdA== 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 (usa-sjc-mx-foss1.foss.arm.com. [217.140.101.70]) by mx.google.com with ESMTP id y132si384466oig.260.2018.12.06.10.21.16 for ; Thu, 06 Dec 2018 10:21:16 -0800 (PST) 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 9FFF81596; Thu, 6 Dec 2018 10:21:15 -0800 (PST) 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 7098C3F908; Thu, 6 Dec 2018 10:21:15 -0800 (PST) Received: by edgewater-inn.cambridge.arm.com (Postfix, from userid 1000) id 841DA1AE0BE1; Thu, 6 Dec 2018 18:21:36 +0000 (GMT) From: Will Deacon To: akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, cpandya@codeaurora.org, toshi.kani@hpe.com, tglx@linutronix.de, mhocko@suse.com, sean.j.christopherson@intel.com, Will Deacon Subject: [RESEND PATCH v4 2/5] arm64: mmu: Drop pXd_present() checks from pXd_free_pYd_table() Date: Thu, 6 Dec 2018 18:21:32 +0000 Message-Id: <1544120495-17438-3-git-send-email-will.deacon@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1544120495-17438-1-git-send-email-will.deacon@arm.com> References: <1544120495-17438-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 d1d6601b385d..786cfa6355be 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -989,10 +989,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; } @@ -1012,10 +1010,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 Thu Dec 6 18:21:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Deacon X-Patchwork-Id: 10716563 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 955B015A6 for ; Thu, 6 Dec 2018 18:21:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 887962F0D7 for ; Thu, 6 Dec 2018 18:21:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 79E442F0DE; Thu, 6 Dec 2018 18:21:24 +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 0F5582F0D7 for ; Thu, 6 Dec 2018 18:21:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0AA946B7B4F; Thu, 6 Dec 2018 13:21:18 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 013516B7B55; Thu, 6 Dec 2018 13:21:17 -0500 (EST) 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 CE9D36B7B50; Thu, 6 Dec 2018 13:21:17 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-oi1-f199.google.com (mail-oi1-f199.google.com [209.85.167.199]) by kanga.kvack.org (Postfix) with ESMTP id 92E2C6B7B4F for ; Thu, 6 Dec 2018 13:21:17 -0500 (EST) Received: by mail-oi1-f199.google.com with SMTP id r82so599845oie.14 for ; Thu, 06 Dec 2018 10:21:17 -0800 (PST) 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=S3Pe7jCrFGE7JxF6m5RucqgSGzB7M8lCaWDcweULJ1Y=; b=ntQkHTvbMDinu518Cef2UzpX6MR/A1Gb2SX5G8QGuwX+HMy2fC00GM2M1imG2picKN igOcWT6U6OaT3+hnXUTTMH2ZM2UiRsluyL2Rz850m9WadVizuxkIe/P343rzP+lFVSwh +Oc4VzTdQ2xJqOMkNk8enSQvJa4z9FFqpm4TyWN6Nz6A4C2+uJ/UzBlxZ3ZXRF45pzVf QoM86sG5JF1Swwe0Tv15s+471wyMCkfUUw7q6E8YerCogAnjRDBye3QzWRRAkWr5ridh HT6j6Hdu3Uiqat16L17T2241t21a3TPkuLR8Sf5tsfTcSPlbt4iHJLWA1849IcnIZZdB jKLA== 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: AA+aEWaDTumIYfRfEDgwA5yK2PeOnrqBmBLPdbstN2uzmppnz1XGuHw3 p7VUydVG7BStbllCIi8eiWc1iITeLqCEheS57eoRfL9lCAITSXCxDpGtVOiFJOxvV6WZryfoSJK alpi7CFvamJWCPf+jbXoQVG0SfYB1qFkJ9NidD2Vdtl7O0kMgj/sZlTkWyB91Rme+ng== X-Received: by 2002:a9d:14e:: with SMTP id 72mr19569526otu.54.1544120477294; Thu, 06 Dec 2018 10:21:17 -0800 (PST) X-Google-Smtp-Source: AFSGD/URlaj9Q9dddsJLNGeLGrgwNSSjUGLQDykhRABcmygbEoh3Vx6B8GcZLECBNGat5/dN0gCi X-Received: by 2002:a9d:14e:: with SMTP id 72mr19569498otu.54.1544120476365; Thu, 06 Dec 2018 10:21:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544120476; cv=none; d=google.com; s=arc-20160816; b=FtUFe1OVag00A1fCiFbcqxyeOtnV/0Q8jP1IkorLK4nLAwvYpmpG1R2IU6b+GCa/gg 3vOim0fm8PHjehpTUR06lWq6jJr9pkvr1gMpmQi6LZwtBEsPD+MaDr+CaaQALddGUTfV 6dC/t6YeX/iguv37tJBngRefTbEqV0KW0/lIwShJrHhP0HRb4joSA0NReD8pCN/rmu47 H/JlR0vW6nRNW4m2V5iSeYBska4YA85ByoE/owEWoCm0TabuWfL+phw8CmgrZQ2Vcw8x bDwynF2qvyTe+EG6//0QqqgkoLiubSCr5BFp8bLMUD5irF1KUfSlcWuO8OaM49ooImxB P7nA== 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=S3Pe7jCrFGE7JxF6m5RucqgSGzB7M8lCaWDcweULJ1Y=; b=YoUPqRGf0n+v0N151gMg4s6Kw1jgDNS1/pFq2HEBuQUn/f8LG46CuBVeO3/JYprWj4 O/By5oHhDnpFzA9FbJALeQq+MjU2s71oNj6RJhyn9vO53h4nn+Y9gN9t5Kqad+IE82e9 9a9eg04p1Gp6r2Cd5/W46DSlHLO8ah2OGgtKCEfzQqtqVZuepLeHyz/vKxEqBXo/Fgan nFW6hik0cICd28M68S/zkNDaVWjXwOV1yUeeaPYlhMrbWbg2Gt/5WgAKeIoM5Y3fHrin kbzX99Am0Vwe68h+BMSBRU+R0kEfxfNUMQQxrzN8njhFWkcwrPePxmXsLwn6Eki3ph9s teZA== 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 1si472529otg.123.2018.12.06.10.21.16 for ; Thu, 06 Dec 2018 10:21:16 -0800 (PST) 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 B3DDA15AB; Thu, 6 Dec 2018 10:21:15 -0800 (PST) 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 8483C3F5AF; Thu, 6 Dec 2018 10:21:15 -0800 (PST) Received: by edgewater-inn.cambridge.arm.com (Postfix, from userid 1000) id 9A6A91AE0BE3; Thu, 6 Dec 2018 18:21:36 +0000 (GMT) From: Will Deacon To: akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, cpandya@codeaurora.org, toshi.kani@hpe.com, tglx@linutronix.de, mhocko@suse.com, sean.j.christopherson@intel.com, Will Deacon Subject: [RESEND PATCH v4 3/5] x86/pgtable: Drop pXd_none() checks from pXd_free_pYd_table() Date: Thu, 6 Dec 2018 18:21:33 +0000 Message-Id: <1544120495-17438-4-git-send-email-will.deacon@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1544120495-17438-1-git-send-email-will.deacon@arm.com> References: <1544120495-17438-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 59274e2c1ac4..e95a7d6ac8f8 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -811,9 +811,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) @@ -855,9 +852,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 Thu Dec 6 18:21:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Deacon X-Patchwork-Id: 10716567 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 B2F9514E2 for ; Thu, 6 Dec 2018 18:21:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9F2F42F0DD for ; Thu, 6 Dec 2018 18:21:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 90EBB2F0D7; Thu, 6 Dec 2018 18:21: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 7625B2F0D7 for ; Thu, 6 Dec 2018 18:21:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C9FD16B7B50; Thu, 6 Dec 2018 13:21:18 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id B888A6B7B53; Thu, 6 Dec 2018 13:21:18 -0500 (EST) 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 A2C666B7B55; Thu, 6 Dec 2018 13:21:18 -0500 (EST) 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 526E66B7B50 for ; Thu, 6 Dec 2018 13:21:18 -0500 (EST) Received: by mail-oi1-f197.google.com with SMTP id p128so610903oib.2 for ; Thu, 06 Dec 2018 10:21:18 -0800 (PST) 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=1Ou78OtI/MFN3FEOfIqRBplaVjPGG1HlQbCtT73huwU=; b=bkU0jiCsyTfGfiUN8NFETOgg/tEQ00IaNVuRRknzgm0GmGXWL+qkLFnH2UqsuF4RCA 5I+ePyX4yeyN+Iv6MaT1d3FkSpaVAA2Zw3YqhfZHvwilv4rtuYROFcp6Bukeq/8y3DKX HMmluI+DOSLFu6ag81qOmBFSN3EK69JYy5nyLB1MUxUIuDVf1iUx3Oi+waOaHtKxIyXK ZDoEEgOcrD4Iba8Yno+fpph3sjb2IQvpCZZzff7tIhJx3ltJfruMgycQU3eEZeHVYWg5 RIRPQMaWVDM/FE2GPX2xofURMeqT8WzVeSj2IWx2cz8vopIwK9rOXDiaTLB4x9Bhl6Yh jmOg== 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: AA+aEWZkVQINcwYPMqlVyZsfRmRRg9HyXyBDeB4jnjpIOjBXPc6egSJo UNYYIuLQ3AVjkSdPOk8M0paRF34nj9Gdw0Y9NLTq3pfrYYMbmIaklcFoTX+bAsGFdfHfgttiK+N lpPZEht7qx3M94+POVwvR+t++fKFmcQGNTZqg4wCfOAfIhacka//E8Mpyvfqb0DhSfw== X-Received: by 2002:a9d:6c94:: with SMTP id c20mr18227680otr.251.1544120478056; Thu, 06 Dec 2018 10:21:18 -0800 (PST) X-Google-Smtp-Source: AFSGD/ULxYJYoGx3vZhlUlGXrdA0DaWQSS8A6Q4CoPzpqZIBZZTTQMyxpDqj0V8s0Egh36kHjFFS X-Received: by 2002:a9d:6c94:: with SMTP id c20mr18227638otr.251.1544120476609; Thu, 06 Dec 2018 10:21:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544120476; cv=none; d=google.com; s=arc-20160816; b=Z1U8OY/CcAEl6KcsKs30ub2fUzwsxWv7ybYsYIj0pHMa5Caw6A6Gf+YbSB48dBc6+K S7bWh31bKrxJUYW5oUfEqUER1q62C/nE4LE2l5j4xY1dJMqyiiH6b2tny4+qk6Qse9I2 d/vpJaX3QvOT5HlM2zEbUnsO61+cpHym0GnjtX9KZ/+myuot7VnCRnZvBBPIkeoBUIhb +q1l2GF2RdujSqUP9kh/6OhupOf2Z+arNrvjRscs8sPQPFSm6/EVrTyBXBdorBcAHfvA N6KIs2zPqmVjMk73axMqzjcfO+wJU0hJv1yK4tbo0cU9h2QCkgiTeHAmxgF3S4/6quIP so1g== 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=1Ou78OtI/MFN3FEOfIqRBplaVjPGG1HlQbCtT73huwU=; b=BWVXQeOkONZmSZZoLzhypRzxFs1j0FS44+bqPtJhqo+Ne5xs1qx1BO1WfcijPC8lWf o20t8qNha8e55PPAcKBj86ezOpxt5e3ZyjVYm07OYyLt3JQfgZVY8hWp00SOc1/i47BX 1F5h5sy9DbkrkJE5Gkbp+j7TJwQuIMzL/g7yu9v3cqcjEKU79w7ERRUjYvaDAZL2wBeV +MxqosuLtbTDPQNFwILc72Sm1UzlYhaJ5dBYN9SAvMl04rRrocELxrdfVWY6iiA/GUJA gx+U9CPkgi6xMqkYQPkq5NNq9JR00ViHV2IFnArvpKLx7JEHTYrs4IaMhzTukRhKBK+6 LONw== 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 (usa-sjc-mx-foss1.foss.arm.com. [217.140.101.70]) by mx.google.com with ESMTP id l1si404158oib.170.2018.12.06.10.21.16 for ; Thu, 06 Dec 2018 10:21:16 -0800 (PST) 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 C825815AD; Thu, 6 Dec 2018 10:21:15 -0800 (PST) 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 98AF23F71D; Thu, 6 Dec 2018 10:21:15 -0800 (PST) Received: by edgewater-inn.cambridge.arm.com (Postfix, from userid 1000) id AEC071AE0BF1; Thu, 6 Dec 2018 18:21:36 +0000 (GMT) From: Will Deacon To: akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, cpandya@codeaurora.org, toshi.kani@hpe.com, tglx@linutronix.de, mhocko@suse.com, sean.j.christopherson@intel.com, Will Deacon Subject: [RESEND PATCH v4 4/5] lib/ioremap: Ensure phys_addr actually corresponds to a physical address Date: Thu, 6 Dec 2018 18:21:34 +0000 Message-Id: <1544120495-17438-5-git-send-email-will.deacon@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1544120495-17438-1-git-send-email-will.deacon@arm.com> References: <1544120495-17438-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 Tested-by: Sean Christopherson Reviewed-by: 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 Thu Dec 6 18:21:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Deacon X-Patchwork-Id: 10716569 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 CDB4314E2 for ; Thu, 6 Dec 2018 18:21:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BFEBE2F0DD for ; Thu, 6 Dec 2018 18:21:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B32782F0DF; Thu, 6 Dec 2018 18:21: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 1F3942F0DD for ; Thu, 6 Dec 2018 18:21:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 43B9C6B7B53; Thu, 6 Dec 2018 13:21:19 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 3E6B96B7B55; Thu, 6 Dec 2018 13:21:19 -0500 (EST) 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 1502D6B7B56; Thu, 6 Dec 2018 13:21:19 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-oi1-f198.google.com (mail-oi1-f198.google.com [209.85.167.198]) by kanga.kvack.org (Postfix) with ESMTP id C30A56B7B55 for ; Thu, 6 Dec 2018 13:21:18 -0500 (EST) Received: by mail-oi1-f198.google.com with SMTP id r82so599865oie.14 for ; Thu, 06 Dec 2018 10:21:18 -0800 (PST) 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=l44sI+xexd99+rlEiWTnTtPsv1VhQI3OmU75tH27288=; b=ktS/0f4+w2ETo8bMO6XhYE/Vl16cZYlGk6fsjK1v8/xTfZQWTzGUngbGirDifoMFzp ob7gTdGtzVC/R3Md05U9lDdkP1vg+qbD7yOcl1GN6Z76iV1K3MDr2Y4ajvnDhurmit3H Jic1Z+/KGAs/38s/zCzLFTlyfDqMBM5yXUr6BsFH9DDdY0fErLq9lct3Eo8ggCvWb4dX dA0pZvoFbadgJyv9oCLR8ak46FBJ7nQl1vJCNOuSQ0zfSXgMMr906H/GWUyS0cnkytov IfmaErOflOZbWxW7k6bcDadb7AhhcoQ6C4IUVTjqjmZEFNojKcEu4ISMi+gcx1ytWZIo zlSw== 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: AA+aEWbQr+Oas3zZjF0YutJ17pYvqtu/QZmHDpBInMkuI4lG9QedQL0A W6Z/Z4yLzY0mjOMZ3pTmp0Uni00ArpMavRAIhYR6YX2eTaLqGaqu8jZKEWrZc0/jJ+YGHqhUYa9 icPql9/5uXHGBCCCwLaErK6aV9ShWsBk5YRYU3XyhWXZhZbnEaeRhHG4akSZaWVrFlw== X-Received: by 2002:aca:c5d2:: with SMTP id v201mr18786688oif.113.1544120478518; Thu, 06 Dec 2018 10:21:18 -0800 (PST) X-Google-Smtp-Source: AFSGD/WmzDEMOZt6MDrmq/5Ih7xlRTDRHlmV3VpqufE3hUQFWT4mZIJBUgHnscOJgmLOs1/Qx6uw X-Received: by 2002:aca:c5d2:: with SMTP id v201mr18786652oif.113.1544120477207; Thu, 06 Dec 2018 10:21:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544120477; cv=none; d=google.com; s=arc-20160816; b=X/DvvAEN4nNTGdJpqU7egTt+VLfe5ziNkweVZz7dFAQcfd+BfiB9Z4yqYh0EQIN82t XsF5pBfW0GuaTgVrN+1AsNlrEn/d9ylssz7rt6eKWlHrSp7CJi7XHNOg32SY1moZUHT6 ia5Sny8MAJBc1lV5wIhyf/8ICn0J4n+O4PCKuP9lztSV450uABRr2EEhYNRZW8dxHZh9 JVpaqeOG20TG/jhr49ozgCXOwi+bZMM3jN0L9zgOU0h6Dv3hqiFv1HS8HGbIqhFbIx6q +eilhuAJbnJHMB4QJwg/kG/cwCho3qp7aIgR1lBVrJG5QSnIUoZbIjAVn/olfQHuraHp 8CkA== 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=l44sI+xexd99+rlEiWTnTtPsv1VhQI3OmU75tH27288=; b=DAGSR00IcBYLzsZHEFJ0uIDrsUyoLeLCHZYhb4mVXdRt+axwjXWlz4/mUXZzOCeGVw X+AJQBLmCHT9MNdsOmyRdFYDxhCp9I0q0HLDJvu2eRGRvwStcvRnPR+5mXXKT3UQCLoU lkAu383l7PtRGUUO1tsO7wcRyTtXrAeE3Wb07D1IA6MJvkODJsT1c46NbABYmv1h57Wn D9FboSgC0sZeQ+sOjSasY3zkUqID2dNgr1JDg+HcGybh1rPHti/fOoJG/29/WAmJDQ6F dx/vqfRuu6cI2wVZ1TsNUxGM3AFkNHqvfDAbzSLCIM+2fcSBiNxIkYiexaNvwui02CsN a/1w== 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 x13si484031otj.215.2018.12.06.10.21.16 for ; Thu, 06 Dec 2018 10:21:17 -0800 (PST) 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 70FD71650; Thu, 6 Dec 2018 10:21:16 -0800 (PST) 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 40F623F5AF; Thu, 6 Dec 2018 10:21:16 -0800 (PST) Received: by edgewater-inn.cambridge.arm.com (Postfix, from userid 1000) id C31A81AE0BF5; Thu, 6 Dec 2018 18:21:36 +0000 (GMT) From: Will Deacon To: akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, cpandya@codeaurora.org, toshi.kani@hpe.com, tglx@linutronix.de, mhocko@suse.com, sean.j.christopherson@intel.com, Will Deacon Subject: [RESEND PATCH v4 5/5] lib/ioremap: Ensure break-before-make is used for huge p4d mappings Date: Thu, 6 Dec 2018 18:21:35 +0000 Message-Id: <1544120495-17438-6-git-send-email-will.deacon@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1544120495-17438-1-git-send-email-will.deacon@arm.com> References: <1544120495-17438-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 786cfa6355be..cf9a26d3d7f5 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -1028,3 +1028,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 e95a7d6ac8f8..b0284eab14dc 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -794,6 +794,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 359fb935ded6..e0381a4ce7d4 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;