mirror of https://gitee.com/openkylin/linux.git
powerpc/mem: Inline flush_dcache_page()
flush_dcache_page() is only a few lines, it is worth inlining. ia64, csky, mips, openrisc and riscv have a similar flush_dcache_page() and inline it. On pmac32_defconfig, we get a small size reduction. On ppc64_defconfig, we get a very small size increase. In both case that's in the noise (less than 0.1%). text data bss dec hex filename 18991155 59347441497624
26423523 19330e3 vmlinux64.before 189948295936732
1497624
26429185 1934701 vmlinux64.after 9150963 2467502 184548 11803013 b41985 vmlinux32.before9149689
2467302 184548 11801539 b413c3 vmlinux32.after Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/21c417488b70b7629dae316539fb7bb8bdef4fdd.1617895813.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
67b8e6af19
commit
6c96020882
|
@ -30,7 +30,19 @@ static inline void flush_cache_vmap(unsigned long start, unsigned long end)
|
||||||
#endif /* CONFIG_PPC_BOOK3S_64 */
|
#endif /* CONFIG_PPC_BOOK3S_64 */
|
||||||
|
|
||||||
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
|
||||||
extern void flush_dcache_page(struct page *page);
|
/*
|
||||||
|
* This is called when a page has been modified by the kernel.
|
||||||
|
* It just marks the page as not i-cache clean. We do the i-cache
|
||||||
|
* flush later when the page is given to a user process, if necessary.
|
||||||
|
*/
|
||||||
|
static inline void flush_dcache_page(struct page *page)
|
||||||
|
{
|
||||||
|
if (cpu_has_feature(CPU_FTR_COHERENT_ICACHE))
|
||||||
|
return;
|
||||||
|
/* avoid an atomic op if possible */
|
||||||
|
if (test_bit(PG_dcache_clean, &page->flags))
|
||||||
|
clear_bit(PG_dcache_clean, &page->flags);
|
||||||
|
}
|
||||||
|
|
||||||
void flush_icache_range(unsigned long start, unsigned long stop);
|
void flush_icache_range(unsigned long start, unsigned long stop);
|
||||||
#define flush_icache_range flush_icache_range
|
#define flush_icache_range flush_icache_range
|
||||||
|
|
|
@ -121,21 +121,6 @@ static void flush_dcache_icache_phys(unsigned long physaddr)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* This is called when a page has been modified by the kernel.
|
|
||||||
* It just marks the page as not i-cache clean. We do the i-cache
|
|
||||||
* flush later when the page is given to a user process, if necessary.
|
|
||||||
*/
|
|
||||||
void flush_dcache_page(struct page *page)
|
|
||||||
{
|
|
||||||
if (cpu_has_feature(CPU_FTR_COHERENT_ICACHE))
|
|
||||||
return;
|
|
||||||
/* avoid an atomic op if possible */
|
|
||||||
if (test_bit(PG_dcache_clean, &page->flags))
|
|
||||||
clear_bit(PG_dcache_clean, &page->flags);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(flush_dcache_page);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __flush_dcache_icache(): Flush a particular page from the data cache to RAM.
|
* __flush_dcache_icache(): Flush a particular page from the data cache to RAM.
|
||||||
* Note: this is necessary because the instruction cache does *not*
|
* Note: this is necessary because the instruction cache does *not*
|
||||||
|
|
Loading…
Reference in New Issue