diff options
| author | Peter Wemm <peter@FreeBSD.org> | 2008-05-04 23:29:38 +0000 |
|---|---|---|
| committer | Peter Wemm <peter@FreeBSD.org> | 2008-05-04 23:29:38 +0000 |
| commit | 43d7128c1450d36af259094b7cf39c0c4d17908c (patch) | |
| tree | dec162871c2e0c2defef809d28858069fac12065 /sys/dev/sio | |
| parent | 228d330b1a327345e2e1a7dbb9c6122b19604547 (diff) | |
Notes
Diffstat (limited to 'sys/dev/sio')
| -rw-r--r-- | sys/dev/sio/sio.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/sys/dev/sio/sio.c b/sys/dev/sio/sio.c index a62b411da578..a4cca4d86e56 100644 --- a/sys/dev/sio/sio.c +++ b/sys/dev/sio/sio.c @@ -1469,6 +1469,11 @@ siointr1(com) u_char modem_status; u_char *ioptr; u_char recv_data; +#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER) + int kdb_brk; + +again: +#endif if (COM_IIR_TXRDYBUG(com->flags)) { int_ctl = inb(com->int_ctl_port); @@ -1501,9 +1506,24 @@ siointr1(com) #ifdef KDB #ifdef ALT_BREAK_TO_DEBUGGER if (com->unit == comconsole && - kdb_alt_break(recv_data, &com->alt_brk_state) != 0) - kdb_enter(KDB_WHY_BREAK, - "Break sequence on console"); + (kdb_brk = kdb_alt_break(recv_data, + &com->alt_brk_state)) != 0) { + mtx_unlock_spin(&sio_lock); + switch (kdb_brk) { + case KDB_REQ_DEBUGGER: + kdb_enter(KDB_WHY_BREAK, + "Break sequence on console"); + break; + case KDB_REQ_PANIC: + kdb_panic("panic on console"); + break; + case KDB_REQ_REBOOT: + kdb_reboot(); + break; + } + mtx_lock_spin(&sio_lock); + goto again; + } #endif /* ALT_BREAK_TO_DEBUGGER */ #endif /* KDB */ if (line_status & (LSR_BI | LSR_FE | LSR_PE)) { |
