diff options
Diffstat (limited to 'arch/x86/mm/gup.c')
-rw-r--r-- | arch/x86/mm/gup.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c index dbe34b93137..dd74e46828c 100644 --- a/arch/x86/mm/gup.c +++ b/arch/x86/mm/gup.c | |||
@@ -108,16 +108,6 @@ static inline void get_head_page_multiple(struct page *page, int nr) | |||
108 | SetPageReferenced(page); | 108 | SetPageReferenced(page); |
109 | } | 109 | } |
110 | 110 | ||
111 | static inline void get_huge_page_tail(struct page *page) | ||
112 | { | ||
113 | /* | ||
114 | * __split_huge_page_refcount() cannot run | ||
115 | * from under us. | ||
116 | */ | ||
117 | VM_BUG_ON(atomic_read(&page->_count) < 0); | ||
118 | atomic_inc(&page->_count); | ||
119 | } | ||
120 | |||
121 | static noinline int gup_huge_pmd(pmd_t pmd, unsigned long addr, | 111 | static noinline int gup_huge_pmd(pmd_t pmd, unsigned long addr, |
122 | unsigned long end, int write, struct page **pages, int *nr) | 112 | unsigned long end, int write, struct page **pages, int *nr) |
123 | { | 113 | { |
@@ -211,6 +201,8 @@ static noinline int gup_huge_pud(pud_t pud, unsigned long addr, | |||
211 | do { | 201 | do { |
212 | VM_BUG_ON(compound_head(page) != head); | 202 | VM_BUG_ON(compound_head(page) != head); |
213 | pages[*nr] = page; | 203 | pages[*nr] = page; |
204 | if (PageTail(page)) | ||
205 | get_huge_page_tail(page); | ||
214 | (*nr)++; | 206 | (*nr)++; |
215 | page++; | 207 | page++; |
216 | refs++; | 208 | refs++; |