Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp4461062img; Tue, 26 Mar 2019 09:49:24 -0700 (PDT) X-Google-Smtp-Source: APXvYqxl88wmopbJeh8UTPZjzuuDJJAdJt1oncy7+2WTwuQsO0AOXffm0wJzPqdFA9b8ymKbBtUC X-Received: by 2002:a62:565c:: with SMTP id k89mr30717432pfb.175.1553618964570; Tue, 26 Mar 2019 09:49:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553618964; cv=none; d=google.com; s=arc-20160816; b=Nl9ozbcK35tO7A97dZk1N6/Tb58nNV9vfTCRzkP7FdtYAnXPD6esuWvXQmP3TiT67/ eoZFuRyjR6wjmE/gU+j7KYkG7DcqvgeUYR0q0jEXQiT9h3K8s0V4eXZAF29teVrdtQd9 5hjCmpqm+5UL2LQ7z6II9jmUvtULJ4bJOWycxkHL37MKDZpereqOIhn70tbSZwF9Z/tj Ztai9O3Uxs1laoYid0McLXy1JNXUaLDUQSYI32dOdoKiSCarWSv97KyHTKXly8nrgrw4 D/Tu21/2Sw/z1jksX6M5dfEIMmIK1Cs2LiemEraQViB9FAGgNq5IwHd0S53HdHOTqvRq Z18g== 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=qd+j517MeUYcwakOP+kXZkhhiv8aT+TIOX0bOZ6xYI0=; b=Q7P4a6dDVyps5+1gyHOgT1JlycpQ2NrSvbC/I8TfhpMbTB/eTzveDBU8wJpDvid+q+ MlhmOasLnqp/uWBtERQSqTR5rM9IWXRt3N2kia4QjVNmog5JlIxjhBLBMswYVr9HVNQ8 e9mLY1cUhvgnXPogH2sqkHvhopA929PLhUF8hmJYE4RpOOU32p1N2N+fq2rTuZetRoey nwaLDe9QvYEbYU7eyzTR+wrHJjqgS3/TNzb826Gc7IYOowK7QxvfnDX5og7bwwc3b4pq 7Os87Rbt2GGhQGrpXvoUYHy+fIHekZsbWabkSYnAZDodzreDxsMA7E7hBG0rVwqxjYAv 3iMA== 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 r201si15609051pgr.445.2019.03.26.09.49.09; Tue, 26 Mar 2019 09:49:24 -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 S1732084AbfCZQsM (ORCPT + 99 others); Tue, 26 Mar 2019 12:48:12 -0400 Received: from mx1.redhat.com ([209.132.183.28]:37720 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732018AbfCZQsL (ORCPT ); Tue, 26 Mar 2019 12:48:11 -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 761CCC04B2F6; Tue, 26 Mar 2019 16:48:10 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.20.6.236]) by smtp.corp.redhat.com (Postfix) with ESMTP id 53C89176B1; Tue, 26 Mar 2019 16:48:08 +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 4/8] mm/mmu_notifier: contextual information for event enums Date: Tue, 26 Mar 2019 12:47:43 -0400 Message-Id: <20190326164747.24405-5-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.32]); Tue, 26 Mar 2019 16:48:10 +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: 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 | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h index c8672c366f67..2386e71ac1b8 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.20.1