Title: [5332] trunk: Task[#3428] Enable SMP in kgdb.
- Revision
- 5332
- Author
- sonicz
- Date
- 2008-09-24 05:32:09 -0500 (Wed, 24 Sep 2008)
Log Message
Task[#3428] Enable SMP in kgdb.
Test on bf561 with SMP patch.
Modified Paths
Diff
Modified: trunk/arch/blackfin/kernel/kgdb.c (5331 => 5332)
--- trunk/arch/blackfin/kernel/kgdb.c 2008-09-23 18:29:00 UTC (rev 5331)
+++ trunk/arch/blackfin/kernel/kgdb.c 2008-09-24 10:32:09 UTC (rev 5332)
@@ -261,10 +261,6 @@
{
int breakno;
- bfin_write_WPIACTL(0);
- bfin_write_WPDACTL(0);
- CSYNC();
-
memset(breakinfo, 0, sizeof(struct hw_breakpoint)*HW_WATCHPOINT_NUM);
for (breakno = 0; breakno < HW_INST_WATCHPOINT_NUM; breakno++)
@@ -396,10 +392,6 @@
int i;
switch (remcom_in_buffer[0]) {
-#ifdef CONFIG_SMP
- case 'H':
- return 0;
-#endif
case 'c':
case 's':
if (kgdb_contthread && kgdb_contthread != current) {
@@ -454,7 +446,11 @@
struct kgdb_arch arch_kgdb_ops = {
.gdb_bpt_instr = {0xa1},
+#ifdef CONFIG_SMP
+ .flags = KGDB_HW_BREAKPOINT|KGDB_THR_PROC_SWAP,
+#else
.flags = KGDB_HW_BREAKPOINT,
+#endif
.set_hw_breakpoint = bfin_set_hw_break,
.remove_hw_breakpoint = bfin_remove_hw_break,
.remove_all_hw_break = bfin_remove_all_hw_break,
@@ -476,56 +472,53 @@
{
int cpu = raw_smp_processor_id();
- if (size == 0)
- return 0;
- if (addr < (addr + size))
- return 0;
+ if (size < 0)
+ return EFAULT;
if (addr >= 0x1000 && (addr + size) <= physical_mem_end)
return 0;
if (addr >= SYSMMR_BASE)
return 0;
if (addr >= ASYNC_BANK0_BASE
- && addr + size <= ASYNC_BANK3_BASE + ASYNC_BANK3_BASE)
+ && addr + size <= ASYNC_BANK3_BASE + ASYNC_BANK3_SIZE)
return 0;
-
if (cpu == 0) {
if (addr >= L1_SCRATCH_START
- && addr + size <= L1_SCRATCH_START + L1_SCRATCH_LENGTH)
+ && (addr + size <= L1_SCRATCH_START + L1_SCRATCH_LENGTH))
return 0;
#if L1_CODE_LENGTH != 0
if (addr >= L1_CODE_START
- && addr + size <= L1_CODE_START + L1_CODE_LENGTH)
+ && (addr + size <= L1_CODE_START + L1_CODE_LENGTH))
return 0;
#endif
#if L1_DATA_A_LENGTH != 0
if (addr >= L1_DATA_A_START
- && addr + size <= L1_DATA_A_START + L1_DATA_A_LENGTH)
+ && (addr + size <= L1_DATA_A_START + L1_DATA_A_LENGTH))
return 0;
#endif
#if L1_DATA_B_LENGTH != 0
if (addr >= L1_DATA_B_START
- && addr + size <= L1_DATA_B_START + L1_DATA_B_LENGTH)
+ && (addr + size <= L1_DATA_B_START + L1_DATA_B_LENGTH))
return 0;
#endif
#ifdef CONFIG_SMP
} else if (cpu == 1) {
if (addr >= COREB_L1_SCRATCH_START
- && addr + size <= COREB_L1_SCRATCH_START
- + L1_SCRATCH_LENGTH)
+ && (addr + size <= COREB_L1_SCRATCH_START
+ + L1_SCRATCH_LENGTH))
return 0;
# if L1_CODE_LENGTH != 0
if (addr >= COREB_L1_CODE_START
- && addr + size <= COREB_L1_CODE_START + L1_CODE_LENGTH)
+ && (addr + size <= COREB_L1_CODE_START + L1_CODE_LENGTH))
return 0;
# endif
# if L1_DATA_A_LENGTH != 0
if (addr >= COREB_L1_DATA_A_START
- && addr + size <= COREB_L1_DATA_A_START + L1_DATA_A_LENGTH)
+ && (addr + size <= COREB_L1_DATA_A_START + L1_DATA_A_LENGTH))
return 0;
# endif
# if L1_DATA_B_LENGTH != 0
if (addr >= COREB_L1_DATA_B_START
- && addr + size <= COREB_L1_DATA_B_START + L1_DATA_B_LENGTH)
+ && (addr + size <= COREB_L1_DATA_B_START + L1_DATA_B_LENGTH))
return 0;
# endif
#endif
@@ -779,13 +772,13 @@
int err;
int cpu = raw_smp_processor_id();
- if (cpu == 0 && (unsigned int)addr >= L1_CODE_START
+ if ((cpu == 0 && (unsigned int)addr >= L1_CODE_START
&& (unsigned int)(addr + BREAK_INSTR_SIZE)
- < L1_CODE_START + L1_CODE_LENGTH
+ < L1_CODE_START + L1_CODE_LENGTH)
#ifdef CONFIG_SMP
- || cpu == 1 && (unsigned int)addr >= COREB_L1_CODE_START
+ || (cpu == 1 && (unsigned int)addr >= COREB_L1_CODE_START
&& (unsigned int)(addr + BREAK_INSTR_SIZE)
- < COREB_L1_CODE_START + L1_CODE_LENGTH
+ < COREB_L1_CODE_START + L1_CODE_LENGTH)
#endif
) {
/* access L1 instruction SRAM */
Modified: trunk/include/linux/kgdb.h (5331 => 5332)
--- trunk/include/linux/kgdb.h 2008-09-23 18:29:00 UTC (rev 5331)
+++ trunk/include/linux/kgdb.h 2008-09-24 10:32:09 UTC (rev 5332)
@@ -107,6 +107,7 @@
#endif
#define KGDB_HW_BREAKPOINT 1
+#define KGDB_THR_PROC_SWAP 2
/*
* Functions each KGDB-supporting architecture must provide:
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
http://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits