Messages in this thread |  | | Date | Thu, 9 Jul 2020 12:28:03 +0200 | From | Michal Hocko <> | Subject | Re: [PATCH v4 06/11] mm/migrate: make a standard migration target allocation function |
| |
On Thu 09-07-20 16:15:07, Joonsoo Kim wrote: > 2020년 7월 8일 (수) 오전 4:00, Michal Hocko <mhocko@kernel.org>님이 작성: > > > > On Tue 07-07-20 16:49:51, Vlastimil Babka wrote: > > > On 7/7/20 9:44 AM, js1304@gmail.com wrote: > > > > From: Joonsoo Kim <iamjoonsoo.kim@lge.com> > > > > > > > > There are some similar functions for migration target allocation. Since > > > > there is no fundamental difference, it's better to keep just one rather > > > > than keeping all variants. This patch implements base migration target > > > > allocation function. In the following patches, variants will be converted > > > > to use this function. > > > > > > > > Changes should be mechanical but there are some differences. First, Some > > > > callers' nodemask is assgined to NULL since NULL nodemask will be > > > > considered as all available nodes, that is, &node_states[N_MEMORY]. > > > > Second, for hugetlb page allocation, gfp_mask is ORed since a user could > > > > provide a gfp_mask from now on. > > > > > > I think that's wrong. See how htlb_alloc_mask() determines between > > > GFP_HIGHUSER_MOVABLE and GFP_HIGHUSER, but then you OR it with __GFP_MOVABLE so > > > it's always GFP_HIGHUSER_MOVABLE. > > Indeed. > > > Right you are! Not that it would make any real difference because only > > migrateable hugetlb pages will get __GFP_MOVABLE and so we shouldn't > > really end up here for !movable pages in the first place (not sure about > > soft offlining at this moment). But yeah it would be simply better to > > override gfp mask for hugetlb which we have been doing anyway. > > Override gfp mask doesn't work since some users will call this function with > __GFP_THISNODE.
> I will use hugepage_movable_supported() here and > clear __GFP_MOVABLE if needed.
hugepage_movable_supported is really an implementation detail, do not use it here. I think it would be better to add
gfp_t htlb_modify_alloc_mask(struct hstate *h, gfp_t mask) { gfp_t default_mask = htlb_alloc_mask(h);
/* Some callers might want to enforce node */ return default_mask | (mask & __GFP_THISNODE); }
If we need to special case others, eg reclaim restrictions there would be a single place to do so. -- Michal Hocko SUSE Labs
|  |