Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp2466739imd; Fri, 2 Nov 2018 11:54:52 -0700 (PDT) X-Google-Smtp-Source: AJdET5erK2MRpAafM5GfFHtLS2BRpjyveB4TJQRygJDQOYwZuWjA16vbs4iTCsJj5IW24cPIspyl X-Received: by 2002:a63:495b:: with SMTP id y27mr8829662pgk.32.1541184892614; Fri, 02 Nov 2018 11:54:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541184892; cv=none; d=google.com; s=arc-20160816; b=y8xpmq0n5ou72SXjTpaJNFPx7dU2oJDV8grNbeAtoehfTjwmDE0XDePxgjJW95f8sY wYZYC4cAZGURhHgv5agJ5s7fcS/jsBc3MOk6GLux8J4luA1U9ImJyB1ZO9jkc3EhY7XI 0rst2x0ATCIjoot6MwjyM/8rQ/fWNpUagIxUp09RVGkgnU4PYCMYNq8Qqu2WtsXfNbaw /gdnXYvUgYIFVGtsQBX6Cqer7283hu9oKsBi6vxZ07K4OEsoxQNISt7cnyg5J2pXiaL3 7hJm1mfo13O1MywkIQgyU0NHejV0DU5KjO8vBijCiboRt4Ncf+9lxXZ28qpOgPmMNUTK Tikw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=hgf7oZGDtEo/h2RW2iT+i8IbHEyRe/ChvhkLAJG7QSw=; b=NoqLyG+g1ZRwbIvembZpCbA4Y4oU+520sgN3RhcNujarh+5TYAxwDrcz/eXdEY1nhK 0NhRKLC5dVvHVpO830AHDZaabGLc+QwNdVm+ujNP7ZiKEakN4cVRbgNQD5OUR5V60+Ek VeCj0xzFS/82NnPhXFp15+mRlAGOaMC9iqAVH48lHco5HVXkRX6fN54sPkMxhxKXs42f 49Dv0405x1u6GdRHCDHqBgqFEGEPOHSqJJ8txWh1yItfcs5p86bBBvFc7edB3ryWS1P/ pPlOrOPTZ0wx947cVvALzpkY5NUjCpm56Dc9t2CDWCkABu1F6s7HJSNXv01rS5MJtyuN /2sA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2ID0EuOE; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n2-v6si34640888plk.255.2018.11.02.11.54.37; Fri, 02 Nov 2018 11:54:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2ID0EuOE; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731166AbeKCECV (ORCPT + 99 others); Sat, 3 Nov 2018 00:02:21 -0400 Received: from mail.kernel.org ([198.145.29.99]:58166 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729463AbeKCECU (ORCPT ); Sat, 3 Nov 2018 00:02:20 -0400 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 662CC2084A; Fri, 2 Nov 2018 18:54:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1541184845; bh=JWGgdTzlh/fRyjW7CHjFCc1xHaYbzCkRwg4k9Dsq4uA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2ID0EuOExmpZvkO+vkKYCeHe55sOf0SAOuLQQAGYJXt4WvYu7yN5vJ3Z0bkh+k0Ys TcaoQuttobu/+RRqnweoPTPrtA7vVvGdEAZZzL4vIugmPZfzxe8wuAct+2mwij398y l4v2lKZYNLn7qJMlVlRR7fTLrjA1MrZFzpPXE+oU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "David S. Miller" , Sasha Levin Subject: [PATCH 4.14 074/143] sparc64: Fix regression in pmdp_invalidate(). Date: Fri, 2 Nov 2018 19:34:19 +0100 Message-Id: <20181102182903.323834073@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181102182857.064326086@linuxfoundation.org> References: <20181102182857.064326086@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit cfb61b5e3e09f8b49bc4d685429df75f45127adc ] pmdp_invalidate() was changed to update the pmd atomically (to not lose dirty/access bits) and return the original pmd value. However, in doing so, we lost a lot of the essential work that set_pmd_at() does, namely to update hugepage mapping counts and queuing up the batched TLB flush entry. Thus we were not flushing entries out of the TLB when making such PMD changes. Fix this by abstracting the accounting work of set_pmd_at() out into a separate function, and call it from pmdp_establish(). Fixes: a8e654f01cb7 ("sparc64: update pmdp_invalidate() to return old pmd value") Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- arch/sparc/mm/tlb.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/arch/sparc/mm/tlb.c b/arch/sparc/mm/tlb.c index 847ddffbf38a..b5cfab711651 100644 --- a/arch/sparc/mm/tlb.c +++ b/arch/sparc/mm/tlb.c @@ -163,13 +163,10 @@ static void tlb_batch_pmd_scan(struct mm_struct *mm, unsigned long vaddr, pte_unmap(pte); } -void set_pmd_at(struct mm_struct *mm, unsigned long addr, - pmd_t *pmdp, pmd_t pmd) -{ - pmd_t orig = *pmdp; - - *pmdp = pmd; +static void __set_pmd_acct(struct mm_struct *mm, unsigned long addr, + pmd_t orig, pmd_t pmd) +{ if (mm == &init_mm) return; @@ -219,6 +216,15 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr, } } +void set_pmd_at(struct mm_struct *mm, unsigned long addr, + pmd_t *pmdp, pmd_t pmd) +{ + pmd_t orig = *pmdp; + + *pmdp = pmd; + __set_pmd_acct(mm, addr, orig, pmd); +} + static inline pmd_t pmdp_establish(struct vm_area_struct *vma, unsigned long address, pmd_t *pmdp, pmd_t pmd) { @@ -227,6 +233,7 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma, do { old = *pmdp; } while (cmpxchg64(&pmdp->pmd, old.pmd, pmd.pmd) != old.pmd); + __set_pmd_acct(vma->vm_mm, address, old, pmd); return old; } -- 2.17.1