aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/debug/kdb
diff options
context:
space:
mode:
authorJason Wessel <jason.wessel@windriver.com>2010-05-20 22:04:22 -0400
committerJason Wessel <jason.wessel@windriver.com>2010-05-20 22:04:22 -0400
commitf5316b4aea024da9266d740322a5481657f6ce59 (patch)
tree5888fd0afa54fc3bab2711e583147c4b563836bc /kernel/debug/kdb
parentdcc7871128e99458ca86186b7bc8bf27ff0c47b5 (diff)
kgdb,8250,pl011: Return immediately from console poll
The design of the kdb shell requires that every device that can provide input to kdb have a polling routine that exits immediately if there is no character available. This is required in order to get the page scrolling mechanism working. Changing the kernel debugger I/O API to require all polling character routines to exit immediately if there is no data allows the kernel debugger to process multiple input channels. NO_POLL_CHAR will be the return code to the polling routine when ever there is no character available. CC: linux-serial@vger.kernel.org Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Diffstat (limited to 'kernel/debug/kdb')
-rw-r--r--kernel/debug/kdb/kdb_debugger.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/debug/kdb/kdb_debugger.c b/kernel/debug/kdb/kdb_debugger.c
index f024c0c4b8c4..bf6e8270e957 100644
--- a/kernel/debug/kdb/kdb_debugger.c
+++ b/kernel/debug/kdb/kdb_debugger.c
@@ -20,7 +20,15 @@
20get_char_func kdb_poll_funcs[] = { 20get_char_func kdb_poll_funcs[] = {
21 dbg_io_get_char, 21 dbg_io_get_char,
22 NULL, 22 NULL,
23 NULL,
24 NULL,
25 NULL,
26 NULL,
23}; 27};
28EXPORT_SYMBOL_GPL(kdb_poll_funcs);
29
30int kdb_poll_idx = 1;
31EXPORT_SYMBOL_GPL(kdb_poll_idx);
24 32
25int kdb_stub(struct kgdb_state *ks) 33int kdb_stub(struct kgdb_state *ks)
26{ 34{
@@ -85,6 +93,7 @@ int kdb_stub(struct kgdb_state *ks)
85 kdb_bp_remove(); 93 kdb_bp_remove();
86 KDB_STATE_CLEAR(DOING_SS); 94 KDB_STATE_CLEAR(DOING_SS);
87 KDB_STATE_CLEAR(DOING_SSB); 95 KDB_STATE_CLEAR(DOING_SSB);
96 KDB_STATE_SET(PAGER);
88 /* zero out any offline cpu data */ 97 /* zero out any offline cpu data */
89 for_each_present_cpu(i) { 98 for_each_present_cpu(i) {
90 if (!cpu_online(i)) { 99 if (!cpu_online(i)) {
@@ -112,6 +121,7 @@ int kdb_stub(struct kgdb_state *ks)
112 kdb_initial_cpu = -1; 121 kdb_initial_cpu = -1;
113 kdb_current_task = NULL; 122 kdb_current_task = NULL;
114 kdb_current_regs = NULL; 123 kdb_current_regs = NULL;
124 KDB_STATE_CLEAR(PAGER);
115 kdbnearsym_cleanup(); 125 kdbnearsym_cleanup();
116 if (error == KDB_CMD_KGDB) { 126 if (error == KDB_CMD_KGDB) {
117 if (KDB_STATE(DOING_KGDB) || KDB_STATE(DOING_KGDB2)) { 127 if (KDB_STATE(DOING_KGDB) || KDB_STATE(DOING_KGDB2)) {