linux/arch/mips
Kevin Cernekee d0023c4a0a MIPS: Add SYNC after cacheflush
On processors with deep write buffers, it is likely that many cycles
will pass between a CACHE instruction and the time the data actually
gets written out to DRAM.  Add a SYNC instruction to ensure that the
buffers get emptied before the flush functions return.

Actual problem seen in the wild:

1) dma_alloc_coherent() allocates cached memory

2) memset() is called to clear the new pages

3) dma_cache_wback_inv() is called to flush the zero data out to memory

4) dma_alloc_coherent() returns an uncached (kseg1) pointer to the
freshly allocated pages

5) Caller writes data through the kseg1 pointer

6) Buffered writeback data finally gets flushed out to DRAM

7) Part of caller's data is inexplicably zeroed out

This patch adds SYNC between steps 3 and 4, which fixed the problem.

Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: 
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2011-07-25 17:26:53 +01:00
..
alchemy Merge branch 'timers-clocksource-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-05-19 17:44:13 -07:00
ar7 MIPS: AR7: Replace __attribute__((__packed__)) with __packed 2011-07-25 17:23:20 +01:00
ath79 USB: ohci: add bus glue for the Atheros AR71XX/AR7240 SoCs 2011-04-13 16:58:19 -07:00
bcm47xx MIPS: BCM47xx: Extend the filling of SPROM from NVRAM 2011-05-19 09:55:47 +01:00
bcm63xx SSB: Change fallback sprom to callback mechanism. 2011-05-19 09:55:47 +01:00
boot MIPS: Alchemy: Rewrite UART setup and constants. 2011-05-19 09:55:45 +01:00
cavium-octeon Merge git://git.infradead.org/mtd-2.6 2011-05-27 20:06:53 -07:00
cobalt
configs rtc: fix build warnings in defconfigs 2011-06-15 20:04:02 -07:00
dec MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
emma MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
fw Merge branch 'master' into for-next 2011-04-26 10:22:59 +02:00
include/asm MIPS: topdown mmap support 2011-07-25 17:26:51 +01:00
jazz MIPS: Jazz: Fix GCC 4.6.0 build error 2011-05-10 18:15:23 +01:00
jz4740 Merge branch 'timers-clocksource-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-05-19 17:44:13 -07:00
kernel MIPS: Remove redundant addr_limit assignment on exec. 2011-07-25 17:23:29 +01:00
lantiq MIPS: Lantiq: Add missing clk_enable and clk_disable functions. 2011-07-20 23:12:12 +01:00
lasat MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
lib MIPS: Kconfig and Makefile update for Netlogic XLR/XLS 2011-05-19 09:55:40 +01:00
loongson Merge branch 'timers-clocksource-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-05-19 17:44:13 -07:00
math-emu Fix common misspellings 2011-03-31 11:26:23 -03:00
mipssim MIPS: MIPSsim: Fix uniprocessor build. 2011-07-20 23:12:11 +01:00
mm MIPS: Add SYNC after cacheflush 2011-07-25 17:26:53 +01:00
mti-malta MIPS: Malta: Fix crash in SMP kernel on non-CMP systems. 2011-07-20 23:12:10 +01:00
netlogic MIPS: Netlogic: SMP fixes for XLR/XLS platform code. 2011-07-20 23:12:11 +01:00
nxp/pnx8550/common
oprofile mips: change to new flag variable 2011-03-17 14:02:56 +01:00
pci MIPS: NILE4: Remove useless inclusion of GT64120 header. 2011-07-20 23:12:09 +01:00
pmc-sierra MIPS: Malta: Fix crash in SMP kernel on non-CMP systems. 2011-07-20 23:12:10 +01:00
pnx833x Fix common misspellings 2011-03-31 11:26:23 -03:00
pnx8550 MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
power MIPS: Hibernation: Fixes for PAGE_SIZE >= 64kb 2011-05-10 18:15:26 +01:00
powertv MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
rb532 MIPS: RB532: Fix iomap resource size miscalculation. 2011-05-18 14:18:26 +01:00
sgi-ip22 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2011-05-23 09:12:26 -07:00
sgi-ip27 Merge branch 'timers-clocksource-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-05-19 17:44:13 -07:00
sgi-ip32 MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
sibyte MIPS: SB1250: Restore dropped irq_mask function 2011-07-20 23:12:11 +01:00
sni MIPS: SNI: Fix GCC 4.6.0 build error 2011-05-10 18:15:23 +01:00
txx9 Merge git://git.infradead.org/mtd-2.6 2011-05-27 20:06:53 -07:00
vr41xx mips: vr41xx: Use irdq_irq_disabled() 2011-03-29 14:48:07 +02:00
wrppmc
Kbuild MIPS: Repair Kbuild make clean breakage. 2010-10-19 18:32:39 +01:00
Kbuild.platforms MIPS: XLR, XLS: Move makefile bits to were they belong. 2011-07-20 23:12:11 +01:00
Kconfig arch: remove CONFIG_GENERIC_FIND_{NEXT_BIT,BIT_LE,LAST_BIT} 2011-05-26 17:12:38 -07:00
Kconfig.debug lib: consolidate DEBUG_STACK_USAGE option 2011-05-25 08:39:54 -07:00
Makefile MIPS: XLR, XLS: Move makefile bits to were they belong. 2011-07-20 23:12:11 +01:00