From patchwork Thu Aug 16 17:01:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 10567891 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 DF5DE13B4 for ; Thu, 16 Aug 2018 17:03:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CDA76286D9 for ; Thu, 16 Aug 2018 17:03:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C10D3286F2; Thu, 16 Aug 2018 17:03:03 +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 EF3C1286D9 for ; Thu, 16 Aug 2018 17:03:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0DB776B02A8; Thu, 16 Aug 2018 13:03:02 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 0B2D16B02A9; Thu, 16 Aug 2018 13:03:02 -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 EE31F6B02AA; Thu, 16 Aug 2018 13:03:01 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by kanga.kvack.org (Postfix) with ESMTP id ACBDD6B02A8 for ; Thu, 16 Aug 2018 13:03:01 -0400 (EDT) Received: by mail-pf1-f197.google.com with SMTP id j15-v6so2368611pfi.10 for ; Thu, 16 Aug 2018 10:03: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:subject:to:cc :from:date:message-id:mime-version:content-transfer-encoding; bh=r8S9qlR2fA711SAyC/RUFfqWz8BnpJqqvMEtezJp4DA=; b=lkohBILtC6K0AJMdjs/GqngjCHekYGX78XcpvQjvzgBUS4Q2KxkYVVeF4YH1VoQopT S10J6nNkXzCwGZt3G8LB6JAs5vGaRsNFqOFgGjR7zmbifVplbhobDF7RZ4QimUMyMo4C EMZoJnvzYXWtvA/3q2ENfVDuhsIQdoRXnMVXL4fWU++OpSSCMrKVce9gYeMd137whk/o 2eVvH6ErYWYCqMZ2k+7eaNfYvrf6EYa46sPw4iRrm8CchEJP66j/y5rCYQUybGTZVVwz GvR41mUm+jFKRIaoiQz5h9WOIGHHnWjEr0Gw0nBeeOt3K/z9E0eml4hVNJ3B/qZ6hsUt JHYw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of gregkh@linuxfoundation.org designates 140.211.169.12 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org X-Gm-Message-State: AOUpUlGTDOJi0om7Ly7v9pThggeDHfN5vrGuRUMEMfbIFBq/WfRBhB7N OIJv7Ge6HOKi4tKYVFTWu1WJ6u9vVXcC3YQcPFb9kxBZ4BoHDGxzklDZ4lYpVyTEj4ifGiUUWi+ 43Tg77WzB0eq9mC4HE0KkVhe8unV9bLVXIO8aVT2M3+zS2+6b1bXMPUo8hYvS9EX9mw== X-Received: by 2002:a63:5fc8:: with SMTP id t191-v6mr2864229pgb.183.1534438981352; Thu, 16 Aug 2018 10:03:01 -0700 (PDT) X-Google-Smtp-Source: AA+uWPxwOQy0KfsjmX2Cer17BTSGg/N1IYFSkVPO6BQ3IOWexP5aeZax885w4QQ5Ua5RgkKmqJI7 X-Received: by 2002:a63:5fc8:: with SMTP id t191-v6mr2864156pgb.183.1534438980424; Thu, 16 Aug 2018 10:03:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534438980; cv=none; d=google.com; s=arc-20160816; b=Pp1FfoaEAcQKxXWfrdIZ/wIgoe3OeG7hmA9uG1cz8B+5so3wZ79n6O2obt4zTUe3MB l7/G9ezJm0qAWg+L82BJ/7cEA7REq3GnrPeW9E7Nf9KHw/obeuWbz98HN8SZJW9Jc2Wa NHXU66WLgiOZ32snoDJqE9t542xPe9si0dBJwCc9A8cMuCLk+LyQBI3SUJA/TCkzJz/F JwFeWrCvNk/cEKSseTp22n3mczRKAMScQaYYaW1oI8pOS0AfxPiyxwFsS249AQGHVgaj jGJ3Qdpmlxt0DJ/KybhsZuSrfwH2nSYoeXB7jIv4FHW3ZudLKGM4P17BMUvCbN+PTCsX 7q0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:message-id:date:from:cc:to :subject:arc-authentication-results; bh=r8S9qlR2fA711SAyC/RUFfqWz8BnpJqqvMEtezJp4DA=; b=lmXh4JmB0jRc2fBh1NjtyrQZbG4chPTO+/9hV6R1jJaTTc7gALkL9iE8w8NiL0ZOcO sjBL2fAVNg8Wl82Er3QIZrXEi7jWDVGxsRPu2V28CY3FX9cB2+IZsfyGX7RKzlyCTyZE I9NBEjLc0UVzq9YB9XdXYGrcgrHg2lYC4sB9Tq87xWMsV1yI4yVuJgbYSOoBM451pXQV KFMXnLK9T9aYvNFukkwue/U7ZGwtA990h5iv0x+3whmUuHu5AXKXys0y0n9ALPwLO2/P I6W4tVZiQViRUlOxyeKizGM6JagS+N+SBh1Vo8GF2Pzx9P9f0QkiLsigej6HEG5ZCoIz bwsw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of gregkh@linuxfoundation.org designates 140.211.169.12 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org Received: from mail.linuxfoundation.org (mail.linuxfoundation.org. [140.211.169.12]) by mx.google.com with ESMTPS id y4-v6si801776pgh.225.2018.08.16.10.03.00 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 Aug 2018 10:03:00 -0700 (PDT) Received-SPF: pass (google.com: domain of gregkh@linuxfoundation.org designates 140.211.169.12 as permitted sender) client-ip=140.211.169.12; Authentication-Results: mx.google.com; spf=pass (google.com: domain of gregkh@linuxfoundation.org designates 140.211.169.12 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org Received: from localhost (unknown [194.244.16.108]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id BC20CCBB; Thu, 16 Aug 2018 17:02:59 +0000 (UTC) Subject: Patch "ioremap: Update pgtable free interfaces with addr" has been added to the 4.17-stable tree To: 20180627141348.21777-3-toshi.kani@hpe.com,akpm@linux-foundation.org,cpandya@codeaurora.org,gregkh@linuxfoundation.org,hpa@zytor.com,joro@8bytes.org,linux-arm-kernel@lists.infradead.org,linux-mm@kvack.org,mhocko@suse.com,tglx@linutronix.de,toshi.kani@hpe.com,will.deacon@arm.com Cc: From: Date: Thu, 16 Aug 2018 19:01:39 +0200 Message-ID: <1534438899195245@kroah.com> MIME-Version: 1.0 X-stable: commit 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 This is a note to let you know that I've just added the patch titled ioremap: Update pgtable free interfaces with addr to the 4.17-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: ioremap-update-pgtable-free-interfaces-with-addr.patch and it can be found in the queue-4.17 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let know about it. From 785a19f9d1dd8a4ab2d0633be4656653bd3de1fc Mon Sep 17 00:00:00 2001 From: Chintan Pandya Date: Wed, 27 Jun 2018 08:13:47 -0600 Subject: ioremap: Update pgtable free interfaces with addr From: Chintan Pandya commit 785a19f9d1dd8a4ab2d0633be4656653bd3de1fc upstream. The following kernel panic was observed on ARM64 platform due to a stale TLB entry. 1. ioremap with 4K size, a valid pte page table is set. 2. iounmap it, its pte entry is set to 0. 3. ioremap the same address with 2M size, update its pmd entry with a new value. 4. CPU may hit an exception because the old pmd entry is still in TLB, which leads to a kernel panic. Commit b6bdb7517c3d ("mm/vmalloc: add interfaces to free unmapped page table") has addressed this panic by falling to pte mappings in the above case on ARM64. To support pmd mappings in all cases, TLB purge needs to be performed in this case on ARM64. Add a new arg, 'addr', to pud_free_pmd_page() and pmd_free_pte_page() so that TLB purge can be added later in seprate patches. [toshi.kani@hpe.com: merge changes, rewrite patch description] Fixes: 28ee90fe6048 ("x86/mm: implement free pmd/pte page interfaces") Signed-off-by: Chintan Pandya Signed-off-by: Toshi Kani Signed-off-by: Thomas Gleixner Cc: mhocko@suse.com Cc: akpm@linux-foundation.org Cc: hpa@zytor.com Cc: linux-mm@kvack.org Cc: linux-arm-kernel@lists.infradead.org Cc: Will Deacon Cc: Joerg Roedel Cc: stable@vger.kernel.org Cc: Andrew Morton Cc: Michal Hocko Cc: "H. Peter Anvin" Cc: Link: https://lkml.kernel.org/r/20180627141348.21777-3-toshi.kani@hpe.com Signed-off-by: Greg Kroah-Hartman --- arch/arm64/mm/mmu.c | 4 ++-- arch/x86/mm/pgtable.c | 12 +++++++----- include/asm-generic/pgtable.h | 8 ++++---- lib/ioremap.c | 4 ++-- 4 files changed, 15 insertions(+), 13 deletions(-) Patches currently in stable-queue which might be from cpandya@codeaurora.org are queue-4.17/x86-mm-disable-ioremap-free-page-handling-on-x86-pae.patch queue-4.17/ioremap-update-pgtable-free-interfaces-with-addr.patch queue-4.17/x86-mm-add-tlb-purge-to-free-pmd-pte-page-interfaces.patch --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -977,12 +977,12 @@ int pmd_clear_huge(pmd_t *pmdp) return 1; } -int pud_free_pmd_page(pud_t *pud) +int pud_free_pmd_page(pud_t *pud, unsigned long addr) { return pud_none(*pud); } -int pmd_free_pte_page(pmd_t *pmd) +int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) { return pmd_none(*pmd); } --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -719,11 +719,12 @@ int pmd_clear_huge(pmd_t *pmd) /** * pud_free_pmd_page - Clear pud entry and free pmd page. * @pud: Pointer to a PUD. + * @addr: Virtual address associated with pud. * * Context: The pud range has been unmaped and TLB purged. * Return: 1 if clearing the entry succeeded. 0 otherwise. */ -int pud_free_pmd_page(pud_t *pud) +int pud_free_pmd_page(pud_t *pud, unsigned long addr) { pmd_t *pmd; int i; @@ -734,7 +735,7 @@ int pud_free_pmd_page(pud_t *pud) pmd = (pmd_t *)pud_page_vaddr(*pud); for (i = 0; i < PTRS_PER_PMD; i++) - if (!pmd_free_pte_page(&pmd[i])) + if (!pmd_free_pte_page(&pmd[i], addr + (i * PMD_SIZE))) return 0; pud_clear(pud); @@ -746,11 +747,12 @@ int pud_free_pmd_page(pud_t *pud) /** * pmd_free_pte_page - Clear pmd entry and free pte page. * @pmd: Pointer to a PMD. + * @addr: Virtual address associated with pmd. * * Context: The pmd range has been unmaped and TLB purged. * Return: 1 if clearing the entry succeeded. 0 otherwise. */ -int pmd_free_pte_page(pmd_t *pmd) +int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) { pte_t *pte; @@ -766,7 +768,7 @@ int pmd_free_pte_page(pmd_t *pmd) #else /* !CONFIG_X86_64 */ -int pud_free_pmd_page(pud_t *pud) +int pud_free_pmd_page(pud_t *pud, unsigned long addr) { return pud_none(*pud); } @@ -775,7 +777,7 @@ int pud_free_pmd_page(pud_t *pud) * Disable free page handling on x86-PAE. This assures that ioremap() * does not update sync'd pmd entries. See vmalloc_sync_one(). */ -int pmd_free_pte_page(pmd_t *pmd) +int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) { return pmd_none(*pmd); } --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h @@ -1019,8 +1019,8 @@ int pud_set_huge(pud_t *pud, phys_addr_t 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 pud_free_pmd_page(pud_t *pud); -int pmd_free_pte_page(pmd_t *pmd); +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 */ static inline int p4d_set_huge(p4d_t *p4d, phys_addr_t addr, pgprot_t prot) { @@ -1046,11 +1046,11 @@ static inline int pmd_clear_huge(pmd_t * { return 0; } -static inline int pud_free_pmd_page(pud_t *pud) +static inline int pud_free_pmd_page(pud_t *pud, unsigned long addr) { return 0; } -static inline int pmd_free_pte_page(pmd_t *pmd) +static inline int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) { return 0; } --- a/lib/ioremap.c +++ b/lib/ioremap.c @@ -92,7 +92,7 @@ static inline int ioremap_pmd_range(pud_ if (ioremap_pmd_enabled() && ((next - addr) == PMD_SIZE) && IS_ALIGNED(phys_addr + addr, PMD_SIZE) && - pmd_free_pte_page(pmd)) { + pmd_free_pte_page(pmd, addr)) { if (pmd_set_huge(pmd, phys_addr + addr, prot)) continue; } @@ -119,7 +119,7 @@ static inline int ioremap_pud_range(p4d_ if (ioremap_pud_enabled() && ((next - addr) == PUD_SIZE) && IS_ALIGNED(phys_addr + addr, PUD_SIZE) && - pud_free_pmd_page(pud)) { + pud_free_pmd_page(pud, addr)) { if (pud_set_huge(pud, phys_addr + addr, prot)) continue; }