huge_memory.c (6b16f5d12202a23d875915349cc031c07fe1b3ec) | huge_memory.c (2cf855837b89d92996cf264713f3bed2bf9b0b4f) |
---|---|
1/* 2 * Copyright (C) 2009 Red Hat, Inc. 3 * 4 * This work is licensed under the terms of the GNU GPL, version 2. See 5 * the COPYING file in the top-level directory. 6 */ 7 8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt --- 538 unchanged lines hidden (view full) --- 547 struct vm_area_struct *vma = vmf->vma; 548 struct mem_cgroup *memcg; 549 pgtable_t pgtable; 550 unsigned long haddr = vmf->address & HPAGE_PMD_MASK; 551 int ret = 0; 552 553 VM_BUG_ON_PAGE(!PageCompound(page), page); 554 | 1/* 2 * Copyright (C) 2009 Red Hat, Inc. 3 * 4 * This work is licensed under the terms of the GNU GPL, version 2. See 5 * the COPYING file in the top-level directory. 6 */ 7 8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt --- 538 unchanged lines hidden (view full) --- 547 struct vm_area_struct *vma = vmf->vma; 548 struct mem_cgroup *memcg; 549 pgtable_t pgtable; 550 unsigned long haddr = vmf->address & HPAGE_PMD_MASK; 551 int ret = 0; 552 553 VM_BUG_ON_PAGE(!PageCompound(page), page); 554 |
555 if (mem_cgroup_try_charge(page, vma->vm_mm, gfp, &memcg, true)) { | 555 if (mem_cgroup_try_charge_delay(page, vma->vm_mm, gfp, &memcg, true)) { |
556 put_page(page); 557 count_vm_event(THP_FAULT_FALLBACK); 558 return VM_FAULT_FALLBACK; 559 } 560 561 pgtable = pte_alloc_one(vma->vm_mm, haddr); 562 if (unlikely(!pgtable)) { 563 ret = VM_FAULT_OOM; --- 573 unchanged lines hidden (view full) --- 1137 ret |= VM_FAULT_OOM; 1138 goto out; 1139 } 1140 1141 for (i = 0; i < HPAGE_PMD_NR; i++) { 1142 pages[i] = alloc_page_vma_node(GFP_HIGHUSER_MOVABLE, vma, 1143 vmf->address, page_to_nid(page)); 1144 if (unlikely(!pages[i] || | 556 put_page(page); 557 count_vm_event(THP_FAULT_FALLBACK); 558 return VM_FAULT_FALLBACK; 559 } 560 561 pgtable = pte_alloc_one(vma->vm_mm, haddr); 562 if (unlikely(!pgtable)) { 563 ret = VM_FAULT_OOM; --- 573 unchanged lines hidden (view full) --- 1137 ret |= VM_FAULT_OOM; 1138 goto out; 1139 } 1140 1141 for (i = 0; i < HPAGE_PMD_NR; i++) { 1142 pages[i] = alloc_page_vma_node(GFP_HIGHUSER_MOVABLE, vma, 1143 vmf->address, page_to_nid(page)); 1144 if (unlikely(!pages[i] || |
1145 mem_cgroup_try_charge(pages[i], vma->vm_mm, | 1145 mem_cgroup_try_charge_delay(pages[i], vma->vm_mm, |
1146 GFP_KERNEL, &memcg, false))) { 1147 if (pages[i]) 1148 put_page(pages[i]); 1149 while (--i >= 0) { 1150 memcg = (void *)page_private(pages[i]); 1151 set_page_private(pages[i], 0); 1152 mem_cgroup_cancel_charge(pages[i], memcg, 1153 false); --- 153 unchanged lines hidden (view full) --- 1307 ret |= VM_FAULT_FALLBACK; 1308 } 1309 put_page(page); 1310 } 1311 count_vm_event(THP_FAULT_FALLBACK); 1312 goto out; 1313 } 1314 | 1146 GFP_KERNEL, &memcg, false))) { 1147 if (pages[i]) 1148 put_page(pages[i]); 1149 while (--i >= 0) { 1150 memcg = (void *)page_private(pages[i]); 1151 set_page_private(pages[i], 0); 1152 mem_cgroup_cancel_charge(pages[i], memcg, 1153 false); --- 153 unchanged lines hidden (view full) --- 1307 ret |= VM_FAULT_FALLBACK; 1308 } 1309 put_page(page); 1310 } 1311 count_vm_event(THP_FAULT_FALLBACK); 1312 goto out; 1313 } 1314 |
1315 if (unlikely(mem_cgroup_try_charge(new_page, vma->vm_mm, | 1315 if (unlikely(mem_cgroup_try_charge_delay(new_page, vma->vm_mm, |
1316 huge_gfp, &memcg, true))) { 1317 put_page(new_page); 1318 split_huge_pmd(vma, vmf->pmd, vmf->address); 1319 if (page) 1320 put_page(page); 1321 ret |= VM_FAULT_FALLBACK; 1322 count_vm_event(THP_FAULT_FALLBACK); 1323 goto out; --- 1611 unchanged lines hidden --- | 1316 huge_gfp, &memcg, true))) { 1317 put_page(new_page); 1318 split_huge_pmd(vma, vmf->pmd, vmf->address); 1319 if (page) 1320 put_page(page); 1321 ret |= VM_FAULT_FALLBACK; 1322 count_vm_event(THP_FAULT_FALLBACK); 1323 goto out; --- 1611 unchanged lines hidden --- |