47 lines
1.5 KiB
Diff
47 lines
1.5 KiB
Diff
From: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
|
|
Subject: mips/ide: flush dcache also if icache does not snoop dcache
|
|
|
|
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.
|
|
|
|
Cc: stable@kernel.org
|
|
Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
|
|
---
|
|
arch/mips/include/asm/mach-generic/ide.h | 6 +++---
|
|
1 files changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/arch/mips/include/asm/mach-generic/ide.h b/arch/mips/include/asm/mach-generic/ide.h
|
|
index 9c93a5b..e80e47f 100644
|
|
--- a/arch/mips/include/asm/mach-generic/ide.h
|
|
+++ b/arch/mips/include/asm/mach-generic/ide.h
|
|
@@ -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) {
|