aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/debug/kdb/kdb_io.c
diff options
context:
space:
mode:
authorJason Wessel <jason.wessel@windriver.com>2011-05-23 14:17:41 -0400
committerJason Wessel <jason.wessel@windriver.com>2011-08-01 14:23:59 -0400
commitf679c4985bb2e7de9d39a5d40b6031361c4ad861 (patch)
tree9750abdc0f876f38642c06c188b152324c512fdb /kernel/debug/kdb/kdb_io.c
parent3bdb65ec95e6cccffc40102d7c003047c45da90c (diff)
kdb,kgdb: Implement switch and pass buffer from kdb -> gdb
When switching from kdb mode to kgdb mode packets were getting lost depending on the size of the fifo queue of the serial chip. When gdb initially connects if it is in kdb mode it should entirely send any character buffer over to the gdbstub when switching connections. Previously kdb was zero'ing out the character buffer and this could lead to gdb failing to connect at all, or a lengthy pause could occur on the initial connect. Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Diffstat (limited to 'kernel/debug/kdb/kdb_io.c')
-rw-r--r--kernel/debug/kdb/kdb_io.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/kernel/debug/kdb/kdb_io.c b/kernel/debug/kdb/kdb_io.c
index 96fdaac46a8..bd233264b29 100644
--- a/kernel/debug/kdb/kdb_io.c
+++ b/kernel/debug/kdb/kdb_io.c
@@ -35,8 +35,8 @@ static void kgdb_transition_check(char *buffer)
35{ 35{
36 int slen = strlen(buffer); 36 int slen = strlen(buffer);
37 if (strncmp(buffer, "$?#3f", slen) != 0 && 37 if (strncmp(buffer, "$?#3f", slen) != 0 &&
38 strncmp(buffer, "$qSupported#37", slen) != 0 && 38 strncmp(buffer, "$qSupported", slen) != 0 &&
39 strncmp(buffer, "+$qSupported#37", slen) != 0) { 39 strncmp(buffer, "+$qSupported", slen) != 0) {
40 KDB_STATE_SET(KGDB_TRANS); 40 KDB_STATE_SET(KGDB_TRANS);
41 kdb_printf("%s", buffer); 41 kdb_printf("%s", buffer);
42 } 42 }
@@ -390,12 +390,14 @@ poll_again:
390 /* Special escape to kgdb */ 390 /* Special escape to kgdb */
391 if (lastchar - buffer >= 5 && 391 if (lastchar - buffer >= 5 &&
392 strcmp(lastchar - 5, "$?#3f") == 0) { 392 strcmp(lastchar - 5, "$?#3f") == 0) {
393 kdb_gdb_state_pass(lastchar - 5);
393 strcpy(buffer, "kgdb"); 394 strcpy(buffer, "kgdb");
394 KDB_STATE_SET(DOING_KGDB); 395 KDB_STATE_SET(DOING_KGDB);
395 return buffer; 396 return buffer;
396 } 397 }
397 if (lastchar - buffer >= 14 && 398 if (lastchar - buffer >= 11 &&
398 strcmp(lastchar - 14, "$qSupported#37") == 0) { 399 strcmp(lastchar - 11, "$qSupported") == 0) {
400 kdb_gdb_state_pass(lastchar - 11);
399 strcpy(buffer, "kgdb"); 401 strcpy(buffer, "kgdb");
400 KDB_STATE_SET(DOING_KGDB2); 402 KDB_STATE_SET(DOING_KGDB2);
401 return buffer; 403 return buffer;