]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
userfaultfd: add vm_userfaultfd_ctx to the vm_area_struct
authorMike Kravetz <mike.kravetz@oracle.com>
Thu, 14 Jan 2016 23:52:25 +0000 (15:52 -0800)
committerDhaval Giani <dhaval.giani@oracle.com>
Fri, 20 Jan 2017 18:40:53 +0000 (13:40 -0500)
Orabug: 21685254

This adds the vm_userfaultfd_ctx to the vm_area_struct.

Oracle specific changes to maintain KABI also made.

Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Acked-by: Pavel Emelyanov <xemul@parallels.com>
Cc: Sanidhya Kashyap <sanidhya.gatech@gmail.com>
Cc: zhang.zhanghailiang@huawei.com
Cc: "Kirill A. Shutemov" <kirill@shutemov.name>
Cc: Andres Lagar-Cavilla <andreslc@google.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Hugh Dickins <hughd@google.com>
Cc: Peter Feiner <pfeiner@google.com>
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: "Huangpeng (Peter)" <peter.huangpeng@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 745f234be12b6191b15eae8dd415cc81a9137f47)
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
Reviewed-by: Nitin Gupta <nitin.m.gupta@oracle.com>
Reviewed-by: Dhaval Giani <dhaval.giani@oracle.com>
Signed-off-by: Dhaval Giani <dhaval.giani@oracle.com>
  Conflicts:
include/linux/mm_types.h

include/linux/mm_types.h
kernel/fork.c
mm/mm_init.c

index 8d37e26a1007c6493990093e7ce8a03f2b201419..c03e144cdae99af52b0fe59caa0523807e7c4e97 100644 (file)
@@ -247,6 +247,16 @@ struct vm_region {
                                                * this region */
 };
 
+#ifdef CONFIG_USERFAULTFD
+#define NULL_VM_UFFD_CTX ((struct vm_userfaultfd_ctx) { NULL, })
+struct vm_userfaultfd_ctx {
+       struct userfaultfd_ctx *ctx;
+};
+#else /* CONFIG_USERFAULTFD */
+#define NULL_VM_UFFD_CTX ((struct vm_userfaultfd_ctx) {})
+struct vm_userfaultfd_ctx {};
+#endif /* CONFIG_USERFAULTFD */
+
 /*
  * This struct defines a memory VMM memory area. There is one of these
  * per VM-area/task.  A VM area is any part of the process virtual memory
@@ -313,8 +323,30 @@ struct vm_area_struct {
 #ifdef CONFIG_NUMA
        struct mempolicy *vm_policy;    /* NUMA policy for the VMA */
 #endif
+
+        /* Oracle inc use only
+         * The following padding has been inserted before ABI freeze to
+         * allow extending the structure while preserving ABI.
+         */
+#ifndef __GENKSYMS__
+       /* userfaultfd feature using UEK_KABI_RESERVED(1) */
+       union {
+               UEK_KABI_RESERVED(1)
+               struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
+       };
+#else
+        UEK_KABI_RESERVED(1)
+#endif
+        UEK_KABI_RESERVED(2)
 };
 
+/*
+ * Make sure the size of  struct vm_userfaultfd_ctx is not greater than
+ * the size UEK_KABI_RESERVED.  They are in an unnamed union.
+ */
+#define CHECK_VM_AREA_STRUCT_RESERVED_UNION_SIZE_1() \
+       BUILD_BUG_ON(sizeof(struct vm_userfaultfd_ctx) > sizeof(unsigned long))
+
 struct core_thread {
        struct task_struct *task;
        struct core_thread *next;
index 03c1eaaa6ef56f56a670488eaf572eb8c6f58d4e..ba3ef50774558a436562ec96ab220d9d6873a566 100644 (file)
@@ -451,6 +451,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
                        goto fail_nomem_anon_vma_fork;
                tmp->vm_flags &= ~VM_LOCKED;
                tmp->vm_next = tmp->vm_prev = NULL;
+               tmp->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
                file = tmp->vm_file;
                if (file) {
                        struct inode *inode = file_inode(file);
index 5f420f7fafa1c6b6bd74cdf3b6e9cfb5e7874f87..6330dc24e78c97c1bd08ac9d32e204275b60fcb4 100644 (file)
@@ -203,3 +203,11 @@ static int __init mm_sysfs_init(void)
        return 0;
 }
 postcore_initcall(mm_sysfs_init);
+
+static int __init mm_build_check(void)
+{
+       CHECK_VM_AREA_STRUCT_RESERVED_UNION_SIZE_1();
+
+       return 0;
+}
+core_initcall(mm_build_check);