2020년 7월 15일 (수) 오후 5:24, Michal Hocko <mhocko@xxxxxxxxxx>님이 작성: > > On Wed 15-07-20 14:05:27, Joonsoo Kim wrote: > > From: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> > > > > We have well defined scope API to exclude CMA region. > > Use it rather than manipulating gfp_mask manually. With this change, > > we can now use __GFP_MOVABLE for gfp_mask and the ZONE_MOVABLE is also > > searched by page allocator. For hugetlb, gfp_mask is redefined since > > it has a regular allocation mask filter for migration target. > > > > Note that this can be considered as a fix for the commit 9a4e9f3b2d73 > > ("mm: update get_user_pages_longterm to migrate pages allocated from > > CMA region"). However, "Fixes" tag isn't added here since it is just > > suboptimal but it doesn't cause any problem. > > But it is breaking the contract that the longterm pins never end up in a > cma managed memory. So I think Fixes tag is really due. I am not sure > about stable backport. If the patch was the trivial move of Previous implementation is correct since longterm pins never end up in a CMA managed memory with that implementation. It's just a different and suboptimal implementation to exclude the CMA area. This is why I don't add the "Fixes" tag on the patch. > memalloc_nocma_restore then it would be probably worth it because it is > trivial to review and backport. I suspect that longterm pins in CMA > regions would cause hard to debug issues where CMA memory will not be > available. But I am not really sure this is a real problem considering > how many long term pin users we have and I have also no idea whether > those are usually used along with CMA users. > > Anyway I think it would really be much better to isolate the > memalloc_nocma_restore and have it first in the series. The reword of Unfortunately, it's not possible to place it first in the series since memalloc_nocma_XXX API has a bug that could return the CMA area even if scope is set up. It is fixed on the first patch in this series. > the __GFP_MOVABLE functionality is orthogonal. My logic is that, we basically assume that using __GFP_MOVABLE is possible in migration target allocation. And, it was necessarily cleared in order to exclude the CMA area. Now, we use the other method to exclude the CMA area so __GFP_MOVABLE is added like usual. If you think that it deserves to be a separate patch, I will do it on the next version. > Btw __GFP_NOWARN change is not documented. Will document it. Thanks.