This is in order to avoid a forward declaration of
internal_get_user_pages_fast(), in the next patch.

This is code movement only--all generated code should
be identical.

Signed-off-by: John Hubbard <jhubb...@nvidia.com>
---
 mm/gup.c | 112 +++++++++++++++++++++++++++----------------------------
 1 file changed, 56 insertions(+), 56 deletions(-)

diff --git a/mm/gup.c b/mm/gup.c
index 50cd9323efff..4502846d57f9 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -2666,62 +2666,6 @@ static bool gup_fast_permitted(unsigned long start, 
unsigned long end)
 }
 #endif
 
-/*
- * Like get_user_pages_fast() except it's IRQ-safe in that it won't fall back 
to
- * the regular GUP.
- * Note a difference with get_user_pages_fast: this always returns the
- * number of pages pinned, 0 if no pages were pinned.
- *
- * If the architecture does not support this function, simply return with no
- * pages pinned.
- */
-int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
-                         struct page **pages)
-{
-       unsigned long len, end;
-       unsigned long flags;
-       int nr_pinned = 0;
-       /*
-        * Internally (within mm/gup.c), gup fast variants must set FOLL_GET,
-        * because gup fast is always a "pin with a +1 page refcount" request.
-        */
-       unsigned int gup_flags = FOLL_GET;
-
-       if (write)
-               gup_flags |= FOLL_WRITE;
-
-       start = untagged_addr(start) & PAGE_MASK;
-       len = (unsigned long) nr_pages << PAGE_SHIFT;
-       end = start + len;
-
-       if (end <= start)
-               return 0;
-       if (unlikely(!access_ok((void __user *)start, len)))
-               return 0;
-
-       /*
-        * Disable interrupts.  We use the nested form as we can already have
-        * interrupts disabled by get_futex_key.
-        *
-        * With interrupts disabled, we block page table pages from being
-        * freed from under us. See struct mmu_table_batch comments in
-        * include/asm-generic/tlb.h for more details.
-        *
-        * We do not adopt an rcu_read_lock(.) here as we also want to
-        * block IPIs that come from THPs splitting.
-        */
-
-       if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) &&
-           gup_fast_permitted(start, end)) {
-               local_irq_save(flags);
-               gup_pgd_range(start, end, gup_flags, pages, &nr_pinned);
-               local_irq_restore(flags);
-       }
-
-       return nr_pinned;
-}
-EXPORT_SYMBOL_GPL(__get_user_pages_fast);
-
 static int __gup_longterm_unlocked(unsigned long start, int nr_pages,
                                   unsigned int gup_flags, struct page **pages)
 {
@@ -2794,6 +2738,62 @@ static int internal_get_user_pages_fast(unsigned long 
start, int nr_pages,
        return ret;
 }
 
+/*
+ * Like get_user_pages_fast() except it's IRQ-safe in that it won't fall back 
to
+ * the regular GUP.
+ * Note a difference with get_user_pages_fast: this always returns the
+ * number of pages pinned, 0 if no pages were pinned.
+ *
+ * If the architecture does not support this function, simply return with no
+ * pages pinned.
+ */
+int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
+                         struct page **pages)
+{
+       unsigned long len, end;
+       unsigned long flags;
+       int nr_pinned = 0;
+       /*
+        * Internally (within mm/gup.c), gup fast variants must set FOLL_GET,
+        * because gup fast is always a "pin with a +1 page refcount" request.
+        */
+       unsigned int gup_flags = FOLL_GET;
+
+       if (write)
+               gup_flags |= FOLL_WRITE;
+
+       start = untagged_addr(start) & PAGE_MASK;
+       len = (unsigned long) nr_pages << PAGE_SHIFT;
+       end = start + len;
+
+       if (end <= start)
+               return 0;
+       if (unlikely(!access_ok((void __user *)start, len)))
+               return 0;
+
+       /*
+        * Disable interrupts.  We use the nested form as we can already have
+        * interrupts disabled by get_futex_key.
+        *
+        * With interrupts disabled, we block page table pages from being
+        * freed from under us. See struct mmu_table_batch comments in
+        * include/asm-generic/tlb.h for more details.
+        *
+        * We do not adopt an rcu_read_lock(.) here as we also want to
+        * block IPIs that come from THPs splitting.
+        */
+
+       if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) &&
+           gup_fast_permitted(start, end)) {
+               local_irq_save(flags);
+               gup_pgd_range(start, end, gup_flags, pages, &nr_pinned);
+               local_irq_restore(flags);
+       }
+
+       return nr_pinned;
+}
+EXPORT_SYMBOL_GPL(__get_user_pages_fast);
+
 /**
  * get_user_pages_fast() - pin user pages in memory
  * @start:      starting user address
-- 
2.26.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to