From mboxrd@z Thu Jan 1 00:00:00 1970 From: jglisse@redhat.com Subject: [PATCH v4 1/9] mm/mmu_notifier: contextual information for event enums Date: Wed, 23 Jan 2019 17:23:07 -0500 Message-ID: <20190123222315.1122-2-jglisse@redhat.com> References: <20190123222315.1122-1-jglisse@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190123222315.1122-1-jglisse@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-mm@kvack.org Cc: Ralph Campbell , Jan Kara , Arnd Bergmann , kvm@vger.kernel.org, Matthew Wilcox , linux-rdma@vger.kernel.org, John Hubbard , Felix Kuehling , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Dan Williams , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Michal Hocko , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Jason Gunthorpe , Ross Zwisler , linux-fsdevel@vger.kernel.org, Paolo Bonzini , Andrew Morton , =?UTF-8?q?Christian=20K=C3=B6nig?= List-Id: linux-rdma@vger.kernel.org RnJvbTogSsOpcsO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+CgpDUFUgcGFnZSB0YWJs ZSB1cGRhdGUgY2FuIGhhcHBlbnMgZm9yIG1hbnkgcmVhc29ucywgbm90IG9ubHkgYXMgYSByZXN1 bHQKb2YgYSBzeXNjYWxsIChtdW5tYXAoKSwgbXByb3RlY3QoKSwgbXJlbWFwKCksIG1hZHZpc2Uo KSwgLi4uKSBidXQgYWxzbwphcyBhIHJlc3VsdCBvZiBrZXJuZWwgYWN0aXZpdGllcyAobWVtb3J5 IGNvbXByZXNzaW9uLCByZWNsYWltLCBtaWdyYXRpb24sCi4uLikuCgpUaGlzIHBhdGNoIGludHJv ZHVjZSBhIHNldCBvZiBlbnVtcyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggZWFjaCBvZgp0 aGUgZXZlbnRzIHRyaWdnZXJpbmcgYSBtbXUgbm90aWZpZXIuIExhdHRlciBwYXRjaGVzIHRha2Ug YWR2YW50YWdlcyBvZgp0aG9zZSBlbnVtIHZhbHVlcy4KCiAgICAtIFVOTUFQOiBtdW5tYXAoKSBv ciBtcmVtYXAoKQogICAgLSBDTEVBUjogcGFnZSB0YWJsZSBpcyBjbGVhcmVkIChtaWdyYXRpb24s IGNvbXBhY3Rpb24sIHJlY2xhaW0sIC4uLikKICAgIC0gUFJPVEVDVElPTl9WTUE6IGNoYW5nZSBp biBhY2Nlc3MgcHJvdGVjdGlvbnMgZm9yIHRoZSByYW5nZQogICAgLSBQUk9URUNUSU9OX1BBR0U6 IGNoYW5nZSBpbiBhY2Nlc3MgcHJvdGVjdGlvbnMgZm9yIHBhZ2UgaW4gdGhlIHJhbmdlCiAgICAt IFNPRlRfRElSVFk6IHNvZnQgZGlydHluZXNzIHRyYWNraW5nCgpCZWluZyBhYmxlIHRvIGlkZW50 aWZ5IG11bm1hcCgpIGFuZCBtcmVtYXAoKSBmcm9tIG90aGVyIHJlYXNvbnMgd2h5IHRoZQpwYWdl IHRhYmxlIGlzIGNsZWFyZWQgaXMgaW1wb3J0YW50IHRvIGFsbG93IHVzZXIgb2YgbW11IG5vdGlm aWVyIHRvCnVwZGF0ZSB0aGVpciBvd24gaW50ZXJuYWwgdHJhY2tpbmcgc3RydWN0dXJlIGFjY29y ZGluZ2x5IChvbiBtdW5tYXAgb3IKbXJlbWFwIGl0IGlzIG5vdCBsb25nZXIgbmVlZGVkIHRvIHRy YWNrIHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzcyBhcyBpdApiZWNvbWVzIGludmFsaWQpLgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+CkNjOiBDaHJp c3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+CkNjOiBKYW4gS2FyYSA8amFj a0BzdXNlLmN6PgpDYzogRmVsaXggS3VlaGxpbmcgPEZlbGl4Lkt1ZWhsaW5nQGFtZC5jb20+CkNj OiBKYXNvbiBHdW50aG9ycGUgPGpnZ0BtZWxsYW5veC5jb20+CkNjOiBBbmRyZXcgTW9ydG9uIDxh a3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPgpDYzogTWF0dGhldyBXaWxjb3ggPG1hd2lsY294QG1p Y3Jvc29mdC5jb20+CkNjOiBSb3NzIFp3aXNsZXIgPHp3aXNsZXJAa2VybmVsLm9yZz4KQ2M6IERh biBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgpDYzogUGFvbG8gQm9uemluaSA8 cGJvbnppbmlAcmVkaGF0LmNvbT4KQ2M6IFJhZGltIEtyxI1tw6HFmSA8cmtyY21hckByZWRoYXQu Y29tPgpDYzogTWljaGFsIEhvY2tvIDxtaG9ja29Aa2VybmVsLm9yZz4KQ2M6IFJhbHBoIENhbXBi ZWxsIDxyY2FtcGJlbGxAbnZpZGlhLmNvbT4KQ2M6IEpvaG4gSHViYmFyZCA8amh1YmJhcmRAbnZp ZGlhLmNvbT4KQ2M6IGt2bUB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKQ2M6IGxpbnV4LXJkbWFAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1mc2Rl dmVsQHZnZXIua2VybmVsLm9yZwpDYzogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KLS0t CiBpbmNsdWRlL2xpbnV4L21tdV9ub3RpZmllci5oIHwgMzAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBh L2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L21tdV9ub3RpZmll ci5oCmluZGV4IDQwNTBlYzFjM2I0NS4uYWJjOWRiYjdiY2I2IDEwMDY0NAotLS0gYS9pbmNsdWRl L2xpbnV4L21tdV9ub3RpZmllci5oCisrKyBiL2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVyLmgK QEAgLTEwLDYgKzEwLDM2IEBACiBzdHJ1Y3QgbW11X25vdGlmaWVyOwogc3RydWN0IG1tdV9ub3Rp Zmllcl9vcHM7CiAKKy8qKgorICogZW51bSBtbXVfbm90aWZpZXJfZXZlbnQgLSByZWFzb24gZm9y IHRoZSBtbXUgbm90aWZpZXIgY2FsbGJhY2sKKyAqIEBNTVVfTk9USUZZX1VOTUFQOiBlaXRoZXIg bXVubWFwKCkgdGhhdCB1bm1hcCB0aGUgcmFuZ2Ugb3IgYSBtcmVtYXAoKSB0aGF0CisgKiBtb3Zl IHRoZSByYW5nZQorICoKKyAqIEBNTVVfTk9USUZZX0NMRUFSOiBjbGVhciBwYWdlIHRhYmxlIGVu dHJ5IChtYW55IHJlYXNvbnMgZm9yIHRoaXMgbGlrZQorICogbWFkdmlzZSgpIG9yIHJlcGxhY2lu ZyBhIHBhZ2UgYnkgYW5vdGhlciBvbmUsIC4uLikuCisgKgorICogQE1NVV9OT1RJRllfUFJPVEVD VElPTl9WTUE6IHVwZGF0ZSBpcyBkdWUgdG8gcHJvdGVjdGlvbiBjaGFuZ2UgZm9yIHRoZSByYW5n ZQorICogaWUgdXNpbmcgdGhlIHZtYSBhY2Nlc3MgcGVybWlzc2lvbiAodm1fcGFnZV9wcm90KSB0 byB1cGRhdGUgdGhlIHdob2xlIHJhbmdlCisgKiBpcyBlbm91Z2ggbm8gbmVlZCB0byBpbnNwZWN0 IGNoYW5nZXMgdG8gdGhlIENQVSBwYWdlIHRhYmxlIChtcHJvdGVjdCgpCisgKiBzeXNjYWxsKQor ICoKKyAqIEBNTVVfTk9USUZZX1BST1RFQ1RJT05fUEFHRTogdXBkYXRlIGlzIGR1ZSB0byBjaGFu Z2UgaW4gcmVhZC93cml0ZSBmbGFnIGZvcgorICogcGFnZXMgaW4gdGhlIHJhbmdlIHNvIHRvIG1p cnJvciB0aG9zZSBjaGFuZ2VzIHRoZSB1c2VyIG11c3QgaW5zcGVjdCB0aGUgQ1BVCisgKiBwYWdl IHRhYmxlIChmcm9tIHRoZSBlbmQgY2FsbGJhY2spLgorICoKKyAqIEBNTVVfTk9USUZZX1NPRlRf RElSVFk6IHNvZnQgZGlydHkgYWNjb3VudGluZyAoc3RpbGwgc2FtZSBwYWdlIGFuZCBzYW1lCisg KiBhY2Nlc3MgZmxhZ3MpLiBVc2VyIHNob3VsZCBzb2Z0IGRpcnR5IHRoZSBwYWdlIGluIHRoZSBl bmQgY2FsbGJhY2sgdG8gbWFrZQorICogc3VyZSB0aGF0IGFueW9uZSByZWx5aW5nIG9uIHNvZnQg ZGlydHluZXNzIGNhdGNoIHBhZ2VzIHRoYXQgbWlnaHQgYmUgd3JpdHRlbgorICogdGhyb3VnaCBu b24gQ1BVIG1hcHBpbmdzLgorICovCitlbnVtIG1tdV9ub3RpZmllcl9ldmVudCB7CisJTU1VX05P VElGWV9VTk1BUCA9IDAsCisJTU1VX05PVElGWV9DTEVBUiwKKwlNTVVfTk9USUZZX1BST1RFQ1RJ T05fVk1BLAorCU1NVV9OT1RJRllfUFJPVEVDVElPTl9QQUdFLAorCU1NVV9OT1RJRllfU09GVF9E SVJUWSwKK307CisKICNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSCiAKIC8qCi0tIAoyLjE3LjIK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2903EC282C0 for ; Wed, 23 Jan 2019 22:24:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 01884218A1 for ; Wed, 23 Jan 2019 22:24:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727050AbfAWWXd (ORCPT ); Wed, 23 Jan 2019 17:23:33 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57834 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726249AbfAWWXc (ORCPT ); Wed, 23 Jan 2019 17:23:32 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 20E67461FF; Wed, 23 Jan 2019 22:23:32 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-120-127.rdu2.redhat.com [10.10.120.127]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7FF865D964; Wed, 23 Jan 2019 22:23:29 +0000 (UTC) From: jglisse@redhat.com To: linux-mm@kvack.org Cc: Andrew Morton , linux-kernel@vger.kernel.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , =?UTF-8?q?Christian=20K=C3=B6nig?= , Jan Kara , Felix Kuehling , Jason Gunthorpe , Matthew Wilcox , 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, linux-fsdevel@vger.kernel.org, Arnd Bergmann Subject: [PATCH v4 1/9] mm/mmu_notifier: contextual information for event enums Date: Wed, 23 Jan 2019 17:23:07 -0500 Message-Id: <20190123222315.1122-2-jglisse@redhat.com> In-Reply-To: <20190123222315.1122-1-jglisse@redhat.com> References: <20190123222315.1122-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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 23 Jan 2019 22:23:32 +0000 (UTC) Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org From: Jérôme Glisse CPU page table update can happens for many reasons, not only as a result of a syscall (munmap(), mprotect(), mremap(), madvise(), ...) but also as a result of kernel activities (memory compression, reclaim, migration, ...). This patch introduce a set of enums that can be associated with each of the events triggering a mmu notifier. Latter patches take advantages of those enum values. - UNMAP: munmap() or mremap() - CLEAR: page table is cleared (migration, compaction, reclaim, ...) - PROTECTION_VMA: change in access protections for the range - PROTECTION_PAGE: change in access protections for page in the range - SOFT_DIRTY: soft dirtyness tracking Being able to identify munmap() and mremap() from other reasons why the page table is cleared is important to allow user of mmu notifier to update their own internal tracking structure accordingly (on munmap or mremap it is not longer needed to track range of virtual address as it becomes invalid). Signed-off-by: Jérôme Glisse Cc: Christian König Cc: Jan Kara Cc: Felix Kuehling Cc: Jason Gunthorpe Cc: Andrew Morton Cc: Matthew Wilcox Cc: Ross Zwisler Cc: Dan Williams Cc: Paolo Bonzini Cc: Radim Krčmář Cc: Michal Hocko Cc: Ralph Campbell Cc: John Hubbard Cc: kvm@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: linux-rdma@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org Cc: Arnd Bergmann --- include/linux/mmu_notifier.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h index 4050ec1c3b45..abc9dbb7bcb6 100644 --- a/include/linux/mmu_notifier.h +++ b/include/linux/mmu_notifier.h @@ -10,6 +10,36 @@ struct mmu_notifier; struct mmu_notifier_ops; +/** + * enum mmu_notifier_event - reason for the mmu notifier callback + * @MMU_NOTIFY_UNMAP: either munmap() that unmap the range or a mremap() that + * move the range + * + * @MMU_NOTIFY_CLEAR: clear page table entry (many reasons for this like + * madvise() or replacing a page by another one, ...). + * + * @MMU_NOTIFY_PROTECTION_VMA: update is due to protection change for the range + * ie using the vma access permission (vm_page_prot) to update the whole range + * is enough no need to inspect changes to the CPU page table (mprotect() + * syscall) + * + * @MMU_NOTIFY_PROTECTION_PAGE: update is due to change in read/write flag for + * pages in the range so to mirror those changes the user must inspect the CPU + * page table (from the end callback). + * + * @MMU_NOTIFY_SOFT_DIRTY: soft dirty accounting (still same page and same + * access flags). User should soft dirty the page in the end callback to make + * sure that anyone relying on soft dirtyness catch pages that might be written + * through non CPU mappings. + */ +enum mmu_notifier_event { + MMU_NOTIFY_UNMAP = 0, + MMU_NOTIFY_CLEAR, + MMU_NOTIFY_PROTECTION_VMA, + MMU_NOTIFY_PROTECTION_PAGE, + MMU_NOTIFY_SOFT_DIRTY, +}; + #ifdef CONFIG_MMU_NOTIFIER /* -- 2.17.2