userfaultfd: hugetlbfs: UFFD_FEATURE_MISSING_SHMEM
authorAndrea Arcangeli <[email protected]>
Wed, 22 Feb 2017 23:43:58 +0000 (15:43 -0800)
committerLinus Torvalds <[email protected]>
Thu, 23 Feb 2017 00:41:29 +0000 (16:41 -0800)
Userland developers asked to be notified immediately by the UFFDIO_API
ioctl if shmem missing mode is supported by userfaultfd in the running
kernel.  This avoids the need to run UFFDIO_REGISTER on a shmem virtual
memory range to find out.

Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Andrea Arcangeli <[email protected]>
Cc: "Dr. David Alan Gilbert" <[email protected]>
Cc: Hillf Danton <[email protected]>
Cc: Michael Rapoport <[email protected]>
Cc: Mike Kravetz <[email protected]>
Cc: Mike Rapoport <[email protected]>
Cc: Pavel Emelyanov <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
include/uapi/linux/userfaultfd.h

index 10631a4cdb24c0bac419aa8c6ce5833667f1a562..9ac4b68c54d18ed806534b1de726a1ea4b86ca7d 100644 (file)
@@ -21,7 +21,8 @@
 #define UFFD_API_FEATURES (UFFD_FEATURE_EVENT_FORK |           \
                           UFFD_FEATURE_EVENT_REMAP |           \
                           UFFD_FEATURE_EVENT_MADVDONTNEED |    \
-                          UFFD_FEATURE_MISSING_HUGETLBFS)
+                          UFFD_FEATURE_MISSING_HUGETLBFS |     \
+                          UFFD_FEATURE_MISSING_SHMEM)
 #define UFFD_API_IOCTLS                                \
        ((__u64)1 << _UFFDIO_REGISTER |         \
         (__u64)1 << _UFFDIO_UNREGISTER |       \
@@ -146,12 +147,17 @@ struct uffdio_api {
         *    it, so userland can later check if the feature flag is
         *    present in uffdio_api.features after UFFDIO_API
         *    succeeded.
+        *
+        * UFFD_FEATURE_MISSING_SHMEM works the same as
+        * UFFD_FEATURE_MISSING_HUGETLBFS, but it applies to shmem
+        * (i.e. tmpfs and other shmem based APIs).
         */
 #define UFFD_FEATURE_PAGEFAULT_FLAG_WP         (1<<0)
 #define UFFD_FEATURE_EVENT_FORK                        (1<<1)
 #define UFFD_FEATURE_EVENT_REMAP               (1<<2)
 #define UFFD_FEATURE_EVENT_MADVDONTNEED                (1<<3)
 #define UFFD_FEATURE_MISSING_HUGETLBFS         (1<<4)
+#define UFFD_FEATURE_MISSING_SHMEM             (1<<5)
        __u64 features;
 
        __u64 ioctls;