Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1296820imu; Wed, 23 Jan 2019 14:24:05 -0800 (PST) X-Google-Smtp-Source: ALg8bN4q6tYSPk6A4tbBJClQogerirhpwUH1NAIVWJH4IaqaMMlZWv3ClJRpYclb2+M3Z9/Ter4F X-Received: by 2002:a17:902:622:: with SMTP id 31mr3989033plg.171.1548282245505; Wed, 23 Jan 2019 14:24:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548282245; cv=none; d=google.com; s=arc-20160816; b=K4x43Y2dj0Hjf1iJAqT8ZN9Sswfs5YQyvB+8UACsjFas6ug94fFCiPBYBGrXDhnzIX AHhCms8HJzxU1y6mA4o/w5nEYQuR+PRyFSxrF7xv4CCa/5Z6SIJLnDclG7yTELzBfPyO lSWN7xu4Gp/NwT9UE9FqTb7OPKSQXENEQd6ujpwlbcwPnspZY8Ci+xlR1lXUoPH9D9lo qGZtGrfOQ3djnOSJO3pxELRxkKAek5aK6JXxF21GZj/j3qEtHpRL9NukEePeN+oyzXNY HdwWwEw6XE4YS8GjW+DdoBP8tK7DvKSg+M0AA81fjR0jHK7cmuZWFumw6UMthNFl7aMn yzWw== 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=Ah2At7Z9WHVesdrMLiCK0xNMPj6Yxfh/2asilkzerWc=; b=dgqZSyJRAOs2dx2i7kgStyVfx1vNpNYL9wIZxa7WBvLFTBtSvqmJmPwTfM+2QsQK8w 3f3M47mey46fL6kCkPuUteAEBQHszv95r60QoV5701jCcdGbz8E6O1giyn5tnqguG357 znTgtpCvjN5bpB4JFvZOIHcSeY6OAUCvEuhCoa/0a4PybHc/gLPuQBSx3eUTu8ws0pNO hk5QWgB2bXM4eJoxauwJRrr3VZ6IhQBpmPWbwL3/qsXi84TFVe3tFgUttDlFTRHzkLt7 gqWKje7X0JYAfTVnm6OdLfwtpK5Az19c/f/5Vg9qy53INIs1Yq+LR9zBuy4jw6cuEMUl ZmpA== 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 z71si20107112pgd.490.2019.01.23.14.23.50; Wed, 23 Jan 2019 14:24:05 -0800 (PST) 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 S1727085AbfAWWXe (ORCPT + 99 others); Wed, 23 Jan 2019 17:23:34 -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-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@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