On Tue, 04 Sep 2007 14:46:54 +0200, Franck Bui-Huu <firstname.lastname@example.org>
> > Indeed. But copy_strings() is not rare case (called on each execve),
> > so there might be some constraints which make us free from the
> > aliasing problem.
> The point is that this _generic_ function has been created so we need
> to understand if MIPS architecture needs to implement it or not,
> whatever its current usages. This was actually what I was trying to
> understand with this thread.
> Whatever the constraints, they don't seem to be intended at all since
> flush_kernel_dcache_page() is called... So even if the current code is
> working fine, it seems very fragile _if_ MIPS needs to implement this
> cache helper.
> > I'll look at it further, but any testcase are welcome.
I found the reason.
And MIPS flush_cache_range() blasts whole dcache! That's why empty
flush_kernel_dcache_page() was enough for now.
Anyway, here is a patch.
Subject: [MIPS] Implement flush_kernel_dcache_page()
Signed-off-by: Atsushi Nemoto <email@example.com>
diff --git a/include/asm-mips/cacheflush.h b/include/asm-mips/cacheflush.h
index 4933b49..82e734d 100644
@@ -79,6 +79,13 @@ extern void (*flush_icache_all)(void);
extern void (*local_flush_data_cache_page)(void * addr);
extern void (*flush_data_cache_page)(unsigned long addr);
+static inline void flush_kernel_dcache_page(struct page *page)
+ if (cpu_has_dc_aliases)
+ flush_data_cache_page((unsigned long)page_address(page));
* This flag is used to indicate that the page pointed to by a pte
* is dirty and requires cleaning before returning it to the user.