Hi Ajeet,
On Tue, Nov 09, 2010 at 04:43:04PM +0530, Ajeet Yadav wrote:
> True, its the same system and you were right it was cache VIPT cache problem
> the cache hold the stale value even after xlog_bread() update the buffer.
> I do not know whether its correct ways to resolve the problem, but the
> problem no longer occur.
It seems like you more less re-implemented the vmap coherency hooks
inside XFS, hardcoded to the mips implementation.
The actual helpers would looks something like:
static inline void flush_kernel_vmap_range(void *addr, int size)
{
dma_cache_inv(addr, size);
}
static inline void invalidate_kernel_vmap_range(void *addr, int size)
{
dma_cache_inv(addr, size);
}
For some reason the kernel also expects flush_dcache_page to be
implemented by an architecture if we want to implement these two
(it's keyed off ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE).
Can someone of the mips folks helps with this?
The testcase is easy, mounting an xfs filesystem after an unclean
shutdown on a machine with virtually indexed caches.
|