mips/ide: flush dcache also if icache does not snoop dcache
A message that is not in the archive (sent off-list or not yet received): 1286157343.3916.220.camel@localhost
If this is not done then the new just read data which remains in dcache will not make it into icache on time. Thus the CPU loads invalid data and executes crap. The result is that the user is not able to execute anything from its IDE based media while reading plain data is still working well.
This problem has been reported as Debian #404951.
Signed-off-by Sebastian Andrzej Siewior <[email protected]>
--- arch/mips/include/asm/mach-generic/ide.h | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
arch/mips/include/asm/mach-generic/ide.h +3 -3
@@ -23,7 +23,7 @@static inline void __ide_flush_prologue (void ) {#ifdef CONFIG_SMP -if (cpu_has_dc_aliases) +if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc)preempt_disable ();#endif }
@@ -31,14 +31,14 @@ static inline void __ide_flush_prologue(void)static inline void __ide_flush_epilogue (void ) {#ifdef CONFIG_SMP -if (cpu_has_dc_aliases) +if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc)preempt_enable ();#endif }static inline void __ide_flush_dcache_range (unsigned long addr,unsigned long size) { -if (cpu_has_dc_aliases) { +if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc) {unsigned long end = addr + size;while (addr < end) {
Signature · 1 line
1.6.6