[PATCH] ARM: fix highmem with VIPT cache and DMA

Catalin Marinas catalin.marinas at arm.com
Fri Mar 26 09:34:18 EDT 2010


On Thu, 2010-03-25 at 21:02 +0000, Nicolas Pitre wrote:
> --- a/arch/arm/include/asm/highmem.h
> +++ b/arch/arm/include/asm/highmem.h
> @@ -11,7 +11,11 @@
> 
>  #define kmap_prot              PAGE_KERNEL
> 
> -#define flush_cache_kmaps()    flush_cache_all()
> +#define flush_cache_kmaps() \
> +       do { \
> +               if (cache_is_vivt()) \
> +                       flush_cache_all(); \
> +       } while (0)

Do the aliasing VIPT caches need flushing as well?

> --- a/arch/arm/mm/highmem.c
> +++ b/arch/arm/mm/highmem.c
> @@ -79,7 +79,8 @@ void kunmap_atomic(void *kvaddr, enum km_type type)
>         unsigned int idx = type + KM_TYPE_NR * smp_processor_id();
> 
>         if (kvaddr >= (void *)FIXADDR_START) {
> -               __cpuc_flush_dcache_area((void *)vaddr, PAGE_SIZE);
> +               if (cache_is_vivt())
> +                       __cpuc_flush_dcache_area((void *)vaddr, PAGE_SIZE);

Same here (and probably some other places in this patch, not sure).

-- 
Catalin




More information about the linux-arm-kernel mailing list