Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp4461385img; Tue, 26 Mar 2019 09:49:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqxbdUWMn9iQFcOdzkhVq7bkdPumWCCi5s2r3AePROYt2d+K2tgtBHEE8n01UUyVqBbvbMDN X-Received: by 2002:a62:1147:: with SMTP id z68mr29463676pfi.215.1553618986854; Tue, 26 Mar 2019 09:49:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553618986; cv=none; d=google.com; s=arc-20160816; b=1IQRPcayF+IZSw4C706NzB5TeU+7I/2CjfOBedjUgaa0JWj6pSjMfx0DVv/EXTU/R/ QW+6d+0DuKgJsXIpUjKx+SCjN9MzlGDqMdjf+SYPvqkLNg/pF6RsuoPGoBSqIjl6TyMS 7x8WLCCAQGBGNlIF9wkZuijmjM1doYaZ7acdDc2qsotEj0o0pEJtxsFVsZ2n/bFd1KfN RYdsicrX0xAzjJ7UpakUxokKVZqY/lKW3rwbHlt6U3xcNrA2BV2olwqGlRJXN9YJgnOu wYT/PYdr/Q5oIFClH983u3C2ClxFEBbxR8bb57LPYfaB8S9wKhNDOwG80W5yvxxJHK9/ SEFg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=jnvlAV+GWfMx/7xQbFXaF0JgvpgKRF2qvBTJuIYTYOk=; b=asn0+x/E8I54T5k46QZH4JVeRZBaQdvH0P3pq2mLY2TbqAYuYELIFizsKcNAxCCJ0p 1iyAYSfr8Jp8zwyAMaDTfzA3xOHUPy+arNIoK045wttJvq3TVQPQeAhjIRl4I3IgJ9Ih yGh5G1FrKSLu3nSNskLrpwg5ZlZy3gwfINMOFdog6BsdR3SQovnRwt1ybSa5xrUsdsCt xBPqWzZD/TgaGKjvTXPOuCfTp6muhvcwHaGMmSv/kQYzk/mEWlYKPsjFsyDjK3z2ht93 c9SLJi5YPNTTWM/s8242SGCVPtkmcZSTHm1J181UAq+9l2pUegV8zJ0Fxvlp6rRy91IC wcdg== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 67si17197415plf.222.2019.03.26.09.49.31; Tue, 26 Mar 2019 09:49:46 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732272AbfCZQsa (ORCPT + 99 others); Tue, 26 Mar 2019 12:48:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42950 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732226AbfCZQs1 (ORCPT ); Tue, 26 Mar 2019 12:48:27 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7399A3086212; Tue, 26 Mar 2019 16:48:26 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.20.6.236]) by smtp.corp.redhat.com (Postfix) with ESMTP id 485878428A; Tue, 26 Mar 2019 16:48:24 +0000 (UTC) From: jglisse@redhat.com To: linux-kernel@vger.kernel.org Cc: =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Andrew Morton , linux-mm@kvack.org, =?UTF-8?q?Christian=20K=C3=B6nig?= , Joonas Lahtinen , Jani Nikula , Rodrigo Vivi , Jan Kara , Andrea Arcangeli , Peter Xu , Felix Kuehling , Jason Gunthorpe , Ross Zwisler , Dan Williams , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Michal Hocko , Ralph Campbell , John Hubbard , kvm@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rdma@vger.kernel.org, Arnd Bergmann Subject: [PATCH v6 8/8] mm/mmu_notifier: mmu_notifier_range_update_to_read_only() helper Date: Tue, 26 Mar 2019 12:47:47 -0400 Message-Id: <20190326164747.24405-9-jglisse@redhat.com> In-Reply-To: <20190326164747.24405-1-jglisse@redhat.com> References: <20190326164747.24405-1-jglisse@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Tue, 26 Mar 2019 16:48:26 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jérôme Glisse Helper to test if a range is updated to read only (it is still valid to read from the range). This is useful for device driver or anyone who wish to optimize out update when they know that they already have the range map read only. Signed-off-by: Jérôme Glisse Cc: Andrew Morton Cc: linux-mm@kvack.org Cc: Christian König Cc: Joonas Lahtinen Cc: Jani Nikula Cc: Rodrigo Vivi Cc: Jan Kara Cc: Andrea Arcangeli Cc: Peter Xu Cc: Felix Kuehling Cc: Jason Gunthorpe Cc: Ross Zwisler Cc: Dan Williams Cc: Paolo Bonzini Cc: Radim Krčmář Cc: Michal Hocko Cc: Christian Koenig Cc: Ralph Campbell Cc: John Hubbard Cc: kvm@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: linux-rdma@vger.kernel.org Cc: Arnd Bergmann --- include/linux/mmu_notifier.h | 4 ++++ mm/mmu_notifier.c | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h index 0379956fff23..b6c004bd9f6a 100644 --- a/include/linux/mmu_notifier.h +++ b/include/linux/mmu_notifier.h @@ -259,6 +259,8 @@ extern void __mmu_notifier_invalidate_range_end(struct mmu_notifier_range *r, bool only_end); extern void __mmu_notifier_invalidate_range(struct mm_struct *mm, unsigned long start, unsigned long end); +extern bool +mmu_notifier_range_update_to_read_only(const struct mmu_notifier_range *range); static inline bool mmu_notifier_range_blockable(const struct mmu_notifier_range *range) @@ -568,6 +570,8 @@ static inline void mmu_notifier_mm_destroy(struct mm_struct *mm) { } +#define mmu_notifier_range_update_to_read_only(r) false + #define ptep_clear_flush_young_notify ptep_clear_flush_young #define pmdp_clear_flush_young_notify pmdp_clear_flush_young #define ptep_clear_young_notify ptep_test_and_clear_young diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c index abd88c466eb2..ee36068077b6 100644 --- a/mm/mmu_notifier.c +++ b/mm/mmu_notifier.c @@ -395,3 +395,13 @@ void mmu_notifier_unregister_no_release(struct mmu_notifier *mn, mmdrop(mm); } EXPORT_SYMBOL_GPL(mmu_notifier_unregister_no_release); + +bool +mmu_notifier_range_update_to_read_only(const struct mmu_notifier_range *range) +{ + if (!range->vma || range->event != MMU_NOTIFY_PROTECTION_VMA) + return false; + /* Return true if the vma still have the read flag set. */ + return range->vma->vm_flags & VM_READ; +} +EXPORT_SYMBOL_GPL(mmu_notifier_range_update_to_read_only); -- 2.20.1