Hi Marek,
On 03/05/2013 02:57 PM, Marek Szyprowski wrote:
Ensure that newly allocated pages, which are faulted in in FOLL_DURABLE mode comes from non-movalbe pageblocks, to workaround migration failures with Contiguous Memory Allocator.
snip
@@ -2495,7 +2498,7 @@ static inline void cow_user_page(struct page *dst, struct page *src, unsigned lo */ static int do_wp_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long address, pte_t *page_table, pmd_t *pmd,
spinlock_t *ptl, pte_t orig_pte)
__releases(ptl)spinlock_t *ptl, pte_t orig_pte, unsigned int flags)
{ struct page *old_page, *new_page = NULL; @@ -2505,6 +2508,10 @@ static int do_wp_page(struct mm_struct *mm, struct vm_area_struct *vma, struct page *dirty_page = NULL; unsigned long mmun_start = 0; /* For mmu_notifiers */ unsigned long mmun_end = 0; /* For mmu_notifiers */
- gfp_t gfp = GFP_HIGHUSER_MOVABLE;
- if (IS_ENABLED(CONFIG_CMA) && (flags & FAULT_FLAG_NO_CMA))
gfp &= ~__GFP_MOVABLE;
snip
@@ -3187,6 +3194,11 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma, struct vm_fault vmf; int ret; int page_mkwrite = 0;
- gfp_t gfp = GFP_HIGHUSER_MOVABLE;
- if (IS_ENABLED(CONFIG_CMA) && (flags & FAULT_FLAG_NO_CMA))
gfp &= ~__GFP_MOVABLE;
/*
Since the GUP unmovable pages are only corner cases in all kinds of pagefaults, I'm afraid that adding special treatment codes in generic pagefault core interface is not that necessary or worth to do. But I'm not sure if the performance impact is as large as to be worried about.
thanks, linfeng