Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1415335

[RFC PATCH 4/6] mm/hugetlb: add userfaultfd hugetlb hook

From Mike Kravetz <mike.kravetz@oracle.com>
Newsgroups linux.kernel
Subject [RFC PATCH 4/6] mm/hugetlb: add userfaultfd hugetlb hook
Date 2016-06-06 19:50 +0200
Message-ID <rH6OZ-80Q-21@gated-at.bofh.it> (permalink)
References <rH6OZ-80Q-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


When processing a hugetlb fault for no page present, check the vma to
determine if faults are to be handled via userfaultfd.  If so, drop the
hugetlb_fault_mutex and call handle_userfault().

Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
---
 mm/hugetlb.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 4943d8b..a2814e7 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -32,6 +32,7 @@
 #include <linux/hugetlb.h>
 #include <linux/hugetlb_cgroup.h>
 #include <linux/node.h>
+#include <linux/userfaultfd_k.h>
 #include "internal.h"
 
 int hugepages_treat_as_movable;
@@ -3569,6 +3570,27 @@ retry:
 		size = i_size_read(mapping->host) >> huge_page_shift(h);
 		if (idx >= size)
 			goto out;
+
+		/*
+		 * Check for page in userfault range
+		 */
+		if (userfaultfd_missing(vma)) {
+			u32 hash;
+
+			/*
+			 * hugetlb_fault_mutex must be dropped before
+			 * handling userfault.  Reacquire after handling
+			 * fault to make calling code simpler.
+			 */
+			hash = hugetlb_fault_mutex_hash(h, mm, vma, mapping,
+							idx, address);
+			mutex_unlock(&hugetlb_fault_mutex_table[hash]);
+			ret = handle_userfault(vma, address, flags,
+						VM_UFFD_MISSING);
+			mutex_lock(&hugetlb_fault_mutex_table[hash]);
+			goto out;
+		}
+
 		page = alloc_huge_page(vma, address, 0);
 		if (IS_ERR(page)) {
 			ret = PTR_ERR(page);
-- 
2.4.11

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[RFC PATCH 0/6] hugetlb support for userfaultfd Mike Kravetz <mike.kravetz@oracle.com> - 2016-06-06 19:50 +0200
  [RFC PATCH 4/6] mm/hugetlb: add userfaultfd hugetlb hook Mike Kravetz <mike.kravetz@oracle.com> - 2016-06-06 19:50 +0200
  [RFC PATCH 1/6] mm/memory: add copy_huge_page_from_user for hugetlb userfaultfd support Mike Kravetz <mike.kravetz@oracle.com> - 2016-06-06 19:50 +0200
  [RFC PATCH 2/6] mm/hugetlb: add hugetlb_mcopy_atomic_pte for userfaultfd support Mike Kravetz <mike.kravetz@oracle.com> - 2016-06-06 19:50 +0200
  [RFC PATCH 5/6] fs/userfaultfd: allow registration of ranges containing huge pages Mike Kravetz <mike.kravetz@oracle.com> - 2016-06-06 19:50 +0200
  [RFC PATCH 6/6] selftests/userfaultfd: add userfaultfd_hugetlb test Mike Kravetz <mike.kravetz@oracle.com> - 2016-06-06 19:50 +0200

csiph-web