Commit 2da1c309 authored by Muchun Song's avatar Muchun Song Committed by Andrew Morton

mm: hugetlb_vmemmap: delete hugetlb_optimize_vmemmap_enabled()

Patch series "Simplify hugetlb vmemmap and improve its readability", v2.

This series aims to simplify hugetlb vmemmap and improve its readability.


This patch (of 8):

The name hugetlb_optimize_vmemmap_enabled() a bit confusing as it tests
two conditions (enabled and pages in use).  Instead of coming up to an
appropriate name, we could just delete it.  There is already a discussion
about deleting it in thread [1].

There is only one user of hugetlb_optimize_vmemmap_enabled() outside of
hugetlb_vmemmap, that is flush_dcache_page() in arch/arm64/mm/flush.c. 
However, it does not need to call hugetlb_optimize_vmemmap_enabled() in
flush_dcache_page() since HugeTLB pages are always fully mapped and only
head page will be set PG_dcache_clean meaning only head page's flag may
need to be cleared (see commit cf5a501d).  So it is easy to remove
hugetlb_optimize_vmemmap_enabled().

Link: https://lore.kernel.org/all/c77c61c8-8a5a-87e8-db89-d04d8aaab4cc@oracle.com/ [1]
Link: https://lkml.kernel.org/r/20220628092235.91270-2-songmuchun@bytedance.comSigned-off-by: default avatarMuchun Song <songmuchun@bytedance.com>
Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
Reviewed-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Xiongchun Duan <duanxiongchun@bytedance.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent c8a684e2
...@@ -76,17 +76,10 @@ EXPORT_SYMBOL_GPL(__sync_icache_dcache); ...@@ -76,17 +76,10 @@ EXPORT_SYMBOL_GPL(__sync_icache_dcache);
void flush_dcache_page(struct page *page) void flush_dcache_page(struct page *page)
{ {
/* /*
* Only the head page's flags of HugeTLB can be cleared since the tail * HugeTLB pages are always fully mapped and only head page will be
* vmemmap pages associated with each HugeTLB page are mapped with * set PG_dcache_clean (see comments in __sync_icache_dcache()).
* read-only when CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP is enabled (more
* details can refer to vmemmap_remap_pte()). Although
* __sync_icache_dcache() only set PG_dcache_clean flag on the head
* page struct, there is more than one page struct with PG_dcache_clean
* associated with the HugeTLB page since the head vmemmap page frame
* is reused (more details can refer to the comments above
* page_fixed_fake_head()).
*/ */
if (hugetlb_optimize_vmemmap_enabled() && PageHuge(page)) if (PageHuge(page))
page = compound_head(page); page = compound_head(page);
if (test_bit(PG_dcache_clean, &page->flags)) if (test_bit(PG_dcache_clean, &page->flags))
......
...@@ -208,12 +208,6 @@ enum pageflags { ...@@ -208,12 +208,6 @@ enum pageflags {
DECLARE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON, DECLARE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON,
hugetlb_optimize_vmemmap_key); hugetlb_optimize_vmemmap_key);
static __always_inline bool hugetlb_optimize_vmemmap_enabled(void)
{
return static_branch_maybe(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON,
&hugetlb_optimize_vmemmap_key);
}
/* /*
* If the feature of optimizing vmemmap pages associated with each HugeTLB * If the feature of optimizing vmemmap pages associated with each HugeTLB
* page is enabled, the head vmemmap page frame is reused and all of the tail * page is enabled, the head vmemmap page frame is reused and all of the tail
...@@ -232,7 +226,8 @@ static __always_inline bool hugetlb_optimize_vmemmap_enabled(void) ...@@ -232,7 +226,8 @@ static __always_inline bool hugetlb_optimize_vmemmap_enabled(void)
*/ */
static __always_inline const struct page *page_fixed_fake_head(const struct page *page) static __always_inline const struct page *page_fixed_fake_head(const struct page *page)
{ {
if (!hugetlb_optimize_vmemmap_enabled()) if (!static_branch_maybe(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON,
&hugetlb_optimize_vmemmap_key))
return page; return page;
/* /*
...@@ -260,11 +255,6 @@ static inline const struct page *page_fixed_fake_head(const struct page *page) ...@@ -260,11 +255,6 @@ static inline const struct page *page_fixed_fake_head(const struct page *page)
{ {
return page; return page;
} }
static inline bool hugetlb_optimize_vmemmap_enabled(void)
{
return false;
}
#endif #endif
static __always_inline int page_is_fake_head(struct page *page) static __always_inline int page_is_fake_head(struct page *page)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment