Hi Marek,
On 03/05/2013 02:57 PM, Marek Szyprowski wrote:
@@ -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;
Here just simply strip the __GFP_MOVABLE flag, IIUC it will break the page migrate policy. Because " But GFP_MOVABLE is not only a zone specifier but also an allocation policy.".
Another problem is that you add a new flag to instruct the page allocation, do we have to also handle the hugepage or THP as Mel ever mentioned?
thanks, linfeng