From owner-p4-projects@FreeBSD.ORG Thu May 1 18:23:09 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2D39A106567C; Thu, 1 May 2008 18:23:09 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E2E26106566B for ; Thu, 1 May 2008 18:23:08 +0000 (UTC) (envelope-from peter-gmail@wemm.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id CE4C88FC13 for ; Thu, 1 May 2008 18:23:08 +0000 (UTC) (envelope-from peter-gmail@wemm.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m41IN89r041009 for ; Thu, 1 May 2008 18:23:08 GMT (envelope-from peter-gmail@wemm.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m41IN8Lw041007 for perforce@freebsd.org; Thu, 1 May 2008 18:23:08 GMT (envelope-from peter-gmail@wemm.org) Date: Thu, 1 May 2008 18:23:08 GMT Message-Id: <200805011823.m41IN8Lw041007@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to peter-gmail@wemm.org using -f From: Peter Wemm To: Perforce Change Reviews Cc: Subject: PERFORCE change 140999 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 May 2008 18:23:09 -0000 http://perforce.freebsd.org/chv.cgi?CH=140999 Change 140999 by peter@peter_overcee on 2008/05/01 18:22:59 adapt & merge y! extensions for enter ~ ctrl-b ctrl-p = panic ctrl-r = reboot (actually shutdown_nice()) Affected files ... .. //depot/projects/hammer/sys/dev/sio/sio.c#59 edit .. //depot/projects/hammer/sys/kern/subr_kdb.c#22 edit .. //depot/projects/hammer/sys/sys/kdb.h#6 edit Differences ... ==== //depot/projects/hammer/sys/dev/sio/sio.c#59 (text+ko) ==== @@ -1469,7 +1469,12 @@ 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); int_ctl_new = int_ctl; @@ -1501,9 +1506,23 @@ #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"); + (kbd_brk = kdb_alt_break(recv_data, &com->alt_brk_state)) != 0) { + mtx_unlock_spin(&sio_lock); + switch (kdb_brk) { + case 1: + kdb_enter_why(KDB_WHY_BREAK, + "Break sequence on console"); + break; + case 2: + kdb_panic("panic on console"); + break; + case 3: + 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)) { ==== //depot/projects/hammer/sys/kern/subr_kdb.c#22 (text+ko) ==== @@ -221,6 +221,27 @@ return (0); } +void +kdb_panic(const char *msg) +{ + + if (kdb_dbbe != NULL && kdb_dbbe->dbbe_panic != NULL) { +#ifdef SMP + stop_cpus(PCPU_GET(other_cpus)); +#endif + printf("KDB: panic\n"); + kdb_dbbe->dbbe_panic(msg); + } +} + +void +kdb_reboot(void) +{ + + printf("KDB: reboot initiated\n"); + shutdown_nice(); +} + /* * Solaris implements a new BREAK which is initiated by a character sequence * CR ~ ^b which is similar to a familiar pattern used on Sun servers by the @@ -234,7 +255,11 @@ #define KEY_CR 13 /* CR '\r' */ #define KEY_TILDE 126 /* ~ */ -#define KEY_CRTLB 2 /* ^B */ +#define CTRL(x) (x&037) +#define KEY_CRTLB CTRL('b') +#define KEY_CRTLP CTRL('p') +#define KEY_CRTLR CTRL('r') +#undef CTRL int kdb_alt_break(int key, int *state) @@ -244,15 +269,26 @@ brk = 0; switch (key) { case KEY_CR: - *state = KEY_TILDE; + *state = 1; break; case KEY_TILDE: - *state = (*state == KEY_TILDE) ? KEY_CRTLB : 0; + *state = (*state == 1) ? 2 : 0; break; case KEY_CRTLB: - if (*state == KEY_CRTLB) + if (*state == 2) brk = 1; - /* FALLTHROUGH */ + *state = 0; + break; + case KEY_CRTLP: + if (*state == 2) + brk = 2; + *state = 0; + break; + case KEY_CRTLR: + if (*state == 2) + brk = 3; + *state = 0; + break; default: *state = 0; break; ==== //depot/projects/hammer/sys/sys/kdb.h#6 (text+ko) ==== @@ -69,6 +69,8 @@ void kdb_enter(const char *, const char *); void kdb_init(void); void * kdb_jmpbuf(jmp_buf); +void kdb_panic(const char *); +void kdb_reboot(void); void kdb_reenter(void); struct pcb *kdb_thr_ctx(struct thread *); struct thread *kdb_thr_first(void);