Unverified Commit d33deda0 authored by Tong Tiangen's avatar Tong Tiangen Committed by Palmer Dabbelt
Browse files

riscv/mm: hugepage's PG_dcache_clean flag is only set in head page



HugeTLB pages are always fully mapped, so only setting head page's
PG_dcache_clean flag is enough.

Signed-off-by: default avatarTong Tiangen <tongtiangen@huawei.com>
Link: https://lore.kernel.org/lkml/20220331065640.5777-2-songmuchun@bytedance.com/
Link: https://lore.kernel.org/r/20221024094725.3054311-2-tongtiangen@huawei.com


Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
parent 6925ba3d
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -17,6 +17,13 @@ static inline void local_flush_icache_all(void)

static inline void flush_dcache_page(struct page *page)
{
	/*
	 * HugeTLB pages are always fully mapped and only head page will be
	 * set PG_dcache_clean (see comments in flush_icache_pte()).
	 */
	if (PageHuge(page))
		page = compound_head(page);

	if (test_bit(PG_dcache_clean, &page->flags))
		clear_bit(PG_dcache_clean, &page->flags);
}
+7 −0
Original line number Diff line number Diff line
@@ -82,6 +82,13 @@ void flush_icache_pte(pte_t pte)
{
	struct page *page = pte_page(pte);

	/*
	 * HugeTLB pages are always fully mapped, so only setting head page's
	 * PG_dcache_clean flag is enough.
	 */
	if (PageHuge(page))
		page = compound_head(page);

	if (!test_and_set_bit(PG_dcache_clean, &page->flags))
		flush_icache_all();
}