Message ID | 1588130803-20527-7-git-send-email-iamjoonsoo.kim@lge.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | change the implementation of the PageHighMem() | expand |
On Wed, Apr 29, 2020 at 12:26:39PM +0900, js1304@gmail.com wrote: > From: Joonsoo Kim <iamjoonsoo.kim@lge.com> > > Until now, PageHighMem() is used for two different cases. One is to check > if there is a direct mapping for this page or not. The other is to check > the zone of this page, that is, weather it is the highmem type zone or not. > > Now, we have separate functions, PageHighMem() and PageHighMemZone() for > each cases. Use appropriate one. > > Note that there are some rules to determine the proper macro. > > 1. If PageHighMem() is called for checking if the direct mapping exists > or not, use PageHighMem(). > 2. If PageHighMem() is used to predict the previous gfp_flags for > this page, use PageHighMemZone(). The zone of the page is related to > the gfp_flags. > 3. If purpose of calling PageHighMem() is to count highmem page and > to interact with the system by using this count, use PageHighMemZone(). > This counter is usually used to calculate the available memory for an > kernel allocation and pages on the highmem zone cannot be available > for an kernel allocation. > 4. Otherwise, use PageHighMemZone(). It's safe since it's implementation > is just copy of the previous PageHighMem() implementation and won't > be changed. > > I apply the rule #3 for this patch. > > Acked-by: Roman Gushchin <guro@fb.com> > Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> Why do we care about the zone here? This only cares about having kernel direct mapped pages as far as I can tell.
2020년 5월 1일 (금) 오후 9:26, Christoph Hellwig <hch@infradead.org>님이 작성: > > On Wed, Apr 29, 2020 at 12:26:39PM +0900, js1304@gmail.com wrote: > > From: Joonsoo Kim <iamjoonsoo.kim@lge.com> > > > > Until now, PageHighMem() is used for two different cases. One is to check > > if there is a direct mapping for this page or not. The other is to check > > the zone of this page, that is, weather it is the highmem type zone or not. > > > > Now, we have separate functions, PageHighMem() and PageHighMemZone() for > > each cases. Use appropriate one. > > > > Note that there are some rules to determine the proper macro. > > > > 1. If PageHighMem() is called for checking if the direct mapping exists > > or not, use PageHighMem(). > > 2. If PageHighMem() is used to predict the previous gfp_flags for > > this page, use PageHighMemZone(). The zone of the page is related to > > the gfp_flags. > > 3. If purpose of calling PageHighMem() is to count highmem page and > > to interact with the system by using this count, use PageHighMemZone(). > > This counter is usually used to calculate the available memory for an > > kernel allocation and pages on the highmem zone cannot be available > > for an kernel allocation. > > 4. Otherwise, use PageHighMemZone(). It's safe since it's implementation > > is just copy of the previous PageHighMem() implementation and won't > > be changed. > > > > I apply the rule #3 for this patch. > > > > Acked-by: Roman Gushchin <guro@fb.com> > > Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> > > Why do we care about the zone here? This only cares about having > kernel direct mapped pages as far as I can tell. My understaning is that what we want to do here is to first free memory that can be used for kernel allocation. If direct mapped page is on the zone that cannot be used for kernel allocation, there is no meaning to free this page first. So, we need to take a care of the zone here. Thanks.
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 5548e88..56c9143 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -2639,7 +2639,7 @@ static void try_to_free_low(struct hstate *h, unsigned long count, list_for_each_entry_safe(page, next, freel, lru) { if (count >= h->nr_huge_pages) return; - if (PageHighMem(page)) + if (PageHighMemZone(page)) continue; list_del(&page->lru); update_and_free_page(h, page);