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

Reply via email to