[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