mirror of https://gitee.com/openkylin/linux.git
powerpc/mem: flush_dcache_icache_phys() is for HIGHMEM pages only
__flush_dcache_icache() is usable for non HIGHMEM pages on every platform. It is only for HIGHMEM pages that BOOKE needs kmap() and BOOK3S needs flush_dcache_icache_phys(). So make flush_dcache_icache_phys() dependent on CONFIG_HIGHMEM and call it only when it is a HIGHMEM page. We could make flush_dcache_icache_phys() available at all time, but as it is declared NOKPROBE_SYMBOL(), GCC doesn't optimise it out when it is not used. So define a stub for !CONFIG_HIGHMEM in order to remove the #ifdef in flush_dcache_icache_page() and use IS_ENABLED() instead. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/79ed5d7914f497cd5fcd681ca2f4d50a91719455.1617895813.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
cd97d9e8b5
commit
52d490437f
|
@ -76,7 +76,7 @@ void flush_icache_range(unsigned long start, unsigned long stop)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(flush_icache_range);
|
EXPORT_SYMBOL(flush_icache_range);
|
||||||
|
|
||||||
#if !defined(CONFIG_PPC_8xx) && !defined(CONFIG_PPC64)
|
#ifdef CONFIG_HIGHMEM
|
||||||
/**
|
/**
|
||||||
* flush_dcache_icache_phys() - Flush a page by it's physical address
|
* flush_dcache_icache_phys() - Flush a page by it's physical address
|
||||||
* @physaddr: the physical address of the page
|
* @physaddr: the physical address of the page
|
||||||
|
@ -115,7 +115,11 @@ static void flush_dcache_icache_phys(unsigned long physaddr)
|
||||||
: "ctr", "memory");
|
: "ctr", "memory");
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(flush_dcache_icache_phys)
|
NOKPROBE_SYMBOL(flush_dcache_icache_phys)
|
||||||
#endif // !defined(CONFIG_PPC_8xx) && !defined(CONFIG_PPC64)
|
#else
|
||||||
|
static void flush_dcache_icache_phys(unsigned long physaddr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is called when a page has been modified by the kernel.
|
* This is called when a page has been modified by the kernel.
|
||||||
|
@ -185,18 +189,15 @@ void flush_dcache_icache_page(struct page *page)
|
||||||
if (PageCompound(page))
|
if (PageCompound(page))
|
||||||
return flush_dcache_icache_hugepage(page);
|
return flush_dcache_icache_hugepage(page);
|
||||||
|
|
||||||
#if defined(CONFIG_PPC_8xx) || defined(CONFIG_PPC64)
|
if (!PageHighMem(page)) {
|
||||||
/* On 8xx there is no need to kmap since highmem is not supported */
|
__flush_dcache_icache(lowmem_page_address(page));
|
||||||
__flush_dcache_icache(page_address(page));
|
} else if (IS_ENABLED(CONFIG_BOOKE) || sizeof(phys_addr_t) > sizeof(void *)) {
|
||||||
#else
|
|
||||||
if (IS_ENABLED(CONFIG_BOOKE) || sizeof(phys_addr_t) > sizeof(void *)) {
|
|
||||||
void *start = kmap_atomic(page);
|
void *start = kmap_atomic(page);
|
||||||
__flush_dcache_icache(start);
|
__flush_dcache_icache(start);
|
||||||
kunmap_atomic(start);
|
kunmap_atomic(start);
|
||||||
} else {
|
} else {
|
||||||
flush_dcache_icache_phys(page_to_phys(page));
|
flush_dcache_icache_phys(page_to_phys(page));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(flush_dcache_icache_page);
|
EXPORT_SYMBOL(flush_dcache_icache_page);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue