diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2011-02-11 02:32:18 -0500 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2011-02-11 02:33:14 -0500 |
commit | f19693a17c6705e197eb24d4618060eaac1b535c (patch) | |
tree | fc39dc23297c0e6be730cb0dfd74a34d9c0b8bfd /mm/huge_memory.c | |
parent | 23b120cdfae4f5c29da69de750d545bad719ead4 (diff) | |
parent | 100b33c8bd8a3235fd0b7948338d6cbb3db3c63d (diff) |
Merge commit 'v2.6.38-rc4' into imx-for-2.6.39
Conflicts:
arch/arm/mach-mxs/clock-mx28.c
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'mm/huge_memory.c')
-rw-r--r-- | mm/huge_memory.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 004c9c2aac78..b6c1ce3c53b5 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c | |||
@@ -1162,7 +1162,12 @@ static void __split_huge_page_refcount(struct page *page) | |||
1162 | /* after clearing PageTail the gup refcount can be released */ | 1162 | /* after clearing PageTail the gup refcount can be released */ |
1163 | smp_mb(); | 1163 | smp_mb(); |
1164 | 1164 | ||
1165 | page_tail->flags &= ~PAGE_FLAGS_CHECK_AT_PREP; | 1165 | /* |
1166 | * retain hwpoison flag of the poisoned tail page: | ||
1167 | * fix for the unsuitable process killed on Guest Machine(KVM) | ||
1168 | * by the memory-failure. | ||
1169 | */ | ||
1170 | page_tail->flags &= ~PAGE_FLAGS_CHECK_AT_PREP | __PG_HWPOISON; | ||
1166 | page_tail->flags |= (page->flags & | 1171 | page_tail->flags |= (page->flags & |
1167 | ((1L << PG_referenced) | | 1172 | ((1L << PG_referenced) | |
1168 | (1L << PG_swapbacked) | | 1173 | (1L << PG_swapbacked) | |
@@ -1203,6 +1208,8 @@ static void __split_huge_page_refcount(struct page *page) | |||
1203 | BUG_ON(!PageDirty(page_tail)); | 1208 | BUG_ON(!PageDirty(page_tail)); |
1204 | BUG_ON(!PageSwapBacked(page_tail)); | 1209 | BUG_ON(!PageSwapBacked(page_tail)); |
1205 | 1210 | ||
1211 | mem_cgroup_split_huge_fixup(page, page_tail); | ||
1212 | |||
1206 | lru_add_page_tail(zone, page, page_tail); | 1213 | lru_add_page_tail(zone, page, page_tail); |
1207 | } | 1214 | } |
1208 | 1215 | ||
@@ -1837,9 +1844,9 @@ static void collapse_huge_page(struct mm_struct *mm, | |||
1837 | spin_lock(ptl); | 1844 | spin_lock(ptl); |
1838 | isolated = __collapse_huge_page_isolate(vma, address, pte); | 1845 | isolated = __collapse_huge_page_isolate(vma, address, pte); |
1839 | spin_unlock(ptl); | 1846 | spin_unlock(ptl); |
1840 | pte_unmap(pte); | ||
1841 | 1847 | ||
1842 | if (unlikely(!isolated)) { | 1848 | if (unlikely(!isolated)) { |
1849 | pte_unmap(pte); | ||
1843 | spin_lock(&mm->page_table_lock); | 1850 | spin_lock(&mm->page_table_lock); |
1844 | BUG_ON(!pmd_none(*pmd)); | 1851 | BUG_ON(!pmd_none(*pmd)); |
1845 | set_pmd_at(mm, address, pmd, _pmd); | 1852 | set_pmd_at(mm, address, pmd, _pmd); |
@@ -1856,6 +1863,7 @@ static void collapse_huge_page(struct mm_struct *mm, | |||
1856 | anon_vma_unlock(vma->anon_vma); | 1863 | anon_vma_unlock(vma->anon_vma); |
1857 | 1864 | ||
1858 | __collapse_huge_page_copy(pte, new_page, vma, address, ptl); | 1865 | __collapse_huge_page_copy(pte, new_page, vma, address, ptl); |
1866 | pte_unmap(pte); | ||
1859 | __SetPageUptodate(new_page); | 1867 | __SetPageUptodate(new_page); |
1860 | pgtable = pmd_pgtable(_pmd); | 1868 | pgtable = pmd_pgtable(_pmd); |
1861 | VM_BUG_ON(page_count(pgtable) != 1); | 1869 | VM_BUG_ON(page_count(pgtable) != 1); |