diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-07-16 13:11:29 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-07-16 13:11:29 +0200 |
| commit | 77e442461c74068217b59b356cf18992c78ed896 (patch) | |
| tree | 70f62a16bc6a81b63768279c9b40645d8f4dd4ff /arch/powerpc/lib/dma-noncoherent.c | |
| parent | d54191b85e294c46f05a2249b1f55ae54930bcc7 (diff) | |
| parent | 45158894d4d6704afbb4cefe55e5f6ca279fe12a (diff) | |
Merge branch 'linus' into x86/kprobes
Diffstat (limited to 'arch/powerpc/lib/dma-noncoherent.c')
| -rw-r--r-- | arch/powerpc/lib/dma-noncoherent.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/powerpc/lib/dma-noncoherent.c b/arch/powerpc/lib/dma-noncoherent.c index 6656d47841d..5d83907f659 100644 --- a/arch/powerpc/lib/dma-noncoherent.c +++ b/arch/powerpc/lib/dma-noncoherent.c @@ -348,8 +348,15 @@ void __dma_sync(void *vaddr, size_t size, int direction) switch (direction) { case DMA_NONE: BUG(); - case DMA_FROM_DEVICE: /* invalidate only */ - invalidate_dcache_range(start, end); + case DMA_FROM_DEVICE: + /* + * invalidate only when cache-line aligned otherwise there is + * the potential for discarding uncommitted data from the cache + */ + if ((start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1))) + flush_dcache_range(start, end); + else + invalidate_dcache_range(start, end); break; case DMA_TO_DEVICE: /* writeback only */ clean_dcache_range(start, end); |
