diff options
author | Paul Mundt <lethal@linux-sh.org> | 2007-10-03 17:21:10 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2007-10-03 17:21:10 +0900 |
commit | 01bd5e9ef2ead97059a1930de43942bdfc9e8755 (patch) | |
tree | 1b2c639a8c2239380929c7f7fe233fdfeecd07bd | |
parent | a90f354709b372c8dcabe3cd6315a83da5927573 (diff) | |
download | op-kernel-dev-01bd5e9ef2ead97059a1930de43942bdfc9e8755.zip op-kernel-dev-01bd5e9ef2ead97059a1930de43942bdfc9e8755.tar.gz |
sh: Make kgdb i-cache flushing less inept.
kgdb had its own ranged I-cache flushing routine that attempted to
duplicate the flush_icache_range() functionality, but managed to do
an explicit D-cache writeback & invalidate twice on SH-4. This is
a no-op for SH-3, and the flush_icache_range() semantics already do
what kgdb was feebly attempting to do already, so just move over to
that and kill off the wrapper.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r-- | arch/sh/kernel/kgdb_stub.c | 8 | ||||
-rw-r--r-- | include/asm-sh/kgdb.h | 12 |
2 files changed, 4 insertions, 16 deletions
diff --git a/arch/sh/kernel/kgdb_stub.c b/arch/sh/kernel/kgdb_stub.c index 27f64b9..2fdc700 100644 --- a/arch/sh/kernel/kgdb_stub.c +++ b/arch/sh/kernel/kgdb_stub.c @@ -609,7 +609,7 @@ static short *get_step_address(void) else addr = trap_registers.pc + 2; - kgdb_flush_icache_range(addr, addr + 2); + flush_icache_range(addr, addr + 2); return (short *) addr; } @@ -632,7 +632,7 @@ static void do_single_step(void) *addr = STEP_OPCODE; /* Flush and return */ - kgdb_flush_icache_range((long) addr, (long) addr + 2); + flush_icache_range((long) addr, (long) addr + 2); } /* Undo a single step */ @@ -642,7 +642,7 @@ static void undo_single_step(void) /* Use stepped_address in case we stopped elsewhere */ if (stepped_opcode != 0) { *(short*)stepped_address = stepped_opcode; - kgdb_flush_icache_range(stepped_address, stepped_address + 2); + flush_icache_range(stepped_address, stepped_address + 2); } stepped_opcode = 0; } @@ -728,7 +728,7 @@ static void write_mem_msg(int binary) ebin_to_mem(ptr, (char*)addr, length); else hex_to_mem(ptr, (char*)addr, length); - kgdb_flush_icache_range(addr, addr + length); + flush_icache_range(addr, addr + length); ptr = 0; send_ok_msg(); } diff --git a/include/asm-sh/kgdb.h b/include/asm-sh/kgdb.h index 5334e86..4bc8cb1 100644 --- a/include/asm-sh/kgdb.h +++ b/include/asm-sh/kgdb.h @@ -17,7 +17,6 @@ #define __KGDB_H #include <asm/ptrace.h> -#include <asm/cacheflush.h> /* Same as pt_regs but has vbr in place of syscall_nr */ struct kgdb_regs { @@ -67,17 +66,6 @@ extern int setjmp(jmp_buf __jmpb); /* Forced breakpoint */ #define breakpoint() __asm__ __volatile__("trapa #0x3c") -/* KGDB should be able to flush all kernel text space */ -#if defined(CONFIG_CPU_SH4) -#define kgdb_flush_icache_range(start, end) \ -{ \ - __flush_purge_region((void*)(start), (int)(end) - (int)(start));\ - flush_icache_range((start), (end)); \ -} -#else -#define kgdb_flush_icache_range(start, end) do { } while (0) -#endif - /* Taken from sh-stub.c of GDB 4.18 */ static const char hexchars[] = "0123456789abcdef"; |