Hello. On 17-06-2011 19:20, Ralf Baechle wrote:
Ralf,
I'll second that request. We'll really need this, right now embedded XFS users are hacking around it in horrible ways.
Here's my shot at the problem. I don't have the time to setup a XFS filesystem and tools for testing before the weekend so all I claim is this patch builds for R4000-class CPUs but it should be pretty close to the real thing.
Naveen, can you give this patch a spin? Thanks!
Ralf
Signed-off-by: Ralf Baechle<ralf@xxxxxxxxxxxxxx>
[...]
diff --git a/arch/mips/include/asm/cacheflush.h b/arch/mips/include/asm/cacheflush.h index 40bb9fd..69468de 100644 --- a/arch/mips/include/asm/cacheflush.h +++ b/arch/mips/include/asm/cacheflush.h @@ -114,4 +114,28 @@ unsigned long run_uncached(void *func); extern void *kmap_coherent(struct page *page, unsigned long addr); extern void kunmap_coherent(void); +#define ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE +static inline void flush_kernel_dcache_page(struct page *page) +{ + BUG_ON(cpu_has_dc_aliases&& PageHighMem(page)); +} + +/* + * For now flush_kernel_vmap_range and invalidate_kernel_vmap_range both do a + * cache writeback and invalidate operation. + */ +extern void (*__flush_kernel_vmap_range)(unsigned long vaddr, int size); + +static inline void flush_kernel_vmap_range(void *vaddr, int size) +{ + if (cpu_has_dc_aliases) + __flush_kernel_vmap_range((unsigned long) vaddr, size); +} + +static inline void invalidate_kernel_vmap_range(void *vaddr, int size) +{ + if (cpu_has_dc_aliases) + __flush_kernel_vmap_range((unsigned long) vaddr, size);
Not __invalidate_kernel_vmap_range()? WBR, Sergei