Implement a simple hook (or hack?) to allow graphics device console

drivers to protect DDB from being invoked while the console is in
process-controlled (i.e., graphics) mode.

Implement the logic to use this hook from within pcvt.  (I'm sure
Søren will do the syscons part RSN).

I've still got one occasion where the system stalled, but my attempts
to trigger the situation artificially resulted int the expected
behaviour.  It's hard to track bugs without the console and DDB
available. :-/
This commit is contained in:
Joerg Wunsch 1995-04-08 21:32:11 +00:00
parent 60ca0bff59
commit 4fb0b0de3e
8 changed files with 75 additions and 12 deletions

View File

@ -23,7 +23,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
* $Id: db_interface.c,v 1.11 1995/01/14 10:24:48 bde Exp $
* $Id: db_interface.c,v 1.12 1995/03/16 18:11:25 bde Exp $
*/
/*
@ -38,6 +38,8 @@
#include <machine/md_var.h>
#include <machine/segments.h>
#include <machine/cons.h> /* XXX: import cons_unavail */
#include <ddb/ddb.h>
#include <vm/pmap.h>
@ -79,6 +81,10 @@ kdb_trap(type, code, regs)
return(0);
#endif
/* XXX: do not block forever while the console is in graphics mode */
if(cons_unavail)
return 0;
switch (type) {
case T_BPTFLT: /* breakpoint */
case T_TRCTRAP: /* debug exception */
@ -239,7 +245,11 @@ Debugger(msg)
const char *msg;
{
static volatile u_char in_Debugger;
/* XXX: do not block forever while the console is in graphics mode */
if(cons_unavail)
return;
if (!in_Debugger) {
in_Debugger = 1;
db_printf("Debugger(\"%s\")\n", msg);

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* from: @(#)cons.c 7.2 (Berkeley) 5/9/91
* $Id: cons.c,v 1.23 1995/02/26 03:15:36 bde Exp $
* $Id: cons.c,v 1.24 1995/04/02 16:14:51 joerg Exp $
*/
#include <sys/param.h>
@ -73,6 +73,10 @@ static struct consdev constab[] = {
struct tty *constty = 0; /* virtual console output device */
struct tty *cn_tty; /* XXX: console tty struct for tprintf */
int cons_unavail = 0; /* XXX:
* physical console not available for
* input (i.e., it is in graphics mode)
*/
static u_char cn_is_open; /* nonzero if logical console is open */
static u_char cn_phys_is_open; /* nonzero if physical console is open */

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* from: @(#)cons.h 7.2 (Berkeley) 5/9/91
* $Id: cons.h,v 1.5 1994/05/25 08:53:05 rgrimes Exp $
* $Id: cons.h,v 1.6 1994/10/20 00:07:46 phk Exp $
*/
#ifndef _MACHINE_CONS_H_
@ -66,6 +66,7 @@ struct consdev {
extern struct consdev constab[];
extern struct consdev *cn_tab;
extern struct tty *cn_tty;
extern int cons_unavail;
struct proc; struct uio;

View File

@ -23,7 +23,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
* $Id: db_interface.c,v 1.11 1995/01/14 10:24:48 bde Exp $
* $Id: db_interface.c,v 1.12 1995/03/16 18:11:25 bde Exp $
*/
/*
@ -38,6 +38,8 @@
#include <machine/md_var.h>
#include <machine/segments.h>
#include <machine/cons.h> /* XXX: import cons_unavail */
#include <ddb/ddb.h>
#include <vm/pmap.h>
@ -79,6 +81,10 @@ kdb_trap(type, code, regs)
return(0);
#endif
/* XXX: do not block forever while the console is in graphics mode */
if(cons_unavail)
return 0;
switch (type) {
case T_BPTFLT: /* breakpoint */
case T_TRCTRAP: /* debug exception */
@ -239,7 +245,11 @@ Debugger(msg)
const char *msg;
{
static volatile u_char in_Debugger;
/* XXX: do not block forever while the console is in graphics mode */
if(cons_unavail)
return;
if (!in_Debugger) {
in_Debugger = 1;
db_printf("Debugger(\"%s\")\n", msg);

View File

@ -2427,8 +2427,19 @@ vgapage(int new_screen)
psignal(vsp->proc, vsp->smode.acqsig);
}
else
{
/* we are committed */
vt_switch_pending = 0;
#if PCVT_FREEBSD > 206
/*
* XXX: If pcvt is acting as the systems console,
* avoid panics going to the debugger while we are in
* process mode.
*/
if(pcvt_is_console)
cons_unavail = 0;
#endif
}
}
return 0;
}
@ -2498,6 +2509,15 @@ usl_vt_ioctl(Dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
vsp->proc = p;
vsp->pid = p->p_pid;
#if PCVT_FREEBSD > 206
/*
* XXX: If pcvt is acting as the systems console,
* avoid panics going to the debugger while we are in
* process mode.
*/
if(pcvt_is_console)
cons_unavail = (newmode.mode == VT_PROCESS);
#endif
splx(opri);
return 0;
@ -2564,9 +2584,16 @@ usl_vt_ioctl(Dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
vsp->smode.acqsig);
}
else
{
/* we are committed */
vt_switch_pending = 0;
return 0;
#if PCVT_FREEBSD > 206
/* XXX */
if(pcvt_is_console)
cons_unavail = 0;
#endif
return 0;
}
}
break;
@ -2575,6 +2602,11 @@ usl_vt_ioctl(Dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
if(vsp->vt_status & VT_WAIT_ACK) {
vt_switch_pending = 0;
vsp->vt_status &= ~VT_WAIT_ACK;
#if PCVT_FREEBSD > 206
/* XXX */
if(pcvt_is_console)
cons_unavail = 1;
#endif
return 0;
}
break;

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)subr_prf.c 8.3 (Berkeley) 1/21/94
* $Id: subr_prf.c,v 1.11 1995/03/16 18:12:40 bde Exp $
* $Id: subr_prf.c,v 1.12 1995/04/01 20:18:43 joerg Exp $
*/
#include <sys/param.h>
@ -53,6 +53,7 @@
#include <sys/tprintf.h>
#include <sys/syslog.h>
#include <sys/malloc.h>
#include <machine/cons.h>
/*
* Note that stdarg.h and the ANSI style va_start macro is used for both
@ -64,14 +65,14 @@
#include <machine/kdbparam.h>
#endif
#define TOCONS 0x01
#define TOTTY 0x02
#define TOLOG 0x04
struct tty *constty; /* pointer to console "window" tty */
extern cnputc(); /* standard console putc */
int (*v_putc)() = cnputc; /* routine to putc on virtual console */
void (*v_putc)(int) = cnputc; /* routine to putc on virtual console */
void logpri __P((int level));
static void putchar __P((int ch, int flags, struct tty *tp));

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* from: @(#)cons.c 7.2 (Berkeley) 5/9/91
* $Id: cons.c,v 1.23 1995/02/26 03:15:36 bde Exp $
* $Id: cons.c,v 1.24 1995/04/02 16:14:51 joerg Exp $
*/
#include <sys/param.h>
@ -73,6 +73,10 @@ static struct consdev constab[] = {
struct tty *constty = 0; /* virtual console output device */
struct tty *cn_tty; /* XXX: console tty struct for tprintf */
int cons_unavail = 0; /* XXX:
* physical console not available for
* input (i.e., it is in graphics mode)
*/
static u_char cn_is_open; /* nonzero if logical console is open */
static u_char cn_phys_is_open; /* nonzero if physical console is open */

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* from: @(#)cons.h 7.2 (Berkeley) 5/9/91
* $Id: cons.h,v 1.5 1994/05/25 08:53:05 rgrimes Exp $
* $Id: cons.h,v 1.6 1994/10/20 00:07:46 phk Exp $
*/
#ifndef _MACHINE_CONS_H_
@ -66,6 +66,7 @@ struct consdev {
extern struct consdev constab[];
extern struct consdev *cn_tab;
extern struct tty *cn_tty;
extern int cons_unavail;
struct proc; struct uio;