diff options
| -rw-r--r-- | arch/powerpc/Kconfig | 3 | ||||
| -rw-r--r-- | arch/x86/Kconfig | 1 | ||||
| -rw-r--r-- | arch/x86/mm/Makefile | 3 | ||||
| -rw-r--r-- | include/linux/mm.h | 20 | ||||
| -rw-r--r-- | mm/Kconfig | 3 | ||||
| -rw-r--r-- | mm/util.c | 15 |
6 files changed, 16 insertions, 29 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 63c9cafda9c4..587da5e0990f 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
| @@ -42,9 +42,6 @@ config GENERIC_HARDIRQS | |||
| 42 | bool | 42 | bool |
| 43 | default y | 43 | default y |
| 44 | 44 | ||
| 45 | config HAVE_GET_USER_PAGES_FAST | ||
| 46 | def_bool PPC64 | ||
| 47 | |||
| 48 | config HAVE_SETUP_PER_CPU_AREA | 45 | config HAVE_SETUP_PER_CPU_AREA |
| 49 | def_bool PPC64 | 46 | def_bool PPC64 |
| 50 | 47 | ||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 3d0f2b6a5a16..ac2fb0641a04 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
| @@ -22,7 +22,6 @@ config X86 | |||
| 22 | select HAVE_IDE | 22 | select HAVE_IDE |
| 23 | select HAVE_OPROFILE | 23 | select HAVE_OPROFILE |
| 24 | select HAVE_IOREMAP_PROT | 24 | select HAVE_IOREMAP_PROT |
| 25 | select HAVE_GET_USER_PAGES_FAST | ||
| 26 | select HAVE_KPROBES | 25 | select HAVE_KPROBES |
| 27 | select ARCH_WANT_OPTIONAL_GPIOLIB | 26 | select ARCH_WANT_OPTIONAL_GPIOLIB |
| 28 | select HAVE_KRETPROBES | 27 | select HAVE_KRETPROBES |
diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile index 2977ea37791f..dfb932dcf136 100644 --- a/arch/x86/mm/Makefile +++ b/arch/x86/mm/Makefile | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | obj-y := init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \ | 1 | obj-y := init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \ |
| 2 | pat.o pgtable.o | 2 | pat.o pgtable.o gup.o |
| 3 | 3 | ||
| 4 | obj-$(CONFIG_HAVE_GET_USER_PAGES_FAST) += gup.o | ||
| 5 | obj-$(CONFIG_X86_32) += pgtable_32.o | 4 | obj-$(CONFIG_X86_32) += pgtable_32.o |
| 6 | 5 | ||
| 7 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o | 6 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 335288bff1b7..fa651609b65d 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -834,7 +834,6 @@ extern int mprotect_fixup(struct vm_area_struct *vma, | |||
| 834 | struct vm_area_struct **pprev, unsigned long start, | 834 | struct vm_area_struct **pprev, unsigned long start, |
| 835 | unsigned long end, unsigned long newflags); | 835 | unsigned long end, unsigned long newflags); |
| 836 | 836 | ||
| 837 | #ifdef CONFIG_HAVE_GET_USER_PAGES_FAST | ||
| 838 | /* | 837 | /* |
| 839 | * get_user_pages_fast provides equivalent functionality to get_user_pages, | 838 | * get_user_pages_fast provides equivalent functionality to get_user_pages, |
| 840 | * operating on current and current->mm (force=0 and doesn't return any vmas). | 839 | * operating on current and current->mm (force=0 and doesn't return any vmas). |
| @@ -848,25 +847,6 @@ extern int mprotect_fixup(struct vm_area_struct *vma, | |||
| 848 | int get_user_pages_fast(unsigned long start, int nr_pages, int write, | 847 | int get_user_pages_fast(unsigned long start, int nr_pages, int write, |
| 849 | struct page **pages); | 848 | struct page **pages); |
| 850 | 849 | ||
| 851 | #else | ||
| 852 | /* | ||
| 853 | * Should probably be moved to asm-generic, and architectures can include it if | ||
| 854 | * they don't implement their own get_user_pages_fast. | ||
| 855 | */ | ||
| 856 | #define get_user_pages_fast(start, nr_pages, write, pages) \ | ||
| 857 | ({ \ | ||
| 858 | struct mm_struct *mm = current->mm; \ | ||
| 859 | int ret; \ | ||
| 860 | \ | ||
| 861 | down_read(&mm->mmap_sem); \ | ||
| 862 | ret = get_user_pages(current, mm, start, nr_pages, \ | ||
| 863 | write, 0, pages, NULL); \ | ||
| 864 | up_read(&mm->mmap_sem); \ | ||
| 865 | \ | ||
| 866 | ret; \ | ||
| 867 | }) | ||
| 868 | #endif | ||
| 869 | |||
| 870 | /* | 850 | /* |
| 871 | * A callback you can register to apply pressure to ageable caches. | 851 | * A callback you can register to apply pressure to ageable caches. |
| 872 | * | 852 | * |
diff --git a/mm/Kconfig b/mm/Kconfig index 446c6588c753..0bd9c2dbb2a0 100644 --- a/mm/Kconfig +++ b/mm/Kconfig | |||
| @@ -77,9 +77,6 @@ config FLAT_NODE_MEM_MAP | |||
| 77 | def_bool y | 77 | def_bool y |
| 78 | depends on !SPARSEMEM | 78 | depends on !SPARSEMEM |
| 79 | 79 | ||
| 80 | config HAVE_GET_USER_PAGES_FAST | ||
| 81 | bool | ||
| 82 | |||
| 83 | # | 80 | # |
| 84 | # Both the NUMA code and DISCONTIGMEM use arrays of pg_data_t's | 81 | # Both the NUMA code and DISCONTIGMEM use arrays of pg_data_t's |
| 85 | # to represent different areas of memory. This variable allows | 82 | # to represent different areas of memory. This variable allows |
| @@ -171,3 +171,18 @@ void arch_pick_mmap_layout(struct mm_struct *mm) | |||
| 171 | mm->unmap_area = arch_unmap_area; | 171 | mm->unmap_area = arch_unmap_area; |
| 172 | } | 172 | } |
| 173 | #endif | 173 | #endif |
| 174 | |||
| 175 | int __attribute__((weak)) get_user_pages_fast(unsigned long start, | ||
| 176 | int nr_pages, int write, struct page **pages) | ||
| 177 | { | ||
| 178 | struct mm_struct *mm = current->mm; | ||
| 179 | int ret; | ||
| 180 | |||
| 181 | down_read(&mm->mmap_sem); | ||
| 182 | ret = get_user_pages(current, mm, start, nr_pages, | ||
| 183 | write, 0, pages, NULL); | ||
| 184 | up_read(&mm->mmap_sem); | ||
| 185 | |||
| 186 | return ret; | ||
| 187 | } | ||
| 188 | EXPORT_SYMBOL_GPL(get_user_pages_fast); | ||
