]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
microblaze: Clear i/dcache for sw breakpoints
authorMichal Simek <monstr@monstr.eu>
Fri, 12 Nov 2010 13:27:10 +0000 (14:27 +0100)
committerMichal Simek <monstr@monstr.eu>
Mon, 3 Jan 2011 09:16:56 +0000 (10:16 +0100)
There is necessary to flush dcache and invalidate
icache for address where breakpoint (brki r16, 0x18)
was. The reason is that for some cases icache line
still keeps brki instruction and it is not updated
by origin instruction maintains by gdbserver.

Signed-off-by: Michal Simek <monstr@monstr.eu>
arch/microblaze/kernel/exceptions.c

index 478f2943ede77d3e5b6a507e6bec662dd7f1424c..a7fa6ae76d8982338d690939ee5c554dced410e4 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/errno.h>
 #include <linux/ptrace.h>
 #include <asm/current.h>
+#include <asm/cacheflush.h>
 
 #define MICROBLAZE_ILL_OPCODE_EXCEPTION        0x02
 #define MICROBLAZE_IBUS_EXCEPTION      0x03
@@ -52,6 +53,8 @@ void die(const char *str, struct pt_regs *fp, long err)
 void sw_exception(struct pt_regs *regs)
 {
        _exception(SIGTRAP, regs, TRAP_BRKPT, regs->r16);
+       flush_dcache_range(regs->r16, regs->r16 + 0x4);
+       flush_icache_range(regs->r16, regs->r16 + 0x4);
 }
 
 void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)